Java面试题(一)

Java面试题总结:基础及语法169道

收集整理:秦疆 联系方式QQ:24736743 微信:qinlvejiang

答案来源收集与互联网,部分内容经供参考,代码全部为手写验证通过.

1~20

1.Java跨平台原理(字节码文件、虚拟机)

C/C++语言都直接编译成针对特定平台机器码。如果要跨平台,需要使用相应的编译器重新编译。

Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过

Java虚拟机来执行的。

字节码文件不面向任何具体平台,只面向虚拟机。

Java虚拟机是可运行Java字节码文件的虚拟计算机。不同平台的虚拟机是不同的,但它们都提供了相同的接口。

Java语言具有一次编译,到处运行的特点。就是说编译后的.class可以跨平台运行,前提是该平台具有相应的Java虚

拟机。但是性能比C/C++要低。

Java的跨平台原理决定了其性能没有C/C++高

2020JAVA社招面试问题总结(一年工作经验)

https://blog.csdn.net/qq_37909141/article/details/108180837?utm_medium=distribute.pc_category.none-task-blog-hot-8.nonecase&depth_1-utm_source=distribute.pc_category.none-task-blog-hot-8.nonecase&request_id=

字节跳动实习面试了两个面试官
第一个面试官
\1. 怎么自学的,看书,看视频,研究框架?瞎逼逼了一通,想装个逼,结果看起来很蠢
\2. 计算机网络为什么要分那么多层
\3. 内核态和用户态
\4. 进程线程的区别
\5. tcp为什么要三次握手,四次挥手
\6. 了解零拷贝吗
\7. hashmap底层原理
\8. 红黑树的特点(好煞笔啊,这会儿才想起来那五个特点,当时瞎说什么平衡二叉树,谁不知道这是个平衡二叉树)
\9. 操作系统中,从网络接口到用户空间的数据流向问题
\10. mysql聚簇索引和非聚簇索引的区别
\11. 用过哪些数据库
\12. 面了哪些公司
\13. 数据库三大范式
\14. java对象创建到回收的过程
\15. 手撕代码:1. sql 2. 给一个二维字符数组和一个字符串,看看这个字符串在不在二维数组里
第二个面试官
\1. 了解哪些开源项目,傻逼兮兮说了netty,都是坑
\2. 一般netty用来干嘛的
\3. 半包粘包怎么解决的
\4. 看过哪些编解码器呢
\5. 看过哪些channel
\6. spring有哪些even呢
\7. rocketmq事务消息什么意思
\8. half消息一开始不可见嘛,怎么实现的不可见(我以为会问异常回调,这一下子给我整蒙了)
\9. sentinel熔断器简单说一下
\10. 用linux实现统计一个文件里的ip频率出现最高的10个
\11. 手撕代码,两个队列实现一个栈
总结和体会:1. 操作系统太弱了;2. 经常答非所问,复盘的时候才明白面试官的意图,表达能力需要提高;3. 准备的问题基本没被问到,感觉字节跳动很重视基本功和整体的理解。。达到面试官的要求不知道还要多久。。。

作者:我要进国企!
链接:https://www.nowcoder.com/discuss/511499
来源:牛客网

我是从2月份开始准备,一开始就看完了java基础,虽然基本看完没啥印象了。计网和数据结构的话都是本科学的了,没啥印象了sad,然后就开始看面经了,这时候高频的面经还都是去年总结的,所以我看的面经还挺有大局观的hhh,就老是看到牛友说要先打好基础,然后再狂刷面经,当时的我错误的估计了我菜的程度,居然准备开始先修炼内功,把书先看扎实了。。。再回头来刷面经,于是我开始了悠闲的看书之旅。。。真是恐怖的想法hhh,看了一段时间计网、操作系统、数据库后,时间来到3月份了,牛客网找实习的帖子多了起来,这时候一个更恐怖的想法就出现了。。。我要去找实习,那会刷了一丢丢剑指,我就开始投简历了,真是佩服那会的一腔孤勇,像个傻子一样。其实现在想想春招找实习是很幸福的,基本都不用笔试就能面试真的很友好,春招的面经我就列一下,秋招的我就不一家一家列了,汇总了一下~依稀记得第一家给面试机会的是七牛云,一开始我以为不是大厂应该难度还好吧。。还好吧。。。后来我被毒打以后才发现我是弟中弟,这应该是最惨的一次面试了。。我大概回答了15个不会。。你懂我的意思吧。吧。。。

