Java基础
1.JDK JRE
2. Java异常了解吗?说说平时遇到的异常?说出6种常见的java异常。写程序遇到过哪些异常 运行时异常有哪些
3. 面向对象 面对对象的几大特性 多态怎么理解
4. 修饰符:public;protect;default;private优先级
5. 对string类的理解。stringbuffer 和 stringbuilder
6. 反射机制介绍一下
7. bio,nio,aio分别介绍一下,nio的实现方式
8. 问了public等变量定义修饰词的时间域
9. 问了反射机制,还有问了动态代理的好处和坏处,好处答不上来
10. 接口和抽象类的区别。
11. 有一个public static final的HashMap,里边对象的属性能不能修改?
12. 为什么java 平台无关性 机器码和字节码区别 JVM加载代码的一个流程
13. java数据类型以及自己的应用 自动拆箱和自动装箱以及自己的应用即什么时候用到的,列举几种情况
14. 什么是值传递和引用传递,区别及应用
15. 重载和重写
16. static方法是否能重写,接口和抽象类的区别
17. 你觉得java是一种什么样的语言以及java特性
18. lamda表达式了解吗?1.8新特性有什么?(面试宝典对接口抽象这个问题是错的,过时了)
19. 内存泄露怎么造成的,怎么排查
20. 讲讲final修饰符。
21. 一个对象占多少内存。
22. 最短路径问题
23. java浅拷贝和深拷贝
24. 内存泄露的原因和处理
25. java反射机制,优点缺点
26. 说说静态变量和非静态变量的区别,用类名调用静态变量和用实例对象调用静态变量有区别吗?非静态方法里可以有静态变量吗?
27. static能不能被重写?
重写方法的目的是为了多态,或者说:重写是实现多态的前提,即重写是发生在继承中且是针对非static方法的。
语法上子类允许出现和父类只有方法体不一样其他都一模一样的static方法,但是在父类引用指向子类对象时,通过父类引用调用的依然是父类的static方法,而不是子类的static方法。
即:语法上static支持重写,但是运行效果上达不到多态目的
28. 序列化,反序列化,什么时候用? 如何对一个对象序列化
Java集合类
- Hashmap底层(数组+链表+红黑树)hashmap为什么线程不安全,如何保证线程安全,就扯到concurrenthashmap hashmap底层实现 多线程会出现什么情况 扩容机制是什么为什么会死锁 如何解决碰撞 Jdk 1.8的优化。为什么使用红黑树,它是如何做到效率优化的? hashmap了解不,原理是什么,位图了解不,跳跃表了解不,红黑树了解不,红黑树插入过程,B+树了解不,B+树特点和插入过程,邻接表和邻接矩阵区别,分别在什么地方用到,
插入和查询的流程。 - concurrenthashmap1.7和1.8的区别;concurrenthashmap说说,它是如何保证线程安全的?jdk1.7的hashentry和segment锁。具体说说segment锁?能讲下ConcurrentHashMap的实现原理么 JDK7或者8都行
- 常用集合类 实现类
- list和set区别(重复/不重复)
- set,list,map(线程安全的map,map怎么实现之类的)
- 红黑树介绍一下,跟平衡二叉树比较一下,红黑树有哪些应用场景
- 你常用的数据结构有哪些?
- 红黑树的特点,AVL树
- 一致性哈希函数以及hashmap的put方法
- 数组、二叉搜索树、B树、B+树
- 堆和栈。堆、栈
- 二叉树的最大节点个数;2^n-1;
Java并发
- java创建线程的方式,runnable和callable区别(参数不同)1. java线程的状态有哪些;线程的几种状态
- wait和sleep的区别;wait和notify的使用场景;
- 介绍一下volatile以及原理;volatile介绍一下Volatile底层是如何实现的? 说了内存可见性和内存屏障,Volatile是绝对线2程安全的吗?不是,没有保证原子性。volatile关键字在线程通信的问题
- 介绍一下synchornized以及原理; lock和synchornized的区别;synchronized锁的升级过程?Synchronized,底层是如何实现的?说了monitor对象头,以及两个monitorenter和monitorexit运用于代码块。
对象头是存储了哪些信息?说说synchronized的锁优化过程?说了偏向,自旋,轻量和重量。 - 介绍一下AQS;
- 说一下公平锁和非公平锁的原理;
- cas操作是什么,以及可能出现的问题;
- 线程池,然后你再平时怎么用的,工作原理,有哪些重要参数,饱和策略有哪些;线程池了解吧,说说如何实现线程池?核心参数哪些?有哪些阻塞队列呢?如何优雅的关闭线程池 线程池(线程大小,阻塞队列)线程创建,线程池参数,说说你常用的线程池?说了new ***d 和newFixed。以及介绍各个参数
- 说说你理解的悲观锁和乐观锁?乐观锁有哪些?乐观锁有什么缺点?
- 阻塞队列 线程间通信方式 创建线程方式 创建线程池方式 线程池常用参数
- 锁有哪些
- 说说你常用的并发包JUI?
- 问了如何保证多线程通信
- 你用过Java的J.U.C并发包吧,给我讲一下AQS的原理
- CAS的原理给我讲一下,他是怎么保证内存的可见性的。CAS会产生什么问题
- 知道Java中的内存模型吧,它有8个指令你给我说一下
- 多线程如何保持同步?
- java可见性的关键字及其原理。
- cpu密集型多线程和io密集型多线程的比较。cpu密集型里如何管理多线程? 用什么样的线程池和阻塞队列?
- cpu线程特别多会产生什么问题?io密集型里怎么减少需要的线程数?
- io多路复用的原理和实现。怎么减少处理io(和磁盘io交互)所需要的线程?
- 线程实现方式。有什么区别。线程之间的通讯,进程之间的通讯。
JVM
- JVM运行时内存区域划分?哪些线程私有?运行时数据区,私有共享都是哪些?堆区内存如何分配?
- 对象的生命周期?
- JVM垃圾回收器,cms和g1的特点,两者的区别是什么,比g1更加先进的垃圾回收器有了解么,ZGC原理,能够管理多大的内存,CMS能管理多大的内存,G1呢
- JVM内存模型 类的生命周期 类加载过程 双亲委派机制了解吗 进入老年代过程 什么情况下直接进入老年代
- JVM内存分布(堆栈等,程序计数器+jvm栈+本地方法栈线程不共享,堆和方法区线程共享)
- 类加载机制,过程,类加载机制?如何自定义实现类加载器?双亲委派模型、类加载器类别,双亲委派模型本质是解决了什么问题?安全性,有哪几种类加载器?类加载的流程。知道哪些类加载器。类加载器之间的关系?双亲委派模型。为什么使用双亲委派模型?
- 垃圾回收算法,常见的垃圾回收器及他们之间区别,垃圾回收发生在哪里,怎么判断对象存活、GC Roots具体有哪些、讲讲对象分配与回收,什么可以作为垃圾回收的对象,垃圾回收算法和流程。
- 栈什么情况下会溢出?
- 静态变量存放在内存哪个区域?
- 怎么查看java虚拟机内存占用?
- 如何减少full gc的次数?方法区是否需要gc
- 4个引用类型
计算机网络
- 输入一个url后的过程;浏览器从发送请求的全部过程
- OSI七层和TCP四层协议,OSI七层模型/五层模型,每一层有哪些协议,http,tcp,ip位于哪一层
- TCP三次握手四次分手,tcp四次挥手为什么要四次,为什么TCP是安全的,TCP,UDP的区别
- TCP报文结构,HTTP结构, TCP,UDP,HTTP的报文格式(我懵了)
- 设计一个应用层协议(没有答出来
- HTTP协议连接过程,HTTPS连接过程,HTTP的长连接是怎么做的HTTP2和HTTP1区别,HTTP请求过程
http的几种方法,HTTP跟HTTPS的区别,https加密过程
操作系统
- 程序,进程和线程的区别
- 什么时候情况下要用多线程?
- 进程之间怎么通信的?
- 一个手机应用程序里面的进程和线程分别是怎么进行的?
- 死锁,怎么解死锁,死锁条件,怎么预防
- 进程的状态:阻塞+就绪+执行
- 手机内存8g,是32位的,一个进程能申请多少内存?
- 线程的应用,举例,线程的阻塞
- 主线程和子线程的区别
Linux :
- linux中如何查看CPU负载 top
- linux用过嘛(扯到了我训练过深度模型,小哥哥直接来了个场景题)
场景题:推荐算法中如何控制广告推送频率(结合强化学习说了一些 - Linux了解不,df dh区别,如何格式化磁盘,磁盘挂载过程,tcp丢包如何排查,docker是用什么实现的
- 怎么查找特定后缀名或前缀名的文件
Mysql
- 数据库引擎事务隔离级别,串行化如何实现,数据库的隔离级别?四个。你平常使用的是哪个隔离级别。数据库隔离级别以及分别解决了什么问题
- MySQL的存储引擎有哪些?它们之间的区别?你用的mysql存储引擎?为什么选择它?实现原理?
- 怎么判断一个SQL语句有没有走索引?紧接着问explain知道哪些字段吗
- mysql存储模型 区别 怎么看用没用索引 怎么判断sql语句好坏
- 数据库中索引B+树
- 一个手机应用要更改数据库,它的底层是怎么实现的?
- sql查询过程
- MySQL InnoDB存储引擎中的MVCC解决了什么问题,能说下MVCC的实现原理么
- SQL语句经常写吧,那我给你出一道SQL题(分组求和排序)
- 你认为什么情况下不应该建立索引
- mysql有几种锁?怎么实现?
- innodb事物的级别
- b 树的结构?与二叉树的区别?与b树的区别?
- 写过最复杂的sql, 手写代码: 统计各个科目考试最高分:最复杂的包括了sum、case、left join、group by,追问左连接和内联区别,没答上来
- 聚簇索引跟红黑树
- sql :给一个日期范围,统计每天入库的数据总量
- sql语句里like和in关键字
- sql语句,求平均分超过60分的学生学号
- 数据库sql怎么优化
- 什么情况不能用索引?
- SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2 什么时候会发生死锁;怎么解决死锁;N个资源怎么办?
redis
- 你知道redis的什么东西
- redis中zset,说了一下跳跃表的插入,删除过程;
- 位图知道原理嘛(操作系统中的位示图还是bitmap?不太了解)
- redis数据类型,redis的应用场景,为什么redis快
- Redis的key的写入和删除的原理
- 怎么保证Redis的高可用
- redis数据结构?单线程还是多线程?
- 用什么样的队列?你是怎么实现?我回答的redis的list实现的)这种队列有什么缺点?
- 分布式锁;
mq
- 你还用过rabbitMQ呀,它能够做什么?
- rabbitMQ是怎么保证消息不丢的,从客户端—消息队列, 消息队列—服务器端的角度考虑
spring
- 开源框架有哪些了解的 为什么用spring 为什么不用new就可以自动生产 能不能自己实现一个
- spring security是干嘛的,原理是啥,jwt干啥的
- 后台用什么框架?ioc,aop,其他还有什么框架也可以做到ioc,aop(2333~不就spring?)
- Spring IOC,AOP,注解
设计模式
- 双重检索单例
- 设计模式分为哪三类,各有什么?设计模式,用过哪些设计模式,讲几个,设计模式和原则
- 代理模式属于哪一类
- 生产者消费者模式,生产消费者的,以及多生产者同步
- 描述适配器,写单例
- 单例模式,装饰模式,
分布式
- 负载均衡的算法有哪些;
- rpc dubbo的组件有哪些
- 分布式事务,CAP定理,有没有使用过相关的产品
- zookeeper了解吗
- hbase索引的结构,kafka存储的结构,二进制文件的组织方式,kafka如何避免消息丢失,zookeeper在kafka中是干啥的,kafka在zookeeper中存储的数据,zookeeper了解不,zookeeper的共识算法,分区后如何解决。
- protobuf了解不,grpc了解不,用的什么协议,HTTP2和HTTP1区别,websocket建立连接过程
- RPC你了解过吗?
- 如何分布式存储?
算法
- 排序算法有哪些,简述冒泡和归并排序,冒泡算法的优化,讲讲归并排序,冒泡的优化知道吗;回答相等不交换,还有flag做已排序标志的优化;直接插入排序,写一下伪代码或者说一下思路,插入排序,时间复杂度
- 堆排序原理
- 快排,快排是什么思想,快排的优化是啥,为啥这么做;
- 字母排序
- 100个数中找出想要的数
- 一个数组分成2个相等或接近的子数组
- 派单的最短路径问题
- 很大的数据,内存放不下,如何快速找到中间值
- 手撕栈
- 链表找环 链表找环入口,不用双指针怎么做
- 双向链表实现 ,写了个add()和add(index)的
- 求数组的全排列
- 中序遍历,递归非递归
- 求四个数绝对值的最小值
- 黑猫白猫,混在一起,如何把他们区分开? 黑白灰三种猫混在一起,如何按照黑白灰排好序? 还有两个小问题忘记了。
- 如何用一个int值,表示三种状态?
其他
- 给你10个tomcat你如何判断自己用哪个(容器?emmmm,求指点)
位图知道原理嘛(操作系统中的位示图还是bitmap?不太了解)
所谓的Bit-map就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素。由于采用了Bit为单位来存储数据,因此可以大大节省存储空间。
其实就是位示图为原型,01存储的,建议面试的时候知道多少说多少,知道什么说什么~ - 序列化相关
- 最后还是问项目,项目中的难点,是如何解决的?
- c++编程搞过没,GPU编程了解不,用的什么GPU,GPU运算性能是什么决定的
- 如果某个用户同时请求创建活动接口100次,如果防止它被重复创建?创建前查看该记录是否存在、使用锁、如果是分布式的使用分布式锁—这样解决了99.99%的问题。除了使用这些方案,还能使用什么方法解决吗?
- 讲讲分布式锁的实现
- io量很大,队列很长怎么办?
- Q:觉得用过的模板解析引擎有什么不同的特征。
A:用过JSP和Thymeleaf,JSP我就说适合Java程序员做前端,本质还是Servlet,生产环境下调试方便;Thymeleaf是SpringBoot项目碰到的,本质是EL,语法特殊,但是前后端传值、传对象方便。 - 讲一下对jQUERY的使用感受
A:研一的项目做过iOS开发,用OC做的webview APP,用到了jQuery Mobile做界面和事件控制,感觉很方便。 后面的Web项目主要用来进行Ajax操作,选择器很方便。 - 硕士一个项目涉及到跨系统集成,要我在纸上画出集成逻辑架构,介绍一下开发用到的技术和业务环境。
集成用的WebService,引入Apache旗下的Axis, 涉及到文件传输和多数据源配置。。。。 - 用过eclipse、IDEA、Myeclipse,评价一下区别 代码提示、插件库、收费与免费、代码模板、资源消耗
- 用过EJB和SSH,评价一下区别
- 问了实习经历 了解分布式吗?
- 你怎么用的websocket?
- 想做安卓还是java后台?手机端安卓怎么开发的?
- activity四大组件
- 介绍一下service
- APP的启动流程
- Android事件分发机制
- view的测量方法;
- Android之间线程通信
- 介绍一个你用心做的模块,项目流程,怎么理解异步同步,什么场景用;
static能不能被重写? - MD5为啥要加盐(彩虹表·);UUID有多少位(32位)
关于面试面试我还通过一些渠道发现了需要大厂真实面试主要有:蚂蚁金服、拼多多、阿里云、百度、唯品会、携程、丰巢科技、乐信、软通动力、OPPO、银盛支付、中国平安等初,中级,高级Java面试题集合,附带超详细答案,希望能帮助到大家。