第三十一问:   说一下线程中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问(完结)相关推荐

  1. JAVA初级工程师面试36问(一)

    前几天,一个老家的小伙子正在找java初级开发工程师的岗位,问我一般会问什么问题? 第一时间听到这个,我在想:what? 除了刚开始找工作的第一年面试几家公司问了一些基础项东西,后面两家公司基本都是内 ...

  2. java初级工程师面试需要什么_初级Java工程师面试指导

    一.概要 初级JavaWeb工程师的面试准备 Java基础知识面试指导 Java面向对象面试指导 JSP面试指导 MySQL数据库基础面试指导 Servlet面试指导 二.初级JavaWeb工程师的面 ...

  3. 面试总结----java初级工程师

    最近在找java初级工程师的工作,投了很多简历都没有反馈,只收到了几个面试通知,可能是因为工作年限和项目经历都不是很丰富,另外一个原因可能是之前接触的技术不新,对于现在想进互联网公司来说,技术上不太符 ...

  4. 适合java初级工程师找工作的项目

    哈喽,大家好.很多java初级工程师在找工作的时候,都不知道简历中的项目经验怎么写,今天就给大家分享一下,个人认为,对于初级工程师,没有工作经验的,如果说理论知识是非常好的,面试官问啥都能答出来,那项 ...

  5. 变态级JAVA程序员面试32问(附答案)(转载)

    flyjimi的专栏 君士坦丁堡的血泪 CSDNBlog  |  我的首页  |  联系作者  |  聚合   |  登录      66篇文章 :: 0篇收藏:: 9篇评论:: 0个Trackbac ...

  6. Java开发工程师面试总结

    Java开发工程师面试总结 1. Java基础 1.1 接口与抽象类的区别 1.2 重写与重载的区别 1.3 集合 1.4 多线程 1.6 反射 2. Spring框架 2.1 IOC 2.2 AOP ...

  7. java中级工程师面试

    java中级工程师面试 1.list如何转换为map. 1.创建一个POJO package test;public class User {private int id; private Strin ...

  8. linux bsp笔试题,Linux BSP工程师面试常问问题汇集.pdf

    Linux BSP工程师面试常问问题汇集 Linux BSP 工程师面试常问问题汇集 TD 1.本文章遵从" 署名-非商业性使用 3.0 中国大陆 (CC BY-NC 3.0 CN)&quo ...

  9. 收藏|机械工程师面试常问问题

    今天把我以前面试机械工程师时喜欢问的一些问题分享出来,机械工程师面试会问什么样的问题? 1.举例说明尺寸链的应用 尺寸链:在零件加工或机器装配过程中,由互相联系的尺寸按一定顺序首尾相接排列而成的封闭尺 ...

最新文章

  1. php redis删除所有key,redis中批量删除key的方法
  2. 厦门计算机高级职称,2021年厦门工程师职称属于哪种职称?
  3. 文本查找查找命令的grep 、egrep、fgrep用法的详解
  4. 构建高可用ZooKeeper集群(转载)
  5. Linux查看ip的命令详解
  6. linux磁盘空间清理
  7. python约瑟夫环_Python实现约瑟夫环问题的方法
  8. django后台多页面分页逻辑python代码
  9. excel帮助文档_可以惊艳到你的6个excel基础技巧
  10. EditText 双击才能获取点击事件
  11. python 队列实现_Python Queue队列实现线程通信
  12. 前端-chromeF12 谷歌开发者工具详解 Network篇
  13. 解决Selenium Webdriver执行测试时,每个测试方法都打开一个浏览器窗口的问题
  14. python画3d图-使用python绘制3d的图形
  15. [学习笔记]闵可夫斯基和
  16. 南方cass10.1中文安装教程
  17. CnPack 自动完成 回车时替换整个标识符
  18. pid温度控制c语言程序,51单片机PID温度控制程序
  19. 万年历实验报告单片机C语言,单片机电子实时时钟 万年历系统 综合实验报告下载...
  20. 倒立摆控制系统matlab,单轴倒立摆控制系统设计及Matlab仿真毕业设计论文(资料4)...

热门文章

  1. makecert 创建自签名证书,包含公共证书和私钥
  2. iOS导航栏遮挡问题的总结
  3. 怎样把OFD转换成word?手把手教你转换
  4. arcgispython空间插值_空间分析之插值(转)
  5. python 语音播报库_python腾讯语音合成
  6. 2017年最受欢迎的10大商城网站
  7. 安装rabbitmq时报错nothing provides erlang >= 25.0 needed by rabbitmq-server
  8. 强行把Robomaster S1升级为EP机器人
  9. 多个txt文件合并并排序
  10. 电商后台管理系统遇到的难点(1)