好了上面经,七牛云

  1. 常见的密码加密算法
  2. Redis做缓存的原因
  3. B+树、B树、红黑树二叉树做索引区别
  4. B+树和hash索引
  5. Mysql主从复制
  6. Mysql读写分离
  7. 怎么利用索引来进行查询
  8. 进程 线程 绿色线程
  9. 怎么优化IO性能
  10. 运行程序为什么可以超出内存容量
  11. 容器和虚拟机有什么区别
  12. OSI七层模型
  13. NAT
  14. ++是线程安全的吗
  15. java是动态还是静态的
  16. 为什么要编译成字节码
  17. 设计模式

嗯。。。确实是给当时年幼的我好好上了一课。。。我差点就准备躺平去研究所了。。。。又低效率学了一个月,4月份出击~

Aibee

  1. leetcode 34
  2. Top K

问了几个问题后,小哥哥开始让我直接写代码了,年幼的我第一次手撕代码。。。卒

快手

  1. 手写单例模式
  2. 判断链表是否有环
  3. 找出链表的入口节点
  4. 两个字符串的最长公共子序列
  5. 反转链表(递归非递归)

面试老哥人不错的,发现我稀烂的基础后话不多说,写题写题,有了第一次的经验,这次的我居然写出来了4个。。。可能基础太拉闸,还是没能突破第一轮

于是感觉看书太慢了,开始看面经速成,准备应付一波,通过个第一轮,这时候已经差不多5月份了吧,心态也出现了一些微妙的变化,之前觉得自己很菜,过不了也很正常,挺无所谓的,但这会本科舍友上岸了,压力就来了hhh人果然还是要被push

问境

  1. 数据库事务有哪些特性

  2. Mysql事务的是实现原理

  3. Mysql索引

  4. Mysql隔离级别

  5. 进程和线程

  6. TCP/IP协议四层模型

  7. 三次握手、四次挥手

  8. TCP和UDP区别

  9. 流量控制、拥塞控制

  10. aop含义

  11. aop的实现原理

  12. 快排的思路

  13. 无向图的复制

这次因为已经5月份了,我普通题其实已经背了一些了,应付小公司问题不是很大,1-12基本答得还可以,感觉就稳了。。。结果这次手撕不会,图永远的神。。。话不多说继续复习

一晃5月底了,剑指刷完了,开始leetcode。。基础继续复习,然后学校就准备开学了,封闭管理,思考了一下,决定还是去学校吧,到了学校迎来了第一战58同城,我投的这些其实都是我不想去的,因为我真的很怕面试留记录hhh,所以这些公司看上去挺偏的,南京上海的我一个没投。。。准备再酝酿酝酿。。

58同城

  1. 数据库读写分离原理
  2. 事务中原子性的实现
  3. Redis的了解
  4. 线程池中的参数
  5. 线程池初始化后有线程吗
  6. private
  7. spring ioc aop
  8. hashmap源码
  9. volatile
  10. 单例模式手写
  11. top k

这是一个女程序员面的我,第一次遇到女面试官呢,面完就说我过了hhh,不错不错。。。但说出来你可能不信,现在9月份了,我还在等二面呢,这真是一个悲伤的故事。。。。到这边感觉我已经有点感觉了,leetcode100题,基础内容计网、操作系统、mysql、spring、java基础、java并发、jvm的话基础题已经了解了

然后这时候我上岸了顺丰实习,我人生的第一个实习offer吧,不错不错,然后还拿了一些金融证券的。。。虽然我最后一个实习都没去。。。那么这究竟是为何呢,请看下一集《秋招》

