java面试题

学人智库 时间:2018-01-15 我要投稿
【www.unjs.com - 学人智库】

  Java具有简单性、面向对象、分布式、健壮性、安全性、平台x立与可移植性、多线程、动态性等特点,下面是小编整理的2017年java面试题,希望对你有帮助。

  1. 什么情况下会发生栈内存溢出。

  至于是堆内存溢出还是方法区内存溢出还是栈内存溢出,其实可以用一些工具比如

  JConsole来监视

  2. JVM 的内存结构,Eden 和 Survivor 比例。

  3. jvm 中一次完整的 GC 流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的 jvm 参数。

  4. 你知道哪几种垃圾收集器,各自的优缺点,重点讲下 cms,包括原理,流程,优缺点

  5. 垃圾回收算法的实现原理。

  6. 当出现了内存溢出,你怎么排错。

  7. JVM 内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存等。

  8. 简单说说你了解的类加载器。

  9. 讲讲 JAVA 的反射机制。

  10. 你们线上应用的 JVM 参数有哪些。

  11. g1 和 cms 区别,吞吐量优先和响应优先的垃圾收集器选择。

  12. 请解释如下 jvm 参数的含义:

  -server -Xms512m -Xmx512m -Xss1024K

  -XX:PermSize=256m -XX:MaxPermSize=512m -XX:MaxTenuringThreshold=20 XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly。

  http://blog.csdn.net/a503921892/article/details/39048889

  Xmx3550m:设置JVM最大可用内存为3550M。

  -Xms3550m:设置JVM初始内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

  -Xss128k: 设置每个线程的堆栈大小。在相同物理内 存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,

  经验值在3000~5000左右

  -XX:MaxPermSize=16m:设置持久代大小为16m

  -XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。

  如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

  开源框架知识

  1. 简单讲讲 tomcat 结构,以及其类加载器流程。

  2. tomcat 如何调优,涉及哪些参数。

  3. 讲讲 Spring 加载流程。

  4. 讲讲 Spring 事务的传播属性。

  PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

  5. Spring 如何管理事务的。

  6. Spring 怎么配置事务(具体说出一些关键的 xml元素)。

  tx:advice,aop:config

  7. 说说你对 Spring 的理解,非单例注入的原理?它的生命周期?循环注入的原理,aop 的实现原理,说说 aop 中的几个术语,它们是怎么相互工作的。

  8. Springmvc 中 DispatcherServlet初始化过程。

  操作系统

  1. Linux 系统下你关注过哪些内核参数,说说你知道的。

  2. Linux 下 IO 模型有几种,各自的含义是什么。

  3. epoll 和 poll 有什么区别。

  4. 平时用到哪些 Linux 命令。

  5. 用一行命令查看文件的最后五行。

  输出test文件的后五行:

  liyi@liyi:~/Desktop > tail -n 5 test

  输出test文件的前五行:

  liyi@liyi:~/Desktop > head -n 5 test

  6. 用一行命令输出正在运行的 java 进程。

  7. 介绍下你理解的操作系统中线程切换过程。

  8. 进程和线程的区别。

  多线程

  1. 多线程的几种实现方式,什么是线程安全。

  2. volatile 的原理,作用,能代替锁么。

  3. 画一个线程的生命周期状态图。

  4. sleep 和 wait 的区别。

  5. Lock 与 Synchronized 的区别。

  6. synchronized 的原理是什么,解释以下名词:重排序,自旋锁,偏向锁,轻量级锁,可重入锁,公平锁,非公平锁,乐观锁,悲观锁。

  7. 用过哪些原子类,他们的原理是什么。

  8. 用过线程池吗,newCache 和 newFixed 有什么区别,他们的原理简单概括下,构造函数的各个参数的含义是什么,比如 coreSize,maxsize 等。

  9. 线程池的关闭方式有几种,各自的区别是什么。

  10. 假如有一个第三方接口,有很多个线程去调用获取数据,现在规定每秒钟最多有 10 个线程同时调用它,如何做到。

  11. spring 的 controller 是单例还是多例,怎么保证并发的安全。

  singleton : bean在每个Spring ioc 容器中只有一个实例。

  prototype:一个bean的定义可以有多个实例。

  request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。

  12. 用三个线程按顺序循环打印 abc 三个字母,比如 abcabcabc。

  思路:解题思路大概是这样的,开启三个线程,每个线程一次打印一个字母,并且按照一定的顺序打印,当打印A的时候,其他线程处于阻塞状态,打印完A以后,

  将线程解锁,让打印B的那个线程开启,其他线程处于阻塞状态,同理打印C的时候,阻塞其他线程,这三个线程顺序循环,就达到顺序多次打印ABC的目的了。

  这道题看似思路简单,其实主要需要用到wait()方法和notify()方法,还有关键字synchronized,只有充分理解了这些,才能解出这道题。下面我有必要讲解一下这两个方法,

  还有关键字synchronized。

  13. ThreadLocal 用过么,用途是什么,原理是什么,用的时候要注意什么。

  14. 如果让你实现一个并发安全的链表,你会怎么做。

  15. 有哪些无锁数据结构,他们实现的原理是什么。

  16. 讲讲 java 同步机制的 wait 和 notify。

  17. 多线程如果线程挂住了怎么办。

  18. countdowlatch 和 cyclicbarrier的内部原理和用法,以及相互之间的差别。

  19. 使用 synchronized 修饰静态方法和非静态方法有什么区别。

  所有的非静态同步方法用的都是同一把锁——实例对象本身,也就是说如果一个实例对象的非静态同步方法获取锁后,

  该实例对象的其他非静态同步方法必须等待获取锁的方法释放锁后才能获取锁,

  可是别的实例对象的非静态同步方法因为跟该实例对象的非静态同步方法用的是不同的锁,

  所以毋须等待该实例对象已获取锁的非静态同步方法释放锁就可以获取他们自己的锁。

  而所有的静态同步方法用的也是同一把锁——类对象本身,这两把锁是两个不同的对象,

  所以静态同步方法与非静态同步方法之间是不会有竞态条件的。但是一旦一个静态同步方法获取锁后,

  其他的静态同步方法都必须等待该方法释放锁后才能获取锁,而不管是同一个实例对象的静态同步方法之间,

  还是不同的实例对象的静态同步方法之间,只要它们同一个类的实例对象!

  20. 简述 ConcurrentLinkedQueue 和 LinkedBlockingQueue 的用处和不同之处。

  21. 导致线程死锁的原因?怎么解除线程死锁。

  22. 非常多个线程(可能是不同机器),相互之间需要等待协调,才能完成某种工作,问怎么设计这种协调方案。

  23. 正确使用 Volatile 变量

  正确使用 volatile 变量的条件

  您只能在有限的一些情形下使用 volatile 变量替代锁。要使 volatile 变量提供理想的线程安全,必须同时满足下面两个条件:

  1对变量的写操作不依赖于当前值。

  2该变量没有包含在具有其他变量的不变式中。

  http://www.ibm.com/developerworks/cn/java/j-jtp06197.html

  TCP与HTTP

  1. http1.0 和 http1.1 有什么区别。

  在http1.0中,当建立连接后,客户端发送一个请求,服务器端返回一个信息后就关闭连接,

  当浏览器下次请求的时候又要建立连接,显然这种不断建立连接的方式,会造成很多问题。

  在http1.1中,引入了持续连接的概念,通过这种连接,浏览器可以建立一个连接之后,

  发送请求并得到返回信息,然后继续发送请求再次等到返回信息,也就是说客户端可以连续发送多个请求,而不用等待每一个响应的到来。

  2. TCP 三次握手和四次挥手的流程,为什么断开连接要 4次,如果握手只有两次,会出现什么。

  3. TIME_WAIT 和 CLOSE_WAIT 的区别。

  4. 说说你知道的几种 HTTP 响应码,比如 200, 302, 404。

  5. 当你用浏览器打开一个链接的时候,计算机做了哪些工作步骤。

  6. TCP/IP 如何保证可靠性,说说 TCP 头的结构。

  7. 如何避免浏览器缓存。

  8. 简述 Http 请求 get 和 post 的区别以及数据包格式。

  GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头<request-line>中

  POST提交:把提交的数据放置在是HTTP包的包体<request-body>中

[2017年java面试题]