Java面试题整理

https://www.nowcoder.com/discuss/12805
华为面试感觉有点坑啊http://www.nowcoder.com/discuss/7768?type=0&order=3&pos=4448&page=2

一、Java基础

1.JVM虚拟机(内存模型、垃圾收集、gc)

  1. gc算法(JVM内存模型、分区,组成部分特点,GC算法,minor gc和full gc,再说说垃圾回收器,Serial、ParNew、CMS等,类加载等问题)【10】
  2. 新生老生代gc算法实现
  3. 垃圾回收机制(垃圾判断算法、垃圾回收算法、垃圾回收器)
  4. JVM内存模型【3】
    【1-4答案】Java内存结构、虚拟机垃圾回收和gc算法
  5. 谈一谈finalize的理解
  6. Java 8 的新特性,我讲了一下非阻塞的同步方式CAS,????
  7. juc包内有哪些类,CAS如何实现,说一下对线程池的理解
  8. 事务的隔离级别和传播行为 ,另外跟他说一下ACID.????

2.Java的基础过程

  1. java的优势,Java有哪些特性(封装、继承、多态之类的)【2】
    1. 封装、多态【2】
  2. new 实例化过程
  3. 反射的所有包,怎实现反射
  4. java修饰符(public、private、default、protected)
  5. 静态类与单例模式的区别
  6. 面向对象的设计规范
  7. 接口和抽象类的区别
  8. 继承的好处和坏处

    1. super()和this能不能同时使用

3.数组、字符、字符串

  1. String,StringBuffer,StringBuilder区别,String为什么不可变【3】
  2. 2.

4.链表

  1. 链表删去指定值的节点
  2. 2.

5.栈、队列

  1. 手写两个栈实现队列,优化【3】

6.树、图

  1. 树的中序遍历,除了递归和栈还有什么实现方式(Morris遍历)
  2. 说一下对B+树的了解
  3. 堆与普通二叉树有什么区别。

7.IO

  1. IO哪个类可以byte转String
  2. 说一下IO模型
  3. 说一说对java io的理解
  4. 操作系统IO的几种类型和原理

二、集合

HashMap相关

  1. Hashmap底层实现,原理,手撕【8】(处理冲突方法【3】?各个方法优缺点,为什么不用另一个有点的方法????)
  2. HashSet和HashMap的区别
  3. HashMap和HashTable的区别
  4. 谈一谈TreeMap
  5. ConcurrentHashMap以及HashMap在什么情况下性能会不好【2】
  6. HashMap如果有很多相同key,后面的链很长的话,你会怎么优化?或者你会用什么数据结构来存储?我说了一个SkipList
  7. 针对HashMap中某个Entry链太长,查找的时间复杂度可能达到O(n),怎么优化?(当时说了可能是容量或者hash算法的原因,说了扩容,寻找好的hash算法替代,然后面试官说不是这两个原因造成的,当时LZ也不知道JDK8中是采用红黑树进行处理的,就想不是为了降低查找时间复杂度吗,就说了用有序数组存储链表的数据,也就想到用有序数组查找的时间复杂度为O(nlogn )来解决,也是病急乱投医吧,最后面试官说也算是一种方法吧。)

List相关

  1. 常用集合类,用过哪些容器【2】
  2. Array与List的区别
  3. ArrayList与LinkedList,从实现机制,扩容机制等方面
  4. ArrayList如何实现排序
  5. map、list、set的区别

三、线程、锁

1.多线程

  1. 进程与线程的区别,多线程的理解【2】
  2. ThreadLocal关键字(维护变量时,为每个使用该变量的线程提供独立的变量副本,每个线程都可以独立改变自己副本,不影响其他线程)
  3. sleep和wait的区别【3】
  4. 多线程几种状态【3】
  5. java实现线程的方式;哪种好;为什么好;
  6. 创建线程的方式。
  7. 多线程共享变量的问题?
  8. 进程通信的方法
  9. 一般线程和守护线程的区别
  10. 多个线程请求怎么办(ConcurentLinkedQueue 好像不对,假如1000个线程,多整几个队列 假设8个,那么并发量减少到1000/8 ,设成100个队列 并发更少。至于哪个线程分到哪个队列,可以用hash的方法 将线程分散开。)
  11. 不同进程打开了同一个文件,那么这两个进程得到的文件描述符(fd)相同吗?
  12. 12.

