1 | @Resource |
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;
热爱生活,努力学习,实现自己的价值
1 | @Resource |
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;
##工具类
1 | import java.util.List; |
##使用
1 | public static void main(String[] args) { |
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;
为什么不直接使用文件后缀判断文件类型,而要通过读取文件头部获得文件类型呢?
原因是,处于安全考虑,部分木马程序是通过改变后缀来伪装为文件,上传到服务器,在服务器中作为可执行文件,对服务器进行攻击,通过文件头部文件获取真实文件类型,来限制此类病毒文件的上传来保护服务
##工具类
1 |
|
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;
首先,我们一一段代码为例:
1 | String[] array = {"1", "2", "3"}; |
遍历后结果如下:
1 | 1 |
结果毫无疑问。
我们再来看看编译后的源码(idea自带,在target包里打开你的类源码文件即可):
1 | String[] array = new String[]{"1", "2", "3"}; |
可见,遍历数组使用的是原始for循环,集合的话使用的是Iterator迭代器。
接下来我们来删除元素:
使用for循环:
1 | ArrayList<String> list = new ArrayList<>(); |
结果:
1 | 11:11:52.532 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333] |
显然成功!
使用foreach:
1 | ArrayList<String> list = new ArrayList<>(); |
结果:
1 | 11:50:48.333 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333] |
显然木有成功!
原因:
迭代器内部的每次遍历都会记录List内部的modcount当做预期值,然后在每次循环中用预期值与List的成员变量modCount作比较,但是普通list.remove调用的是List的remove,这时modcount++,但是iterator内记录的预期值=并没有变化,所以会报错。
如果想要删除元素的话需要使用迭代器内部的remove方法:
1 | ArrayList<String> list = new ArrayList<>(); |
结果:
1 | 12:06:14.042 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333] |
使用原始for:
1 | ArrayList<String> list = new ArrayList<>(); |
结果:
1 | 12:12:56.910 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333] |
可以修改元素;
使用foreach:
1 | ArrayList<String> list = new ArrayList<>(); |
结果:
1 | 12:34:47.207 [main] INFO com.xiaolinge.com.hello.HelloWord - [111, 222, 333] |
看到咯,不行的哦。
辣么,修改元素不行,修改元素的属性可不可以呢?让我们来看下吧。
(for就不测试了)
创建一个学生类:
1 | public class Student { |
接下来测试代码:
1 | Student student=new Student(1,"huge"); |
结果:
1 | huge |
很神奇!修改不了对象,却可以修改对象的属性。
for与foreach都可以遍历数组/集合,不过for则在较复杂的循环中效率更高。
foreach不可以删除/修改集合元素,而for可以
foreach和for都可以修改元素里面的属性
所以相比较下来for循环更为灵活。
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;
程序员应该都了解 Typora 是专注于编写 Markdown 格式的编辑软件,使用方便,支持多种格式导出。
PicGo 是一款免费的图床管理应用,支持拖拽上传,剪切板上传等方式。你可以用它快捷地将图片上传到图床并获得网络链接。
注意:请不要把 PicGo 安装到 C 盘 Program Files 下
为什么需要图床
Markdown 可以理解为增强版的文本文档,语法简单,支持更多的风格样式,相比 word 更加轻便,文件大小更小,同时可导出为指定格式,目前大多是技术博客论坛已支持 Markdown 格式,基本上可以做到一次编写多处使用。当然 Markdown 也存在缺点,比如图片。
Markdown 文档编写时可使用本地图片,但是无法在网络上使用。图床的作用可以理解为将文档中的图片放到网络上,直接引用网络地址,这样可以做到无论在那个平台都可以使用统一的图片地址。
搭建图床教程较多此处不做讨论,作者使用的是 github 搭建的免费图床。
配置 PicGo (CDN 加速)
图片
仓库名:用户名/仓库名
分支名:所属分支
token:
|-seetings
|– Developer settings
|——Personal access tokens 下生成
至此,便可通过 Typora 优雅的编写 Markdown 文档,图片粘贴到文档就能够自动上传到 github 图床了。
PicGo下载:
PicGo 开源地址:https://github.com/Molunerfinn/PicGo
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;
青龙面板 自身是可以支持python3、javaScript、shell、typescript 的定时任务管理面板(A timed task management panel that supports typescript, javaScript, python3, and shell.),在这里,我们就是通过它来定时执行js脚本薅羊毛的。
1 |
|
一辈子很短,努力的做好两件事就好;
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱;
docker-compose.yml 文件
1 | #mkdir -p /data/test-xzs/{conf,data,logs,mysql} |
sql 脚本
1 | /* |
一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。
【例如】:
部门表:id,name,parent_id
选择某一部门时,该部门下所有子部门分组,将名字拼接。
1 |
|
Sql Server:
使用Common Table Expression (CTE)
【例如】:
部门表:id,name,parent_id
选择某一部门时,该部门下所有子部门、子子部门全部遍历出来。
1 | WITH cte_child ( id, NAME, parent_id ) AS ( |
一辈子很短,努力的做好两件事就好:
第一件事是热爱生活,好好的去爱身边的人;
第二件事是努力学习,在工作中取得不一样的成绩,实现自己的价值,而不是仅仅为了赚钱。