JAVA初级工程师面试36问(完结)
第三十一问: 说一下线程中sleep()和wait()区别?
1 . sleep()是让正在执行的线程主动让出CPU,当时间到了,在回到自己的线程让程序运行。但是它并没有释放同步资源锁只是让出。
2.wait()是让当前线程暂时退让出同步资源锁,让其他线程来获取到这个同步资源在调用notify()方法,才会让其解除wait状态,再次参与抢资源。
3. sleep()方法可以在任何地方使用,而wait()只能在同步方法或同步块使用。
第三十二问: 请问spring是如何处理循环依赖的?
spring中主要是采用了三级缓存的一种模式来解决循环依赖,内在就是三个缓存的map结构。他们分别是singletonObjects,singletonFactories,earlySingletonObjects。(此图是网上看到的,感觉很不错,如侵权告知删除)
解释:
singletonObjects:一级缓存,存储beanName(key)和bean实例(value)之间的关系,这里存储的bean实例是已经完全创建完成的bean实例
earlySingletonObjects:二级缓存,也是存储beanName和bean实例之间的关系,注意和singletonObjects的区别,这里存储的bean实例是没有创建完成的bean实例,即该bean还在创建过程中,为了解决循环引用的问题,将未创建完全的bean缓存起来。
singletonFactories:三级缓存,用于保存beanName和bean工厂之间的关系。当三级缓存创建bean成功后,会将bean放入二级缓存,并将beanName对应的beanFactory从singletonFactories中移除。
ObjectFactory:有getobject()方法,在创建单例bean的过程中,为了解决循环依赖问题,会创建beanName对应的ObjectFactory放入SingletonFactoies中,达到提前曝光bean的目的。三级缓存singletonFactory.getObject()(三级缓存)获取,如果获取到了则:
this.earlySingletonObjects.put(beanName, singletonObject);
this.singletonFactories.remove(beanName);
为什么要三级缓存?
getEarlyBeanReference中支持AwareBeanPostProcessor这样的后置处理器,给用户提供接口扩展的。
第三十三问: 请问springboot 微服务 如何解决跨域问题?
1.方法级别的跨域访问
2.全局跨域访问
第三十四问: 请问JVM 有哪些基本的垃圾回收算法?
一、按照基本回收策略
1.引用计数 :
对象有一个引用,即增加一个计数,删除一个引用则减少一个计数。垃圾回收时,只用收集计数为0的对象(无法解决循环引用)
2.标记-清除
此算法分为两个阶段.第一阶段从引用根节点开始标记所有被引用的对象,第二阶段遍历整个堆,把没有标记的对象清除(需要暂停整个应用,同时会产生碎片)
3.复制
此算法把内存空间划为两个相等的区域,每次只使用其中一个区域。垃圾回收时,遍历当前使用区域,把正在使用中的对象复制到另外一个区域中(每次只处理正在使用中的对象,不会出现“碎片”问题。就是需要两倍内存空间)
4.标记-整理
此算法结合了“标记-清除”和“复制”两个算法的优点。也是分两阶段,第一阶段从根节点开始标记所有被引用对象,第二阶段遍历整个堆,把清除未标记对象并且把存活对象“压缩”到堆的其中一块,按顺序排放。避免了碎片问题,也避免了“复制”算法的空间问题。
二、按分区对待的方式
1.增量收集
实时垃圾回收算法,即在应用进行的同时进行垃圾回收
2.分代收集
基于对对象生命周期分析后得出的垃圾回收算法。把对象分为年青代、年老代、持久代,对不同生命周期的对象使用不同的算法(上述方式中的一个)进行回收。现在的垃圾回收器(从J2SE1.2开始)都是使用此算法的.
三、按系统线程
1.串行收集
串行收集使用单线程处理所有垃圾回收工作,因为无需多线程交互,实现容易,而且效率比较高。但是,其局限性也比较明显,即无法使用多处理器的优势,所以此收集适合单处理器机器。当然,此收集器也可以用在小数据量(100M左右)情况下的多处理器机器上。
2.并行收集
并行收集使用多线程处理垃圾回收工作,速度快,效率高。而且理论上CPU数目越多,越能体现出并行收集器的优势。
3.并发收集
相对于串行收集和并行收集而言,前面两个在进行垃圾回收工作时,需要暂停整个运行环境,而只有垃圾回收程序在运行,因此,系统在垃圾回收时会有明显的暂停,而且暂停时间会因为堆越大而越长。
第三十五问: 请问JVM 如何解决同时存在的对象创建和对象回收问题?
1.垃圾回收线程是回收内存的,而程序运行线程则是消耗(或分配)内存的,一个回收内存,一个分配内存,从这点看,两者是矛盾的。
2.因此,在现有的垃圾回收方式中,要进行垃圾回收前,一般都需要暂停整个应用(即:暂停内存的分配),然后进行垃圾回收,回收完成后再继续应用。(缺点:当堆空间持续增大时,垃圾回收的时间也将会相应的持续增大,对应应用暂停的时间也会相应的增大。就是一些对相应时间要求很高的应用,比如最大暂停时间要求是几百毫秒,那么当堆空间大于几个G时,就很有可能超过这个限制,在这种情况下,垃圾回收将会成为系统运行的一个瓶颈。
3.并发垃圾回收算法,使用这种算法,垃圾回收线程与程序运行线程同时运行。在这种方式下,解决了暂停的问题,但是因为需要在新生成对象的同时又要回收对象,算法复杂性会大大增加,系统的处理能力也会相应降低,同时,“碎片”问题将会比较难解决.
因此,针对不同引用做不同的调优处理.
第三十六问: 谈谈你对Http协议与TCP协议简单理解?
1.Tcp协议对应着传输层,而HTTP协议对应着应用层;
2.从本质上而言,他们之间是没有区别的,因为http协议是建立在TCP协议之上的,比如,当我们发送一个http的请求,那么http就会通过tcp来建立一个连接到服务的一个通道,Http会立即将TCP断开,因此我们也说http是一种短连接或者无状态连接。
那什么叫无状态或者短链接?
1. 所谓的无状态,是指浏览器每次向服务器发起请求的时候,不是通过一个连接,而是每次都建立一个新的连接。如果是一个连接的话,服务器进程中就能保持这个连接并且在内存中记住一些信息状态,而每次请求结束后,连接就关闭,相关的内容就释放了,所以记不住状态,成为了无状态连接。
2.如果我们每次访问一个页面都要建 立一个TCP的连接,那效率就慢了,从HTTP/1.1开始,默认都开启了Keep-Alive,保持连接性,也就是说当一个网页打开完成后,http数据的tcp连接不会再关闭了,会有一个保持的时间,但是这个时间一到也会自动关闭。而http是短连接,tcp是长连接。因为,http每次请求完后就会关闭,而通过socket编程使用TCP协议的时候,控制开关闭的代码在我们手上,我们只要不关闭就会让连接状态一直保持着。
后:
至此,三十六问系列全部结束,每一个问题都可以发散带每一面,每个知识点,想要弄清除底层很多东西 就需要不断学习探索了, 希望可以帮助你们得面试,帮助你们巩固知识
JAVA初级工程师面试36问(完结)相关推荐
- JAVA初级工程师面试36问(一)
前几天,一个老家的小伙子正在找java初级开发工程师的岗位,问我一般会问什么问题? 第一时间听到这个,我在想:what? 除了刚开始找工作的第一年面试几家公司问了一些基础项东西,后面两家公司基本都是内 ...
- java初级工程师面试需要什么_初级Java工程师面试指导
一.概要 初级JavaWeb工程师的面试准备 Java基础知识面试指导 Java面向对象面试指导 JSP面试指导 MySQL数据库基础面试指导 Servlet面试指导 二.初级JavaWeb工程师的面 ...
- 面试总结----java初级工程师
最近在找java初级工程师的工作,投了很多简历都没有反馈,只收到了几个面试通知,可能是因为工作年限和项目经历都不是很丰富,另外一个原因可能是之前接触的技术不新,对于现在想进互联网公司来说,技术上不太符 ...
- 适合java初级工程师找工作的项目
哈喽,大家好.很多java初级工程师在找工作的时候,都不知道简历中的项目经验怎么写,今天就给大家分享一下,个人认为,对于初级工程师,没有工作经验的,如果说理论知识是非常好的,面试官问啥都能答出来,那项 ...
- 变态级JAVA程序员面试32问(附答案)(转载)
flyjimi的专栏 君士坦丁堡的血泪 CSDNBlog | 我的首页 | 联系作者 | 聚合 | 登录 66篇文章 :: 0篇收藏:: 9篇评论:: 0个Trackbac ...
- Java开发工程师面试总结
Java开发工程师面试总结 1. Java基础 1.1 接口与抽象类的区别 1.2 重写与重载的区别 1.3 集合 1.4 多线程 1.6 反射 2. Spring框架 2.1 IOC 2.2 AOP ...
- java中级工程师面试
java中级工程师面试 1.list如何转换为map. 1.创建一个POJO package test;public class User {private int id; private Strin ...
- linux bsp笔试题,Linux BSP工程师面试常问问题汇集.pdf
Linux BSP工程师面试常问问题汇集 Linux BSP 工程师面试常问问题汇集 TD 1.本文章遵从" 署名-非商业性使用 3.0 中国大陆 (CC BY-NC 3.0 CN)&quo ...
- 收藏|机械工程师面试常问问题
今天把我以前面试机械工程师时喜欢问的一些问题分享出来,机械工程师面试会问什么样的问题? 1.举例说明尺寸链的应用 尺寸链:在零件加工或机器装配过程中,由互相联系的尺寸按一定顺序首尾相接排列而成的封闭尺 ...
最新文章
- php redis删除所有key,redis中批量删除key的方法
- 厦门计算机高级职称,2021年厦门工程师职称属于哪种职称?
- 文本查找查找命令的grep 、egrep、fgrep用法的详解
- 构建高可用ZooKeeper集群(转载)
- Linux查看ip的命令详解
- linux磁盘空间清理
- python约瑟夫环_Python实现约瑟夫环问题的方法
- django后台多页面分页逻辑python代码
- excel帮助文档_可以惊艳到你的6个excel基础技巧
- EditText 双击才能获取点击事件
- python 队列实现_Python Queue队列实现线程通信
- 前端-chromeF12 谷歌开发者工具详解 Network篇
- 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题
- python画3d图-使用python绘制3d的图形
- [学习笔记]闵可夫斯基和
- 南方cass10.1中文安装教程
- CnPack 自动完成 回车时替换整个标识符
- pid温度控制c语言程序,51单片机PID温度控制程序
- 万年历实验报告单片机C语言,单片机电子实时时钟 万年历系统 综合实验报告下载...
- 倒立摆控制系统matlab,单轴倒立摆控制系统设计及Matlab仿真毕业设计论文(资料4)...