![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
每日一题
面试题
奋斗的新丁
奋斗着并不断成长的菜鸟新丁
展开
-
类加载连接的解析步骤中符号引用替换为直接引用是什么意思
首先看图,当一个Java类被编译成Class之后,假如这个类称为A,并且A中引用了B,那么在编译阶段A是不知道B有没有被编译的,而且此时B也一定没有被加载,所以A 肯定不知道B的实际地址,那么此时在A的class文件中,将使用一个字符串S来代表B的地址,S就被称为符号引用,在运行时,如果A发生了类加载到了解析阶段会发现B还未被加载,那么将会触发B的类加载,将B加载到虚拟机中,此时A中B的符号引用将会被替换为B的实际地址,这被称为直接引用。这样也能真正的调用B了。 但...原创 2021-09-26 09:00:52 · 2303 阅读 · 3 评论 -
说说常用的SpringBoot注解及其实现
1.@SpringBootApplication注解:这个注解标识了一个SpringBoot工程,它实际上是另外三个注解的组合,这三个注解是:@SpringBootConfiguration:这个注解实际就是一个@Configuration,标识启动类也是一个配置类 @EnableAutoConfiguration:想SPring容器中导入了一个Selector,用来加载ClassPath下SpringFactories中所定义的自动配置类,将这些自动加载为配置Bean @ComponentScan原创 2021-08-12 10:50:06 · 917 阅读 · 0 评论 -
JDK1.7到JDK1.8 Java虚拟机发生了什么变化?
1.7中存在永久代,1.8中没有永久代,代替它的是元空间,元空间所占的内存不是在虚拟机内部,而是本地内存空间,这么做的原因是,不管是永久代还是元空间,他们都是方法区的具体实现,之所以元空间所占的内存改成本地内存,官方的说法是为了和JRockit同意,不过额外还有一些原因,比如方法区所储存的类信息通常是比较难确定的,所以对于方法区的大小是比较难指定的,太小了容易出现方法区溢出,太大了又会占用了太多虚拟机的内存空间,而转移到本地内存后则不会影响虚拟机所占用的内存。...原创 2021-08-12 10:30:52 · 835 阅读 · 0 评论 -
说一下JVM中,哪些是共享区,哪些可以作为gc root
1.堆区和方法区是所有线程共享的,栈、本地方法栈、程序计数器使每个线程独有的2、什么是gc root,JVM在进行垃圾回收时,需要找到“垃圾”对象,也就是没有被引用的对象,但是直接找“垃圾”对象是比较耗时的,所以反过来,先找“非垃圾”对象,也就是正常对象,name就需要从某些“根”开始去找,根据这些“根”的引用路径找到正常对象,而这些“根”有一个特征,就是它只会引用其他对象,而不会被其他对象引用,例如栈中的本地变量,方法区中的静态变量,本地方法栈中的变量,正在运行的线程等可以作为gc root..原创 2021-08-11 15:36:09 · 626 阅读 · 0 评论 -
说一下ThreadLocal
ThreadLocal是Java中所提供的线程本地存储机制,可以利用该机制将数据缓存在某个线程内部,该线程可以再任意时刻、任意方法中获取缓存的数据 ThreadLocal底层是通过ThreadLocalMap来实现的,每个Thread对象(注意不是ThreadLocal对象)中都存在一个ThreadLocalMap,Map的key为ThreadLocal对象,Map的value为需要缓存的值 如果在线程池中使用ThreadLocal会造成内存泄漏,在位当ThreadLocal对象使用完之后,应该要把设置原创 2021-08-11 14:49:53 · 233 阅读 · 0 评论 -
说一下HashMap的put方法
HashMap的put方法的大体流程1.根据key通过哈希算法与运算得出数组下标2.如果数据下标位置元素为空,则将key和value封装为Entry对象(JDK1.7是Entry对象,JDK1.8是Node对象)ing放入该位置3.如果数组下标位置元素不为空,则要分情况讨论如果是JDK1.7,则先判断是否需要扩容,如果要扩容就进行扩容。如果不用扩容就生成Entry对象,并使用头插法添加到当前位置的链表中 如果是JDK1.8,则会先判断当前位置上Node的类型,看是红黑树Node,还是链表N原创 2021-08-11 10:57:11 · 2652 阅读 · 0 评论 -
说一下ArrayList和和LinkedList区别
首先,它们的底层数据结构不同,ArrayList底层是基于数组实现的,LinkedList底层基于双向链表实现的。 由于底层数据结构不同,它们所适应的场景也不同,ArrayList更适合随机查找,LinkedList更适合删除和添加,查询、添加、删除的时间复杂度不同。 另外ArrayList和LinkedList欧实现了List接口,但是LinkedList还额外实现了Deque接口,所以LinkedList还可以当做队列来使用。...原创 2021-08-11 09:36:53 · 82 阅读 · 0 评论 -
HTTP端口号,HTTPS端口号和原理
https端口:443服务项目:Https网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP,简单来说,就是HTTP安全版,打开的网页中,如果网址前缀为https,则说明该网站开启了https安全访问。说明:443端口用于网页浏览,关闭电脑443端口,将会导致https网页无法正常打开。HTTP:80端口服务:HTTP说明:用于网页浏览,关闭电脑80端口,将会导致无法打开网页。HTTPS安全超文本传输协议,它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器原创 2021-02-25 11:26:10 · 1495 阅读 · 0 评论 -
Mysql utf8和utf8mb4的区别
结论:Mysql 中的 utf8 是假的UTF-8,utf8mb4才是正牌UTF-8,用 utf8mb4 就完事了MySQL的"utf8"不是UTF-8。MySQL中的“utf8”只支持每个字符最多三个字节,而真正的UTF-8是每个字符最多四个字节。MySQL 开发人员从未修复此错误。他们在2010年发布了一个解决方法:一个新的字符集称为"utf8mb4"。当然,他们从来没有宣传过这个(可能是因为这个错误太尴尬了)。以致于现在网络上仍然在建议开发者使用“utf8”,但这些建议都是错误的。原创 2021-02-25 11:25:27 · 155 阅读 · 0 评论