​ 秋招历程 6月份到了学校以后,突然发现VIVO提前批开始了,我的天,怎么会有公司这么早啊啊。。。当时心态都崩了,难道今年因为疫情都这么早的吗,后来才知道,不不不,只有VIVO这么早滴~抱着试一试的想法,我就投了一波VIVO,这边吹爆VIVO效率,笔试、技术面、Hr面、发offer一周结束,于是我就拿到了人生第一个sp offer,这运气也太好了吧,还是在南京,我这会就感觉特别满意了,想结束秋招了,顺丰自然也是不想去实习了hhh,可能这就是懒狗吧。。。唯一有一些遗憾的就是,这个岗位不是java后端的,是安卓开发的,然后调研了一下客户端的前景,感觉技术栈不是很稳定,要入行的话还是要想想清楚的,但当时当然是喜悦大约忧虑的,觉得好歹是sp,难度又比java后端小好多,有一种赚到了的窃喜hhh。之后的几天题也刷得少了,面经也不怎么整理了,心情舒畅,逛逛牛客,养老式复习开始了。之后看看脉脉之类的,就感觉可能私企的话确实没有国企适合自己吧,而且这时候的技术配上双南理工的学历,进国企基本上还是挺稳的,所以这段日子过得还是很开心的,顺便看看行测啥的,为银行、事业单位考试做做准备,岁月静好,感觉这样一直到秋招结束的话应该是惬意的。。。。但大概人就是奇怪的动物,等到7月多的时候,周围陆续有人上岸了大厂,因为做技术的嘛大厂其实都听过的,肯定也都想试试的嘛,于是就投了几个大厂的后端,不出意外百度上海有点难的简历没过;然后字节DNS解析伪代码没写出来、挂;滴滴sp专场三面挂、其实表现还可以(小声bb)排序挂了、大家确实很强;然后网易云提前批笔试3/4笔试没过img,这时候面试官的评价一般都是基础还可以,广度不太行,于是7月底吧,我又重新进入了互联网复习模式hhh

我的算法水平一直还可以,因为我是跟着大雪菜学的,在8月份我把他B站的刷题课,跟着一起刷了一遍,确实按块刷的效果是非常显著的,我后来的面试手撕中,貌似就快手华为手撕翻过车hhh强烈推荐大家跟着y神学,y神我永远滴神!

然后技术栈的话在这段时间,我把redis和kafka仔细看了看,增加到了简历中嘿嘿,可一定要很熟悉再加嗷~然后基础的话,因为面经其实复习得还可以了,巩固的话意义一般吧,这段时间主要就是看书,我看的书有《高性能Mysql》、《Redis设计与实现》、《Kafka技术内幕》、《Spring技术内幕》、《深入理解java虚拟机》、《java并发编程的美》、《计算机网络自顶向下的方法》,感觉纯看面经知识点还是不够连贯,我这边的话一般一周面一次,然后一周的话,6天在看书写题,1天用来刷面经,然后面试,然后再6+1这样,无限循环,无限月读hhh

现在的话vivo(安卓)、oppo(java后端)、中兴(不懂)、贝壳(java后端)、字节(后端)过了,滴滴等意向书,华为等主管面,美团等三面,京东等后续;就是一步步打怪升级的过程,bat的话可能缘分还是没有到,作为一个懒狗已经比较满意了,准备面完华为美团就结束了嘿嘿~感觉是经典的半场开香槟哈哈哈哈

面试真的是很玄学的,感觉就是缘分到了,实力到了就过了,拿滴滴来说吧,这次的三面就很玄幻,太逗了,面完第一轮,那个面试官说,你特别适合我们这啊,我心里想(兄弟,你又不是主管,别给我画饼啊。。你难道还有权利直接要我的咯。。)然后再大家都在等待二面的时候,我直接二面面试官秒过来面我了。。。15分钟结束聊聊天,然后三面面试官说,他们说有个xx很符合我们要求,我直接来了。。。然后又是唠唠嗑写个题结束了,说过了,等消息就行。。。真是玄幻。。。(一面面试官我错了,你地位还是高的hhh)最后我总结一些常见题吧,大佬们珠玉在前了,我就稍微写一写吧

常见面试题

计算机网络

  1. 网络模型和协议

  2. TCP和UDP的区别

  3. UDP如何保证可靠

  4. TCP、UDP、IP报文格式

  5. 三次握手四次挥手

  6. TCP粘包

  7. TCP 协议如何保证可靠传输

  8. TCP的流量和拥塞控制

  9. ARQ协议

  10. 从浏览器中输入url之后发生了什么

  11. DNS服务器基本流程

  12. http get和post的区别

  13. cookies和session的关系

  14. 服务器怎么知道客户端已经发送数据完毕?

  15. 数字证书、签名

  16. HTTP1.0、1.1、2.0之间的区别

  17. HTTP状态码

  18. http请求报文有什么?

  19. http缓存

