1.转义字符为什么是\
转义字符为什么是 \
,而不是/
,因为html的标签已经被用了/
,比如<body/>
,所以\
是转义字符,而java、html的转义字符都是一样的。
/
也是同时正则开始和结束的字符,/^xxx$/
2.左闭右开原则
有编程经验的都知道,java、js很多方法都遵循左闭右开原则,比如“abcd”.subString(0, 2)截取结果是"ab",因为相当于解析"abcd"[0,2),也就是第0位和第1位。
为什么是左闭右开,而不是 左闭右闭 或者 左开右闭呢?
左闭右闭 [0, 4], [4, 6],区间会重合,不能形成连续的区间
左开右闭(0, 4], (4, 6],区间不会重合,但是会缺少了0
只有左闭右开可以避免上面2种情况
[0, 4), [4, 6)
3.什么是耦合
耦合度表示一个对象改变之后,会影响另外一个对象的程度
。
比如如果门锁跟钥匙是高耦合的,如果门锁变了,那么钥匙也要跟这边,这样子就是门锁和钥匙就是高耦合的;
汽车和轮胎是低耦合的,比如我的汽车由奔驰换成了宝马,但是轮胎还是25寸,轮胎不用变,这样子汽车和轮胎就是低耦合的。
我们要尽量使代码之间低耦合,因为代码是经常变动的,我们要尽量降低代码变动后产生的后果,高耦合的代码会动一发而牵全身!
4.如何提高 批量查询/批量更新接口 的效率
程序层面上
1)查询的时候尽量走缓存
2)如果实在要查询数据库,则将foreach N次+get 换成 getAll(条件)。将N次的创建数据库连接优化成一次,update同理。
3)更新前,如果之前有查询缓存或者数据库,可以判断dto和目前缓存或者数据库的记录是否一致,如果一致则不发update请求。
数据库层面上
1)建立索引,查询条件尽量走索引,最好的结果是走覆盖索引
2)sql优化:尽量不用子查询,及早过滤,只select需要的字段
5.idea进不了断点排查
1)首先排查项目启动的端口是否正确!因为有些项目可能是因为配置的端口错了,或者idea之前关闭的项目没真正被关闭,然后重启的时候项目的端口占用机制是如果端口被占用则随机使用其他端口。这样就会导致很难排查。
2)然后在接口处随便打印些东西,尝试热部署。如果热部署成功,则说明接口是触发的,如果此时进入到断点则正常;否则就是idea的bug,没有触发断点,这时候需要重启idea
6.使用springBootParent的好处
项目直接依赖springBootParent,springBootParent里面定义了很多框架的版本,并且这些版本的框架之间已经通过了兼容性测试,可以避免很多版本不兼容的问题
7.项目和模块
一个项目,可以包含多个模块。同时,一个项目,也可以作为另外一个更大的项目的一个子模块。idea就是这样设计的,即可以将某个文件夹导入成模块,也可以将其导入为项目。
项目和模块只是一个相对的概念,要看参考系是谁。比如一个项目,如果参考对象是一个更大的项目,那么这个小项目就是大项目的某一个模块,并且这个模块下还有子模块。如果这个项目的参考对象是它的一个子模块,那么它此时就应该被看作一个项目。
8.maven的版本继承
版本继承有两种方式
第一种方式是在父工程使用<dependencyManagement>
标签去管理。然后子工程可以不写<version>
,默认就会继承父工程的<version>
第二种方式是在父工程定义<properties>
,然后在<properties>
定义各种版本,然后子工程可以在<version>
里面引用<properties>
个人认为第二种方式比较好,因为idea可以直接点解<properties>
里面的变量,来看到这个版本是从哪里定义的。对于项目中模块比较大,版本管理起来会比较清晰,防止同一个jar被引用了多个版本进来导致jar包冲突。而第一种方式虽然maven编译没问题,但是却不知道jar的版本是在哪里被定义的