月度记录-2023-2月

118 阅读5分钟

1. spring-webmvc的HandlerInterceptor

拦截器,spring mvc的拦截器是只拦截controller而不拦截jsp,html 页面文件。(基于Java的反射机制)

2. jsp中url加斜杠和不加斜杠有什么区别?

设webapp为web程序包名

不加斜杠的形式(如”example.jsp”)请求的是相对于当前页面路径的资源 http://localhost:8080/webapp/examole;

加斜杠的形式(”/example.jsp”)请求的是服务器根目录下的资源,完整的url是由服务器地址+/example构成的:http://localhost:8080/example。

3. servletOutputStream,app下载文件用的这个

servletOutputStream = response.getOutputStream

4. DNS协议

递归查询:如果A请求B,那么B一定要给A答案。(我们请求本地DNS就是这种,所以只需要发起一次请求)

迭代查询:如果A请求B,然而B没有A想要的答案,那么B会告诉A如何去获得这个答案。(本地DNS去请求其他域名服务器)

5. 关于log4j2和slf4j的桥接包

由于SLF4J适配兼容性的中断,Log4j 现在发布两个版本的SLF4J to Log4j的适配器。log4j-slf4j-impl对应 SLF4J 1.7.x 及更早版本;log4j-slf4j18-impl对应SLF4J 1.8.x 及更高版本一起使用。

6. 关于公司项目日志结构

spring用jcl,jcl 又over slf4j,到slf4j这个包,slf4j又通过log4j-slf4j-impl桥接到log4j2 api,log4japi再去调用core。最终使用log4jcore记录日志。

注意:slf4j,就算你不给他具体的实现,也不会报错,因为里面存在一个NOPLoggerFactory,会忽略掉日志。(眼见不一定为实)

7. jar、sources.jar和javadoc.jar区别

jar 是我们需要用的 jar 包。

sources.jar 是 jar 包的源码。

javadoc.jar 解压之后会有很多的.html 文件,这些文件是在线的 api 帮助文档。

8. log4j2配置文件

百度一下

9. 搞明白下面这行为什么会出现空指针

SecurityContextHolder.getContext().getAuthentication().getPrincipal();

项目中这行空指针了

10. solr和es升级log4j2

其实都是删除原来的包,把新的添加进去,具体到我操作的版本就是:

solr需要删除原来的log4j1.2包,然后添加log4j-api、log4j-core、log4j-1.2-api-2.18.0.jar,这就好了(最后那个是2和1的桥接包,使用这个连配置文件都不需要改)

es直接删除旧的api和core,替换新的启动即可。

11. log4j-to-slf4j 和 log4j-sjl4j-impl区别

log4j-to-slf4j,其他日志门面(jcl)或日志系统(jul、log4j、log4j2)其实也定义了一组API,有些代码(比如我们引入一些jar包,里面的代码)调用了这些API,为了将这些调用统一起来都指向Slf4j API,我们就需要桥接器。说白了,就是把用到log4j的指向到slf4j。

log4j-slf4j-impl,这个用来让slf4j调用log4j。此外,还有一个log4j-slf4j18-impl,这个用于slf4j1.8版本。

12. tomcat不使用项目名访问

  1. 做法很简单,首先把webapps目录下的所有文件夹删除,把打包好的war放到webapps下,并命名为ROOT.war,那么在重启tomcat后就可以直接访问,不需要添加项目名。

  2. 打开tomcat 安装目录下的 conf/server.xml文件,在 `HOST` 节点下添加 Context 节点 docBase="项目绝对路径"

13. log4j配置文件中的gsys:catalina.home

也就是tomcat的bin和lib的父目录

14. main方法可以被重写和重载么?

可以重载,但是jvm将始终调用原始的main方法,而不会调用重载的main方法

不能重写,因为main方法是静态的,而static方法在java中无法重写

15. 多态 father f = new son();如果父子都存在同名成员变量和静态变量,会怎样?

对于多态中的静态变量、静态方法、成员变量,编译看左边,运行也看左边。

而对于非静态方法,编译看左边运行看右左边。也就是说如果编译期间看左边的类有没有该方法,而实际运行的时候是执行右边的方法。

16.项目无法启动,conf文件夹没有标记为sources root

公司项目一直启动不了,排查一直发现不了原因,总是莫名其妙的错误。最后发现是conf文件夹没有Mark directory as source root。真蠢

详细看了之后,发现在svn上两个文件有三点区别,也就是出错的这个项目相比其他项目缺少三个文件,分别是.settings、.project和.classpath,最有可能的就是因为缺少了.classpath,这个文件里面定义了是src或者con。idea加载eclipse项目的时候可能也会去读取eclipse的配置文件。这个项目恰恰缺少了这些配置文件,所以无法识别文件夹属性。

17. spring-web-3.2.0.M1.jar和spring-web-3.2.0.RELEASE.jar

spring-web-3.2.0.M1:Spring、Struts2整合需要。

spring-web-3.2.0.RELEASE.jar :Spring的Web模块, SpringMVC要用到。

有个项目区无法启动。经过排查发现,缺少release那个包,加上之后就可以启动了。项目里面没有用到struts,但是却有M1包,删掉还会报错。why

todo-> 暂时放弃,实在是找不到相关资料,以后再研究

18. idea快捷键alt+数字

打开各个面板,常见的有1(Project)、2(Favorites)、6(TODO)、7(Structure)

structure可以快速查看类里面的方法,非常好用,配合alt+1,绝了。但是我把2和7调换一下位置最好,对我来说使用频率更高一点,这样的话,我按alt+1项目,alt+2类,看代码比较方便

19. IDEA源码阅读利器 — UML类图插件Diagram

右键类,选择DIagrams。(alt竟然是放大镜,nb)