2.锁(线程安全)

  1. java如何实现线程安全,synchronized和lock的区别,可重入锁
  2. 死锁形成、死锁怎么检测
  3. Synchronized和lock的区别【2】
  4. 多线程中锁,如何处理呢保证效率。( ConcurrentHashMap , 锁分段技术 Segment ,并与 HashMap、HashTable对照着阐述了一下自己的观点,他也问了几个基本参数 看我是不是真知道。)

3.同步

  1. 同步方法。创建线程。
  2. 进程调度、页面置换、LRU???【2】
  3. 学校oj平台这个项目怎么实现1000人并发?并发的性能瓶颈在哪?(nginx+tomcat集群,性能瓶颈可能出现在网络io和java gc上,然后说了下jvm gc的优化,如何实现session共享。面试官说这样有问题)【2】

并发

  1. 谈一谈对volatile理解,这个问题很常见,答出要点: 可见性、防止指令重排即可。

四、项目相关

1.统问问题

  1. 项目介绍
  2. 项目中使用哪些设计模式
  3. 项目中技术难点
  4. 你的项目是怎么测试和验收的啊?
  5. 如果重新让做,你会怎么做?
  6. 你觉得从中收获最大的三个点?

2.细节问题

  1. 项目过程中做过的一些优化以及碰到的一些挑战性的问题。
    这里结合实际开发中遇到的问题说,eg:
    • 很常见的 Nullpointerexception ,你是怎么排查的,怎么解决的;
    • Out of MemoryError 产生的原因是什么,具体怎么去调优,以及理解那几个参数的含义 -Xms, -Xmx ,-Xmn, -XX:PermSize
    • 线程池的配置 Excutor 以及Connector的配置
  2. 项目用到了几个Tomcat ? 如果多个Tomcat 你该怎么做?( Nginx+Tomcat )
  3. 项目中用到缓存没有,讲一下Redis和自己的理解

  4. 在线打印导出 ,遇到的兼容性问题,怎么解决的?

  5. 数据库事务在项目中的应用
  6. 项目中哪些地方可以用到这块AOP,日志管理、事务管理这块。【2】

  7. 用到哪些中间件

  8. 13.

3.优化问题

  1. 那你做没做过相关的优化呢?这里就有的说了,项目的部署架构,一台机器可以能宕机怎么办?假如是你怎么会优化?我给面试官说了主从数据库,前端的优化呢?CDN/反向代理,代码的优化等等。为什么学Freemarker模版引擎?是做什么用的?这里给面试官讲得很细说了大约20分钟,技术点难点说清楚,把住重点说了。
  2. 你这项目用负载均衡了吗?Nginx结合负载均衡 哪个在前哪个在后,这个是试探吗?【超纲- -】
  3. Hibernate缓存用过吗?并没有用过,压力测试过,讲解了Tomcat优化
  4. 项目交付之前有没有做过测试?黑盒和白盒。有没有做过性能方面的测试,网站上线的话最好做一下并发测试!压力和并发测试
  5. 稳定性和可容载的部分怎么做的?说了下数据库连接池,Hiabernate整合第三方连接池。
  6. 项目中对我的挑战和成长的地方有哪些?
    • 这块我一个人扯了四五分钟,大概说了以下几个方面:
      1)这个SSH框架的理解,具体数据的处理逻辑细节,比如 Ajax ,Struts结合json等等。
      2)数据库事务 、 数据库连接池的理解和优化,第三方连接池性能的比较。
      3)Tomcat 性能调优,主要讲解了 JVM内存优化,具体的怎么修改和具体参数, 如: -Xms -Xmx XX:PermSize -XX:MaxPermSize 等等
      Tomcat 并发调优 ,配置线程池。
      4) Spring 配置过滤器 和 Struts的拦截器配置与使用。
      5) 防止xxs攻击和sql攻击等等 ,保证 整个项目的安全性。
      6) 前端框架有多少了解?楼主搭建过网站,然后就被问到了。你自己喜欢做前端的东西吗?对动态样式和效果感兴趣?
      基于网站又说了一些前端优化,比如 静态化处理,前台和后台的结合。到这里一定要明确自己的位置是后台还是前台!!
      7) 对后台的优化有了解吗?比如负载均衡。我给面试官说了 Ngix+Tomcat负载均衡,异步处理(消息缓冲服务器),缓存(Redis, Memcache),NoSQL,数据库优化,存储索引优化。
      8) 有在本地环境搭建并实现过以上述技术方案吗?楼主没有具体应用到项目中,这一块楼主有点虚啊。然后就把平时搭建过静态博客系统扯了出来,用了Octpress+Ruby+MarkDown+github 等技术,把自己做的东西展现给面试官。