操作系统

  1. 进程间通信的方式

  2. 线程同步的实现方式(抛开语言,操作系统里)

  3. 进程调度算法

  4. 死锁的必要条件和处理方法

  5. 银行家算法,死锁

  6. 虚拟内存

  7. 常见的几种内存管理机制

  8. 快表和多级页表

  9. 页面置换算法

  10. 磁盘调度算法

  11. 阻塞式io和非阻塞式io的区别

  12. IO多路复用,讲下select、poll、epoll

  13. NIO、BIO、同步和异步的理解?

  14. 协程呢?

  15. 进程在自己虚拟地址空间都是什么

  16. 僵尸进程、孤儿进程

Mysql

  1. 数据库事务有哪些特性

  2. 脏读和幻读的区别是什么?

  3. 可重复读的隔离级别下如何保证不幻读

  4. 非关系型数据库和关系型数据库的区别

  5. Mysql mvcc?

  6. 乐观锁与悲观锁的区别

  7. 数据库范式讲一下

  8. 主键是什么?

  9. 内连接 左连接 右连接

  10. union与union all的区别

  11. Explain

  12. 最左前缀

  13. B+树的结构?与二叉树的区别?与B树的区别?

  14. Hash索引和 B+树索引优劣分析

  15. 索引用B+树而不用红黑树

  16. 数据库怎么优化

  17. 什么时候不该使用索引?

  18. 聚集索引和非聚集索引的区别

  19. Mysql知道几种存储引擎,有什么区别

  20. 覆盖索引

  21. 主从复制、读写分离、分库分表

  22. Mysql锁划分

  23. Mysql架构

  24. in和exist区别

Redis

  1. Redis有哪些数据结构

  2. String类型的底层实现:

  3. Hash字典类型

  4. Redis渐进式rehash 为什么

  5. Redis中zset的内部实现跳跃表 为什么

  6. Redis支持事务吗

  7. Redis单线程还是多线程,为什么?

  8. Redis单线程为什么还并发量那么高

  9. Redis为什么快?

  10. 缓存穿透以及解决

  11. 缓存雪崩以及解决

  12. 缓存击穿以及解决

  13. redis内存满了怎么办

  14. Redis持久化的方法

  15. AOF重写

  16. redis主从结构

  17. redis哨兵

  18. Redis集群

  19. 集群是如何判断是否有某个节点挂掉

  20. 分布式锁作用

  21. 一致性哈希

  22. 缓存与数据库双写一致

Kafka

  1. Kafka队列与发布订阅

  2. 介绍下kafka都有哪些组件

  3. kafka是怎样保证全局有序的 Kafka如何保证消息的消费顺序

  4. kafka 有哪些保证消息不被丢失的手段 (Kafka如何保证消息的可靠性)

  5. kafka如何防止消息重复消费? kafka保证消息唯一

  6. kafka副本机制 (Kafka如何保证高可用)

  7. ISR:为何用

  8. Kafka消息是采用Pull模式,还是Push模式?

  9. Kafka的特点

  10. Kafka的实现原理

  11. Kafka存储机制

  12. kafka写入数据时的高性能?

  13. kafka如何保证高吞吐 kafak为什么效率比较高

  14. kafka如何作为系统通知的过程

  15. Kafka一致性

  16. 多个消费者能不能消费同一个分区

  17. 除了Kafka还知道哪些消息队列?

基础分布式和大数据场景

  1. 分布式锁
  2. 分布式事务
  3. CAP、BASE
  4. 分布式ID
  5. 分布式协议
  6. URL黑名单问题:判断值是否已经存在于集合中
  7. 20亿个32位整数中出现次数最多的数:
  8. 40亿个非负整数没出现的数:
  9. 找到100亿个URL重复的URL
  10. 40亿非负整数出现两次的数:
  11. 大数据的中位数,桶排序

Java集合

  1. List、set、map三者的区别

  2. ArrayList和LinkedList的区别

  3. HashMap源码说一下(细说,从初始化到put、get、扩容、红黑树、1.8做了哪些优化)

  4. Hashmap链表要转红黑树,为什么长度超过8转

  5. 多线程Put可能发生的问题

  6. ConcurrentHashMap的实现

  7. Concurranthashmap和Hashtable的区别

  8. concurrenthashmap的 size如何计算

  9. LinkedHashMap,如何在o(1)的时间里面删除一个元素

  10. Hashset和hashmap的区别

  11. HashTable与hashMap的不同

  12. TreeMap

  13. List遍历时删除元素

  14. 快速失败(fail—fast)、安全失败(fail—safe)

  15. CopyOnWriteArrayList

  16. HashMap遍历时删除元素

