https://www.nowcoder.com/discuss/12805
华为面试感觉有点坑啊http://www.nowcoder.com/discuss/7768?type=0&order=3&pos=4448&page=2
一、Java基础
1.JVM虚拟机(内存模型、垃圾收集、gc)
- gc算法(JVM内存模型、分区,组成部分特点,GC算法,minor gc和full gc,再说说垃圾回收器,Serial、ParNew、CMS等,类加载等问题)【10】
- 新生老生代gc算法实现
- 垃圾回收机制(垃圾判断算法、垃圾回收算法、垃圾回收器)
- JVM内存模型【3】
【1-4答案】Java内存结构、虚拟机垃圾回收和gc算法 - 谈一谈finalize的理解
- Java 8 的新特性,我讲了一下非阻塞的同步方式CAS,????
- juc包内有哪些类,CAS如何实现,说一下对线程池的理解
- 事务的隔离级别和传播行为 ,另外跟他说一下ACID.????
2.Java的基础过程
- java的优势,Java有哪些特性(封装、继承、多态之类的)【2】
-
- 封装、多态【2】
- new 实例化过程
- 反射的所有包,怎实现反射
- java修饰符(public、private、default、protected)
- 静态类与单例模式的区别
- 面向对象的设计规范
- 接口和抽象类的区别
- 继承的好处和坏处
-
- super()和this能不能同时使用
3.数组、字符、字符串
- String,StringBuffer,StringBuilder区别,String为什么不可变【3】
- 2.
4.链表
- 链表删去指定值的节点
- 2.
5.栈、队列
- 手写两个栈实现队列,优化【3】
6.树、图
- 树的中序遍历,除了递归和栈还有什么实现方式(Morris遍历)
- 说一下对B+树的了解
- 堆与普通二叉树有什么区别。
7.IO
- IO哪个类可以byte转String
- 说一下IO模型
- 说一说对java io的理解
- 操作系统IO的几种类型和原理
二、集合
HashMap相关
- Hashmap底层实现,原理,手撕【8】(处理冲突方法【3】?各个方法优缺点,为什么不用另一个有点的方法????)
- HashSet和HashMap的区别
- HashMap和HashTable的区别
- 谈一谈TreeMap
- ConcurrentHashMap以及HashMap在什么情况下性能会不好【2】
- HashMap如果有很多相同key,后面的链很长的话,你会怎么优化?或者你会用什么数据结构来存储?我说了一个SkipList
- 针对HashMap中某个Entry链太长,查找的时间复杂度可能达到O(n),怎么优化?(当时说了可能是容量或者hash算法的原因,说了扩容,寻找好的hash算法替代,然后面试官说不是这两个原因造成的,当时LZ也不知道JDK8中是采用红黑树进行处理的,就想不是为了降低查找时间复杂度吗,就说了用有序数组存储链表的数据,也就想到用有序数组查找的时间复杂度为O(nlogn )来解决,也是病急乱投医吧,最后面试官说也算是一种方法吧。)
List相关
- 常用集合类,用过哪些容器【2】
- Array与List的区别
- ArrayList与LinkedList,从实现机制,扩容机制等方面
- ArrayList如何实现排序
- map、list、set的区别
三、线程、锁
1.多线程
- 进程与线程的区别,多线程的理解【2】
- ThreadLocal关键字(维护变量时,为每个使用该变量的线程提供独立的变量副本,每个线程都可以独立改变自己副本,不影响其他线程)
- sleep和wait的区别【3】
- 多线程几种状态【3】
- java实现线程的方式;哪种好;为什么好;
- 创建线程的方式。
- 多线程共享变量的问题?
- 进程通信的方法
- 一般线程和守护线程的区别
- 多个线程请求怎么办(ConcurentLinkedQueue 好像不对,假如1000个线程,多整几个队列 假设8个,那么并发量减少到1000/8 ,设成100个队列 并发更少。至于哪个线程分到哪个队列,可以用hash的方法 将线程分散开。)
- 不同进程打开了同一个文件,那么这两个进程得到的文件描述符(fd)相同吗?
- 12.
2.锁(线程安全)
- java如何实现线程安全,synchronized和lock的区别,可重入锁
- 死锁形成、死锁怎么检测
- Synchronized和lock的区别【2】
- 多线程中锁,如何处理呢保证效率。( ConcurrentHashMap , 锁分段技术 Segment ,并与 HashMap、HashTable对照着阐述了一下自己的观点,他也问了几个基本参数 看我是不是真知道。)
3.同步
- 同步方法。创建线程。
- 进程调度、页面置换、LRU???【2】
- 学校oj平台这个项目怎么实现1000人并发?并发的性能瓶颈在哪?(nginx+tomcat集群,性能瓶颈可能出现在网络io和java gc上,然后说了下jvm gc的优化,如何实现session共享。面试官说这样有问题)【2】
并发
- 谈一谈对volatile理解,这个问题很常见,答出要点: 可见性、防止指令重排即可。
四、项目相关
1.统问问题
- 项目介绍
- 项目中使用哪些设计模式
- 项目中技术难点
- 你的项目是怎么测试和验收的啊?
- 如果重新让做,你会怎么做?
- 你觉得从中收获最大的三个点?
2.细节问题
- 项目过程中做过的一些优化以及碰到的一些挑战性的问题。
这里结合实际开发中遇到的问题说,eg:
- 很常见的 Nullpointerexception ,你是怎么排查的,怎么解决的;
- Out of MemoryError 产生的原因是什么,具体怎么去调优,以及理解那几个参数的含义 -Xms, -Xmx ,-Xmn, -XX:PermSize
- 线程池的配置 Excutor 以及Connector的配置
- 项目用到了几个Tomcat ? 如果多个Tomcat 你该怎么做?( Nginx+Tomcat )
项目中用到缓存没有,讲一下Redis和自己的理解
在线打印导出 ,遇到的兼容性问题,怎么解决的?
- 数据库事务在项目中的应用
项目中哪些地方可以用到这块AOP,日志管理、事务管理这块。【2】
用到哪些中间件
- 13.
3.优化问题
- 那你做没做过相关的优化呢?这里就有的说了,项目的部署架构,一台机器可以能宕机怎么办?假如是你怎么会优化?我给面试官说了主从数据库,前端的优化呢?CDN/反向代理,代码的优化等等。为什么学Freemarker模版引擎?是做什么用的?这里给面试官讲得很细说了大约20分钟,技术点难点说清楚,把住重点说了。
- 你这项目用负载均衡了吗?Nginx结合负载均衡 哪个在前哪个在后,这个是试探吗?【超纲- -】
- Hibernate缓存用过吗?并没有用过,压力测试过,讲解了Tomcat优化
- 项目交付之前有没有做过测试?黑盒和白盒。有没有做过性能方面的测试,网站上线的话最好做一下并发测试!压力和并发测试
- 稳定性和可容载的部分怎么做的?说了下数据库连接池,Hiabernate整合第三方连接池。
- 项目中对我的挑战和成长的地方有哪些?
- 这块我一个人扯了四五分钟,大概说了以下几个方面:
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配置
- Tomcat的结构(按server.xml中的层次结构来答)
- 一个web服务,如何搭建环境。
- 项目用到了几个Tomcat ? 如果多个Tomcat 你该怎么做?( Nginx+Tomcat )
- Tomcat提供了哪些服务,Tomcat 调优的的具体参数设置(结合实际的项目的问题来说)【2】
- 如果用户通过Nginx登录到后面某一台Tomcat上面,那么后续的请求,你怎么保证被转发到同一个Tomcat 呢?(我说可以用session记录会话信息 ,感觉答非所问!现在想起来他考察我得应该是Nginx负载均衡算法!
我灵机一动,想到了Hash的思想就说出来了。这里大家可以下去自己看看,有好几个算法可以说。) - 那么怎样允许后续的请求,可以转发到另外的Tomcat 节点上呢?也就是说同一个请求可以不同节点来做呢?(负载均衡如何实现Seesion共享,我想了30秒最后把Redis说出来了,)
三、MySQL数据库
1.问题类
- 数据库索引的实现【3】,使用和注意事项
- 索引有哪些?分别有什么特点?
- Inner join,Left Join,Right join的区别
- 列表内容
- 聚簇索引和非聚簇索引的区别
- 数据库事务的理解【5】,四个特性,隔离级别,MySql在哪个级别,事务并发控制带来的问题:脏读、不可重复读、丢失修改、幻读【3】
- 间隙锁、乐观锁、悲观锁????【2】
- 数据库优化(索引、存储引擎、sql优化、视图)【4】
- 关闭MySQL? 授予权限什么命令? grant all on testdb.* to common_user@’%’ 主备数据库知道吗?没整过啊
- A和B两个表做等值连接(Inner join) 怎么优化 (哈希)
- 怎么在上亿的query中找出频率最高的k个,Top k问题(解决方案 针对top k类问题,通常比较好的方案是【分治+trie树/hash+小顶堆】,即先将数据集按照hash方法分解成多个小数据集,然后使用trie树或者hash统计每个小数据集中的query词频,之后用小顶堆求出每个数据集中出频率最高的前K个数)
十道海量数据处理面试题与十个方法大总结 - 的
2.连接池
- 数据库连接池知道么,用的啥连接池,原理是啥?
- 线程池使用了什么设计模式,线程池使用时一般要考虑哪些问题
- 数据库连接池监控,监控对你有帮助吗?
3.做题类
- 输出用户表里重名的用户
- 统计每个学生有多少门课分数大于80(考察聚集函数和group by的用法)
- 数据库里有个表,tab_demo( id , data) id是主键 , 对于 where id=’ 1 ’ 和 where data = ’ text ’ ,数据库是怎么去操作的,
- 我当时灵光一现 这肯定是考数据库索引的知识,我答到:前者数据库默认建立了Unique索引,直接根据索引能找到相应的数据,后边的要全表扫描。
- 追问: 如果在data 上也建立索引呢,怎么获取数据 然后时间复杂度是多少? (B+树索引??)
- 4.
四、数据结构
1.数组
- 求两个int数组的并集、交集
2.字符串
3.链表
4.栈
5.队列
6.树
- 手写代码,左右子树交换
- 给定一个2叉树,打印每一层最右边的结点
- 中序遍历的非递归做法?引出BFS和DFS的区别
- 4.
7.图
8.哈希
9.堆
五、算法
1.查找
- 查找有序数组和为S的数
- 两个int整数m,n的二进制表达式有多少位不同
- M个数里找出最大的N个
- 给定一个数组,里面只有一个数出现了一次,其他都出现了两次。怎么得到这个出现了一次的数?
- 在上一题基础上,如果有两个不同数的出现了一次,其他出现了两次,怎么得到这两个数?
- 无重复数组找出第K大的数字(引出堆排序(是否稳定,时间/空间复杂度))【2】
2.排序
- 八大排序的原理,时间复杂度,空间复杂度,稳定性(可以拓展通排序(基数排序、计数排序)的原理)【2】
- 快排,描述思路【2】
- 选择排序稳定吗?
- 对10G个数进行排序,限制内存为1G(大数问题,但是这10G个数可能是整数,字符串以及中文改如何排序,)
拓扑排序思想
假如有个公司有10000名员工,要求按照年龄来排序要求时间复杂度O(N),你会怎么做?大家会怎么答呢
- 我是这么想的,Hash的思想空间换时间:因为人的年龄是有范围的 ,那我新建一个100的数组,年龄作为下标存入数组,那么从前往后遍历,比如碰到25岁的,Hash[25]++ ; 这样只需要便利一次即可排序了,时间复杂度O(N),空间复杂度O(N)。大家可以在评论区给出更好的方法。
- 6.
3.递归
- 什么是递归,递归的几个条件?写递归要注意些什么?
4.复杂度
5.高级算法
- 手写跳台阶
- 一致性Hash原理
- 写一个 斐波那契数列
六、设计模式
- 写一个单例模式,(饱汉模式、饿汉模式(带锁的双重检查??),private和static使用的原因)【6】
- 项目中使用了哪些设计模式【3】
- JDK中哪些体现了命令模式
- 线程池使用了什么设计模式
- servlet是单例么?
- 生产者消费者模式
七、网络
1.网络协议
- 网络七层协议
- TCT与UDP的区别
- TCP的三次握手、四次挥手【3】
- TCP包的结构
- TCP四次挥手的原因
- http协议
- 5.
2.网络
- 网络重定向,说下流程
- IPC 进程间的通信 (Socket)
- 输入www.baidu.com会发生什么?(除了说HTTP请求,面试官还暗示想让说CDN和负载均衡的知识)
- 如何拦截5分钟前恶意登录(用户名密码不正确)超多一定次数的ip
八、JavaEE基础
1.HTML
2.CSS
3.JavaScript
4.JSP
5.Servlet
- servlet和filter的区别。
- filter你在哪些地方用到过。
6.JavaBean
7.JDBC
Ajax
九、框架
1.Struts2
- Struts2和1的区别
- 那么问一下 Struts的Action中会调用多个service吗?一个请求到action 会不会调用多个service ?如果调用多个serivce怎么保证事务呢?
- 两个Service平级的话事务能保证吗?
- 求一个struct的大小
2.MyBatis
- 有哪些标签
- 查询语句使用MyBatis框架中where标签和不使用框架的sql语句有啥不同
- 3.
3.Spring
- IOC和AOP具体怎么使用【7】,日志怎么配,代理模式,反射,InvocationHandler????
- StrpingMVC工作原理、处理请求的流程【4】
- 手写实现IOC【3面的问题了】
- spring,quartz,spark,lucene??????
- bean生命周期,初始化过程,测试基本方法【2】
- annotation如何实现
- 源码看过吗
4.Hibernate
- Hibernate生成策略,native、uuid
- Hibernate缓存用过吗?并没有用过,压力测试过,讲解了Tomcat优化
- 说一下它的几个核心接口吧。 Seesion SeesionFactory Configuration…
- 说一下Hibernate 和 Mybatis的区别 ,结合Struts 和SpringMVC 说了一下
5.maven
- maven冲突如何解决
6.Git
7.Redis
- Redis如何解决key冲突(redis都是保存的key.value的键值对。用的是hash对象,用拉链法解决hash过后的冲突。)
- redis的理解
- redis与mongodb的区别
8.Ajax
9.socket
- socket实现过程,具体用的方法;怎么实现异步socket.
10.Linux
- 随便说20个命令,查看文件(cat head tail more less )
- 操作系统如何实现输出
- linux查询java进程
- linux查看内存占用情况
- Linux下 给定一个文件,里面存放的是IP地址,统计各个IP地址出现的次数
- linux如何查找文件