咦咦咦

9.异常

异常知识点整理

10.正则表达式

正则表达式 语法、方法整理

二、Tomcat配置

  1. Tomcat的结构(按server.xml中的层次结构来答)
  2. 一个web服务,如何搭建环境。
  3. 项目用到了几个Tomcat ? 如果多个Tomcat 你该怎么做?( Nginx+Tomcat )
  4. Tomcat提供了哪些服务,Tomcat 调优的的具体参数设置(结合实际的项目的问题来说)【2】
  5. 如果用户通过Nginx登录到后面某一台Tomcat上面,那么后续的请求,你怎么保证被转发到同一个Tomcat 呢?(我说可以用session记录会话信息 ,感觉答非所问!现在想起来他考察我得应该是Nginx负载均衡算法!
    我灵机一动,想到了Hash的思想就说出来了。这里大家可以下去自己看看,有好几个算法可以说。)
  6. 那么怎样允许后续的请求,可以转发到另外的Tomcat 节点上呢?也就是说同一个请求可以不同节点来做呢?(负载均衡如何实现Seesion共享,我想了30秒最后把Redis说出来了,)

三、MySQL数据库

1.问题类

  1. 数据库索引的实现【3】,使用和注意事项
  2. 索引有哪些?分别有什么特点?
  3. Inner join,Left Join,Right join的区别
  4. 列表内容
  5. 聚簇索引和非聚簇索引的区别
  6. 数据库事务的理解【5】,四个特性,隔离级别,MySql在哪个级别,事务并发控制带来的问题:脏读、不可重复读、丢失修改、幻读【3】
  7. 间隙锁、乐观锁、悲观锁????【2】
  8. 数据库优化(索引、存储引擎、sql优化、视图)【4】
  9. 关闭MySQL? 授予权限什么命令? grant all on testdb.* to common_user@’%’ 主备数据库知道吗?没整过啊
  10. A和B两个表做等值连接(Inner join) 怎么优化 (哈希)
  11. 怎么在上亿的query中找出频率最高的k个,Top k问题(解决方案 针对top k类问题,通常比较好的方案是【分治+trie树/hash+小顶堆】,即先将数据集按照hash方法分解成多个小数据集,然后使用trie树或者hash统计每个小数据集中的query词频,之后用小顶堆求出每个数据集中出频率最高的前K个数)
    十道海量数据处理面试题与十个方法大总结

2.连接池

  1. 数据库连接池知道么,用的啥连接池,原理是啥?
  2. 线程池使用了什么设计模式,线程池使用时一般要考虑哪些问题
  3. 数据库连接池监控,监控对你有帮助吗?

3.做题类

  1. 输出用户表里重名的用户
  2. 统计每个学生有多少门课分数大于80(考察聚集函数和group by的用法)
  3. 数据库里有个表,tab_demo( id , data) id是主键 , 对于 where id=’ 1 ’ 和 where data = ’ text ’ ,数据库是怎么去操作的,
    • 我当时灵光一现 这肯定是考数据库索引的知识,我答到:前者数据库默认建立了Unique索引,直接根据索引能找到相应的数据,后边的要全表扫描。
    • 追问: 如果在data 上也建立索引呢,怎么获取数据 然后时间复杂度是多少? (B+树索引??)
  4. 4.

四、数据结构

1.数组

  1. 求两个int数组的并集、交集

2.字符串

3.链表

4.栈

5.队列

6.树

  1. 手写代码,左右子树交换
  2. 给定一个2叉树,打印每一层最右边的结点
  3. 中序遍历的非递归做法?引出BFS和DFS的区别
  4. 4.

7.图

8.哈希

9.堆

五、算法

1.查找

  1. 查找有序数组和为S的数
  2. 两个int整数m,n的二进制表达式有多少位不同
  3. M个数里找出最大的N个
  4. 给定一个数组,里面只有一个数出现了一次,其他都出现了两次。怎么得到这个出现了一次的数?
  5. 在上一题基础上,如果有两个不同数的出现了一次,其他出现了两次,怎么得到这两个数?
  6. 无重复数组找出第K大的数字(引出堆排序(是否稳定,时间/空间复杂度))【2】