Java基础

  1. java有几种基本类型,分别是什么?String是基本类型吗?

  2. Final、 static 、this、super关键字?

  3. final,finalize, finally有什么区别

  4. String、Stringbuffer和StringBuilder的区别

  5. Equals方法重写时为什么要重写hashcode方法?

  6. ==和equals的区别

  7. 接口和抽象类的区别

  8. jdk和jre的区别

  9. 深拷贝、浅拷贝

  10. Java中为何要有泛型?

  11. 方法覆盖与重载的区别?

  12. Java类初始化顺序

  13. java的三大特性 面向对象的特性。(封装、继承、多态) 的含义

  14. 多态的实现原理

  15. Java有这些权限:public,protected,private。如果不写,那默认权限是哪个?

  16. Java中类修饰符、成员变量修饰符、方法修饰符的种类与类别?

  17. 什么是内存泄漏?Java中存在内存泄漏吗?

  18. RuntimeException有哪些,提到了空指针异常,问怎么避免空指针异常

  19. 反射了解吗,应用场景

  20. Jdk动态代理原理

  21. Arrays.sort()的实现?

  22. Java8 有什么新特性

  23. 内存模型

  24. 创建对象的几种方式

  25. 注解元、标准、自定义

  26. 注解原理

  27. Java I/O的种类

  28. 怎么实现序列化与反序列化

  29. 5种IO模型的区别

  30. Object方法

Java并发

  1. 什么是线程?

  2. java线程通信同步有几种方式

  3. 多线程共享数据

  4. 信号量和互斥量的区别

  5. 线程是怎么实现的 线程有哪些方法?Wait()是线程的方法吗?

  6. wait和sleep的区别

  7. 线程实现各有什么优缺点?

  8. 要用start()方法区执行run()方法而不是直接调用run()方法

  9. 线程有几种状态 上下文切换

  10. ThreadLocal是什么

  11. 就绪状态和阻塞状态有什么区别 两者可以互相切换吗

  12. 进程和线程切换开销对比

  13. Java中的锁

  14. CAS的含义 ABA问题

  15. java volatile关键字

  16. 说一下volatile 指令不可重排 怎么不可重排,为什么不可重排,重排会发生什么

  17. Volatile关键字和synchronized关键字

  18. synchronized三种使用方式:

  19. synchronized的了解

  20. synchronized锁状态转换

  21. synchronized实现原理?

  22. synchronized和Lock的区别?

  23. AQS,基于AQS实现的lock, CountDownLatch、CyclicBarrier、Semaphore介绍

  24. CyclicBarrier 和 CountDownLatch 的区别

  25. 非公平锁和公平锁

  26. JUC原子类

  27. 两个线程读,一个线程写,如何实现,不用锁可以吗

  28. 线程池作用、参数、有几种

  29. Executor

  30. workQueue:

  31. 拒绝策略有几种?

  32. Java中如何正常终止线程?

  33. 主线程可以捕获子线程抛出的异常吗?

  34. 多线程个数?

JVM

  1. java虚拟机运行的流程

  2. java虚拟机的核心设计思想

  3. JAVA内存如何分配?

  4. 画出java运行时内存区结构图

  5. 堆区如何分类

  6. 堆与栈区别

  7. 为什么要把字符串常量池放到堆区

  8. java8方法区的变化

  9. 判断对象已经无效

  10. 引用计数法实现原理

  11. 哪些对象可以作为GC Root

  12. GCRoot详细

  13. finalize()方法回收对象的两次标记过程

  14. Java四种引用及场景

  15. 垃圾回收算法和流程

  16. 如何减少full gc的次数?

  17. 方法区是否需要gc

  18. 查看GC状态的命令

  19. CMS收集器的流程

  20. G1收集器的流程

  21. CMS收集器和G1收集器的区别

  22. 内存管理(对象创建、布局、访问定位)

  23. 堆内存分配策略

  24. 查看java虚拟机内存占用?

  25. java的类加载流程

  26. 类加载器

  27. 类加载器的双亲委派

  28. 为什么需要双亲委派

  29. 线程上下文类加载器

  30. 对象的创建过程

  31. Class类文件怎么回收

  32. Minor Gc和FULL Gc的区别

框架的话其实就ioc、AOP、Bean生命周期、MVC最好还是搭配技术内幕看看源码,不用很广,需要深度0

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值