2.排序

  1. 八大排序的原理,时间复杂度,空间复杂度,稳定性(可以拓展通排序(基数排序、计数排序)的原理)【2】
  2. 快排,描述思路【2】
  3. 选择排序稳定吗?
  4. 对10G个数进行排序,限制内存为1G(大数问题,但是这10G个数可能是整数,字符串以及中文改如何排序,)
  5. 拓扑排序思想

  6. 假如有个公司有10000名员工,要求按照年龄来排序要求时间复杂度O(N),你会怎么做?大家会怎么答呢

    • 我是这么想的,Hash的思想空间换时间:因为人的年龄是有范围的 ,那我新建一个100的数组,年龄作为下标存入数组,那么从前往后遍历,比如碰到25岁的,Hash[25]++ ; 这样只需要便利一次即可排序了,时间复杂度O(N),空间复杂度O(N)。大家可以在评论区给出更好的方法。
  7. 6.

3.递归

  1. 什么是递归,递归的几个条件?写递归要注意些什么?

4.复杂度

5.高级算法

  1. 手写跳台阶
  2. 一致性Hash原理
  3. 写一个 斐波那契数列

六、设计模式

  1. 写一个单例模式,(饱汉模式、饿汉模式(带锁的双重检查??),private和static使用的原因)【6】
  2. 项目中使用了哪些设计模式【3】
  3. JDK中哪些体现了命令模式
  4. 线程池使用了什么设计模式
  5. servlet是单例么?
  6. 生产者消费者模式

七、网络

1.网络协议

  1. 网络七层协议
  2. TCT与UDP的区别
  3. TCP的三次握手、四次挥手【3】
  4. TCP包的结构
  5. TCP四次挥手的原因
  6. http协议
  7. 5.

2.网络

  1. 网络重定向,说下流程
  2. IPC 进程间的通信 (Socket)
  3. 输入www.baidu.com会发生什么?(除了说HTTP请求,面试官还暗示想让说CDN和负载均衡的知识)
  4. 如何拦截5分钟前恶意登录(用户名密码不正确)超多一定次数的ip

八、JavaEE基础

1.HTML

2.CSS

3.JavaScript

4.JSP

5.Servlet

  1. servlet和filter的区别。
  2. filter你在哪些地方用到过。

6.JavaBean

7.JDBC

Ajax

九、框架

1.Struts2

  1. Struts2和1的区别
  2. 那么问一下 Struts的Action中会调用多个service吗?一个请求到action 会不会调用多个service ?如果调用多个serivce怎么保证事务呢?
  3. 两个Service平级的话事务能保证吗?
  4. 求一个struct的大小

2.MyBatis

  1. 有哪些标签
  2. 查询语句使用MyBatis框架中where标签和不使用框架的sql语句有啥不同
  3. 3.

3.Spring

  1. IOC和AOP具体怎么使用【7】,日志怎么配,代理模式,反射,InvocationHandler????
  2. StrpingMVC工作原理、处理请求的流程【4】
  3. 手写实现IOC【3面的问题了】
  4. spring,quartz,spark,lucene??????
  5. bean生命周期,初始化过程,测试基本方法【2】
  6. annotation如何实现
  7. 源码看过吗

4.Hibernate

  1. Hibernate生成策略,native、uuid
  2. Hibernate缓存用过吗?并没有用过,压力测试过,讲解了Tomcat优化
  3. 说一下它的几个核心接口吧。 Seesion SeesionFactory Configuration…
  4. 说一下Hibernate 和 Mybatis的区别 ,结合Struts 和SpringMVC 说了一下

5.maven

  1. maven冲突如何解决

6.Git

7.Redis

  1. Redis如何解决key冲突(redis都是保存的key.value的键值对。用的是hash对象,用拉链法解决hash过后的冲突。)
  2. redis的理解
  3. redis与mongodb的区别

8.Ajax

9.socket

  1. socket实现过程,具体用的方法;怎么实现异步socket.

10.Linux

  1. 随便说20个命令,查看文件(cat head tail more less )
  2. 操作系统如何实现输出
  3. linux查询java进程
  4. linux查看内存占用情况
  5. Linux下 给定一个文件,里面存放的是IP地址,统计各个IP地址出现的次数
  6. linux如何查找文件

你可能感兴趣的:(2018面试)