苦战金三银四:580道最全面的BATJ大厂Java面试真题分享

一、Java SE(答案见文末)

苦战金九银十:580道最全面的BATJ大厂Java面试真题分享

1、Java基础

  1. 一个十进制的数在内存中是怎么存的? Java支持的数据类型有哪些?什么是自动拆装箱? int 和 Integer 有什么区别 ? 什么时候使用int 什么时候使用Integer?
  2. ==比较的是什么?
  3. hashCode()和equals()方法有什么联系? 为什么重写equals还要重写hashcode? Object若不重写hashCode()的话,hashCode()如何计算出来的?若对一个类不重写,它的equals()方法是如何比较的?
  4. 一个十进制的数在内存中是怎么存的?
  5. Java语言中float和double数据类型的精度是多少?它们在内存中是怎么存储的?和Decimal有什么区别?
  6. 为啥有时会出现4.0-3.6=0.40000001这种现象?
  7. 不借助四则运算如何实现加法
  8. char可以存汉字吗,底层怎么存的
  9. Java的字符集是什么
  10. 什么是值传递和引用传递?
  11. 数组(Array)和列表(ArrayList)有什么区别?什么时候应该使用Array而不是ArrayList?
  12. StringBuilder 和StringBuffer的区别 ? 底层实现上呢?
  13. String为什么要设置成final类型?String是不变的吗?String为什么不可变?怎么实现不变的?
  14. &和&&的区别?
  15. 在Java中,如何跳出当前的多重嵌套循环?
  16. 简述正则表达式及其用途。Java中是如何支持正则表达式操作的?
  17. 讲一讲Java里面的final关键字怎么用的?
  18. Java 8 如何实现的函数式编程?
  19. 如何保证方法的幂等性
  20. Java中的序列化的作用,serialVersionUID作用? 各种序列化器,序列化协议,为什么这个序列化那么快
  21. final、finally、finalize的区别和用法? 当在类里定义了一个方法,此时需要线程切换,方法里传的参数 必须用final修饰, why? 如果try里有return语句,还会执行finally里的语句吗?finalize里出现了异常,会发生什么?fnalize里面可以开启新的线程吗?调用finalize一定会将对象销毁吗?finalize一定会仅执行一次吗?finally一定执行吗?什么时候不被执行
  22. Java中main方法返回void如何判断程序是否正常退出?用static修饰有什么作用,为什么要用static,用JVM启动的时候,为什么不可以创建一个实例再去调用main的方法
  23. 如何创建一个注解
  24. 流式编程(Stream)会吗?然后讲流式编程底层原理
  25. java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
  26. 你知道的数组复制的方法,有什么高效率的吗
  27. 非递归和递归相比有什么好处
  28. RAII是什么,Java是如何实现的?
  29. 简单描述一下”System.out.println(“hello,world”);”从编写到控制台打印,经历了哪些过程
  30. Java中的LongAdder和AtomicLong的区别
  31. JDK和JRE的区别是什么?
  32. 了解哪设计模式,举例说说在jdk源码哪些用到了你说的设计模式

2、面向对象

  1. 面向对象的设计原则? 谈一下面向对象的"六原则一法则"。
  2. 面向对象的特征有哪些方面
  3. 类和对象的区别
  4. 问创建对象的几种方式
  5. Java有哪些特性,举个多态的例子。说一下多态的底层的原理?说了一下编译时多态和运行时多态以及JVM调用invokestatic方法然后调用动态分派的过程,通过栈帧的信息去找到被调用方法的具体实现,然后使用这个具体实现的直接引用完成方法调用。它是怎么找到对象实际类的?
  6. 多态的隐藏和覆盖
  7. 继承和组合的优劣?
  8. String能继承吗?
  9. Java支持多继承么?
  10. 请列举你所知道的Object类的方法。
  11. 重载和重写的区别?相同参数不同返回值能重载吗? Java中protect和static修饰的方法能重写吗?为什么?
  12. ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法? static块中能否调用实例方法? static的原理是什么
  13. 静态变量存在哪?
  14. 接口和抽象类的区别是什么? 什么时候用接口,什么时候用抽象类
  15. Comparable和Comparator接口是干什么的?列出它们的区别。
  16. Static Nested Class 和 Inner Class的不同
  17. Java的接口和C++的虚类的相同和不同处。
  18. Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?
  19. 说说Lamda表达式的优缺点。Lambda 表达式的实现原理?那匿名内部类和lambda表达式有什么区别?
  20. 静态代理实现与动态代理实现 ?JDK实现动态代理的限制
  21. 动态代理的主要作用是什么?动态代理与cglib实现的区别? cglib的实现原理?
  22. Java 的null是对象吗,可以怎么用,不可以怎么用
  23. 内部类为何可以访问外部类对象的属性及方法;
  24. 内部类可以引用他包含类的成员吗?有没有什么限制?

3、 异常

  1. Java中的异常处理机制的简单原理和应用。
  2. 运行时异常与受检异常有什么区别?
  3. error和exception有什么区别?
  4. 给我一个你最常见到的runtime exception
  5. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

4、反射

  1. 反射的实现与作用?
  2. 如何通过反射获取和设置对象私有字段的值?
  3. 谈谈如何通过反射创建对象?
  4. getMethods和getDeclaredMethods有什么区别
  5. 反射可以访问私有属性和方法吗?为什么可以,Java API中是如何实现的?
  6. 动态代理基于反射,反射的性能怎么样呢[答:反射越多性能会变差];那Spring为什么给人的感觉确是效率还可以呢
  7. 父类P有两个子类A B,A先加载了D.class,B再加载D.class,加载完成后的class D是同一个class吗
  8. 给你一个类,类中私有封装方法,不允许你直接调用,你怎么做测试。
  9. 反射会破坏单例吗

5、泛型

  1. java实现一个泛型数组
  2. 讲讲什么是泛型?泛型实现原理? 泛型擦除?
  3. 泛型 <? extends T> 和 <? super T>区别

6、集合

  1. 你对集合框架是怎么理解的?
  2. Java集合类框架的基本接口有哪些? List、Map、Set三个接口存取元素时,各有什么特点?
  3. Set 了解过吗?知道 add() 会出什么问题吗?
  4. Map和ConcurrentHashMap的区别?Collections实现线程安全和ConcurrentHashMap的区别
  5. hashMap内部具体如何实现的? 为什么链化阈值是 6 ,树化阈值是8
  6. 什么是TreeMap? TreeMap底层,红黑树原理?
  7. 如果hashMap的key是一个自定义的类,怎么办?
  8. ArrayList是否会越界?
  9. ArrayList和LinkedList的区别,如果一直在list的尾部添加元素,用哪个效率高? arrylist遍历过程中想删除元素怎么搞,扩容
  10. ArrayList,Vector,LinkedList的存储性能和特性是什么?
  11. HashMap怎么扩容的 , 什么时候扩容 ? 加载因子能改变么? 负载因子,为啥是2^n? 扩容过程哪里是线程不安全的? Hash冲突了怎么解决的?你刚才说了链地址法,那Hash冲突的时候,数据是放在链表头还是链表尾?HashMap扩容的同时,进行put操作,会发生什么。
  12. 那么两个线程同时对hashmap进行添加操作会发生什么。如果hashmap在扩容的时候,另一个线程添加数据又会发生什么。
  13. hashmap死锁的原因?
  14. HashMap和Hashtable有什么区别? key和value是否可以为空?
  15. concurrenthashmap有啥优势?ConcurrentHashMap是如何保证线程安全的? concurrenthashmap用的什么锁? ConcurrentHashMap锁加在了哪些地方? 1.7,1.8区别?concurrenthashmap读的时候不加锁,那如何保证读的一致性
  16. HashMap外部加锁 与 使用concurrenthashmap时两者效率相比如何
  17. 讲一下HashMap在1.8中的扩容方案? 讲一下concurrntHashMap的扩容方案
  18. 为什么集合类没有实现Cloneable和Serializable接口?
  19. 什么是迭代器?
  20. Iterator和ListIterator的区别是什么?
  21. 快速失败(fail-fast)和安全失败(fail-safe)的区别是什么?
  22. Collection 和 Collections的区别。
  23. 阐述ArrayList、Vector、LinkedList的存储性能和特性
  24. map迭代方法(Iterator遍历、entrySet遍历、Map.values取值遍历)
  25. java 1.6和1.8之间的区别?在HashMap上的改进是什么?用了红黑树,查询性能提升了多少?修改性能提升了没?红黑树是平衡二叉树吗?hashmap为什么不用平衡树,用了红黑树?多线程为什么1.7插入链表死循环,1.8不会?
  26. Collection.sort 源码看过吗?给我讲讲

7、多线程

  1. 多线程的好处
  2. 线程安全的定义? 如何保证线程安全?
  3. 多线程中的i++线程安全吗?为什么?多个线程访问i++ , 怎样设计保证线程安全
  4. 创建线程有几种不同的方式?你喜欢哪一种?为什么?Java中有几种方式启动一个线程?
  5. 原子类的底层原理?Atomic在高并发场景下有什么问题,缺点?
  6. CAS和ABA原理
  7. Jdk中哪里用到了cas? CAS check的字段是哪里,set到哪里去? cas有什么问题? jdk中是如何改进的? 如果很多个线程通过cas操作数据,如何提高效率?
  8. 如何线程安全的实现一个计数器?
  9. 请说出你所知道的线程同步的方法
  10. 线程数和内核数量的关系
  11. 线程中哪些是私有的?哪些是共享的
  12. 线程有多少状态,画出状态图,状态之间如何转换
  13. 同步方法和同步代码块的区别是什么?
  14. runnable和callable有什么区别?
  15. 为什么 object的方法 notify 和wait方法必须在synchronized里使用?
  16. sleep() 和 wait() 有什么区别? 为什么wait是Object的方法,sleep不是?wait方法底层是如何实现的?stop()和suspend()方法为何不推荐使用?
  17. 启动一个线程是用run()还是start()?
  18. 线程的sleep()方法和yield()方法有什么区别?
  19. ThreadLocal的原理,用什么作为key? 应用场景?
  20. 线程中断,interupt,是否肯定会中断。如果中断不了掉这个方法还有什么意义呢
  21. 如何理解Java多线程回调方法?
  22. AQS了解吗,在什么场景下用到?讲一下AQS的源码吧。
  23. cyclicbarrier和countdownlatch的区别
  24. 同步和异步有何异同,在什么情况下分别使用他们?举例说明。
  25. volatile、CAS、synchronized原理 什么情况下发生指令重排?各自的应用场景是什么
  26. synchronized的用法以及有什么劣势 ?
  27. 介绍一下Syncronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?
  28. 当一个线程进入一个对象的synchronized方法A之后,其它线程是否可进入此对象的synchronized方法B?
  29. Synchronized原理 ? monitor是什么? 是怎么定义的? 一个什么标志? 在哪里标志的?
  30. 那我现在有一个父类synchronized修饰非static方法和两个子类,现在两个子类调用这个方法会发生竞争吗?static的呢?为啥?
  31. 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?
  32. synchronized底层实现,偏向锁、自旋锁、轻量级锁、重量级锁,能否从重量级到轻量级,synchronized加在类和方法上的区别;为什么是可重入的?不可中断解释一下
  33. synchronized在jdk后面的版本做了优化,哪些优化
  34. synchronize与lock的区别?
  35. 讲下Synchronized是怎么升级的?
  36. 线程池有什么好处?
  37. Java中有几种线程池?
  38. 单核CPU是否会出现线程安全问题?单核cpu有必要使用线程池吗?
  39. 线程池设计依据是什么?让你实现一些缓存线程池,你怎么设计?
  40. 线程池并行计算的方式?
  41. 线程池运行流程,参数,策略(拒绝策略) 那这个 core 和 maximum 要怎么设的?关系是什么?线程池的场景设计,要根据IO密集型和CPU密集型来设计
  42. 线程submit的过程?
  43. 介绍一下生产者消费者模式?
  44. happen-before原则
  45. fast-fail和fail-safe机制,
  46. Arraylist和Linkedlist线程安全吗?Java中有没有提供线程安全的版本?CopyOnWriteArrayList怎么保证读写安全的?CopyonWriteArraylist的lock用的是哪个锁
  47. 了解哪些阻塞队列
  48. 怎么定位死锁?如何观察死锁,比如用java命令
  49. Java本身可以自动解决死锁问题吗?mysql可以解决吗?怎么解决的?
  50. future的原理
  51. 无锁情况下如何保证线程安全
  52. Executors中四个生成线程的实现类有什么特点,适用于什么场景
  53. CLH同步队列怎么实现非公平与公平的?
  54. 十个线程,分别执行不同任务,如何让他们执行完后,相互等待,一同出发
  55. 无锁队列的实现
  56. 写日志类 , 满足多线程向文件中写日志,设计一下需要实现哪些方法,说一下大概思路。

8、锁

  1. 讲一下非公平锁和公平锁在reetrantlock里的实现。
  2. 锁本质上是如何实现一个锁的操作?加锁有什么开销?可重入锁是怎么实现的。
  3. 如何确保N个线程可以访问N个资源同时又不导致死锁?
  4. 操作系统中的各种锁的实现原理,互斥锁、悲观锁、乐观锁。
  5. 分布式锁有哪些实现? 除了Lua解决方案呢? 怎么解除分布式锁?
  6. JVM 引入的锁优化技术有哪些?
  7. 锁膨胀 , 锁消除
  8. ReentrantReadWriteLock了解吗?ReentrantReadWriteLock 底层实现的原理?
  9. 自旋锁的优点
  10. Segment是什么?
  11. 公平锁和非公平锁?
  12. 加锁解锁过程中,线程内具体的操作了解过吗?
  13. 操作系统的PV原语和JAVA多线程里面的锁有什么关系,说一下PV原语
  14. 银行家算法

9、JVM

  1. JVM内存模型
  2. JVM运行时数据区域? 1.6,1.7,1.8区别?
  3. String a=“a”;String b=“b”; 问"a" "b"等不等于a b
  4. Java中堆栈的区别。堆栈的增长方向有哪些不同?
  5. jvm最大内存限制多少 ? 在一台16G内存的机器上,JVM默认内存空间多大?
  6. jvm是如何实现线程?
  7. 了解过字节码的编译过程吗
  8. eden区,survial区?
  9. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?(垃圾回收)
  10. JVM回收算法和回收器,CMS采用哪种回收算法,怎么解决内存碎片问题? 为什么年轻代要用复制算法?并发标记阶段处理速度慢的原因可能是什么。怎么进行优化
  11. 阐述GC算法 , 那并发量很高时,使用哪种算法?
  12. GC如何调优?
  13. 垃圾回收触发条件 ? 是需要回收就立即回收,还是怎么办?通常哪些设为安全点?
  14. GC中如何判断对象需要被回收? 一个方法中有A a = new A();这么一条语句,方法执行完后A的实例化对象在GC时能否被回收掉
  15. GCRoot可以是哪些对象
  16. 什么时候会触发full gc? FullGC是否停顿用户线程?发生Full GC的时候,一定会发生stop the world吗?怎么避免full gc ? 频繁出现full gc应该如何排查?
  17. minor gc如果运行的很频繁,可能是什么原因引起的,minor gc如果运行的很慢,可能是什么原因引起的?
  18. 对象怎么分配内存,基于什么原则;
  19. 类加载过程 ? 初始化阶段是干什么的?
  20. 双亲委派模型的好处是什么?
  21. 什么情况下用自定义类加载器?
  22. 对象头中都有什么信息?
  23. 了解过JVM调优没,基本思路是什么
  24. java中内存泄露是啥,什么时候出现内存泄露? jvm的oom都怎么发生? Java 内存模型中哪一个区域不会发生 OOM 异常? 如何确定内存泄漏的位置?
  25. cms算法 , 与G1的区别? CMS收集器用的什么算法?以及CMS的缺点?CMS对产生内存碎片的问题有什么解决方案吗?说下G1收集器的优点硬软弱虚引用,以及软引用的回收时机
  26. java8的metaspace
  27. new一个对象经历了哪些过程?jvm 里 new 对象时,堆会不会发生抢占?那你怎么设计jvm的堆的线程安全?
  28. jvm虚拟机除了可以用在Java上,还可以用到其他语言上吗?
  29. 新生代里是怎么划分的?每个区域的比例?你觉得设计者为什么要这么划分?
  30. Java自带的JVM监控软件介绍survivor空间不够怎么办
  31. 直接(堆外)内存的使用

1)、堆外内存定义

内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机),这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。使用未公开的Unsafe和NIO包下ByteBuffer来创建堆外内存。

2)、为什么使用堆外内存

1、减少了垃圾回收

使用堆外内存的话,堆外内存是直接受操作系统管理( 而不是虚拟机 )。这样做的结果就是能保持一个较小的堆内内存,以减少垃圾收集对应用的影响。

2、提升复制速度(io效率)

堆内内存由JVM管理,属于“用户态”;而堆外内存由OS管理,属于“内核态”。如果从堆内向磁盘写数据时,数据会被先复制到堆外内存,即内核缓冲区,然后再由OS写入磁盘,使用堆外内存避免了这个操作。

3、堆外内存申请

JDK的ByteBuffer类提供了一个接口allocateDirect(int capacity)进行堆外内存的申请,底层通过unsafe.allocateMemory(size)实现。Netty、Mina等框架提供的接口也是基于ByteBuffer封装的。

注:unsafe.allocateMemory(size)最底层是通过malloc方法申请的,但是这块内存需要进行手动释放,JVM并不会进行回收,幸好Unsafe提供了另一个接口freeMemory可以对申请的堆外内存进行释放。

在Cleaner 内部中通过一个列表,维护了针对每一个 directBuffer 的一个回收堆外内存的线程对象(Runnable),回收操作是发生在 Cleaner 的 clean() 方法中

4、堆外内存释放

其中first是Cleaner类的静态变量,Cleaner对象在初始化时会被添加到Clener链表中,和first形成引用关系,ReferenceQueue是用来保存需要回收的Cleaner对象。如果该DirectByteBuffer对象在一次GC中被回收了此时,只有Cleaner对象唯一保存了堆外内存的数据(开始地址、大小和容量),在下一次FGC时,把该Cleaner对象放入到ReferenceQueue中,并触发clean方法。

此时,只有Cleaner对象唯一保存了堆外内存的数据(开始地址、大小和容量),在下一次FGC时,把该Cleaner对象放入到ReferenceQueue中,并触发clean方法。

Cleaner对象的clean方法主要有两个作用:

1、把自身从Clener链表删除,从而在下次GC时能够被回收

2、释放堆外内存

32、破坏双亲委派的场景。加载同一个类怎么做。

33、提到Java全局的缓存怎么处理防止OOM

44、Java JIT听说过吗

10、 网络编程 , IO,NIO与AIO

  1. 网络编程相关的内容; 给你一个网络上图片的URL,怎么将其读取并写入本地指定磁盘
  2. 非阻塞io和阻塞式io的区别
  3. Java中的IO有哪些类,用了哪些设计模式
  4. NIO怎么实现? NIO对比于BIO优势是什么
  5. NIO中buffer中在传输文件时如何工作
  6. select、poll、epoll实现和区别
  7. 零拷贝?
  8. 当现在是epoll_Wait时,有一个io请求发送了过来,会发生什么?
  9. Java中异步调用或者说异步IO实现了解吗?
  10. Netty的使用场景
  11. netty如何解决粘包和拆包问题

11、XML基础

  1. XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式?

12、Java的调优

  1. 用过哪些java工具,有过调优经验吗
  2. 如果线上代码出问题怎么排查?内存泄漏怎么排查?
  3. JDK提供了哪些性能分析工具 , 作用

二、设计模式

1、结构型模式

  1. java中有哪些代理模式?
  2. 如何实现动态代理 ? 两种动态代理的区别?
  3. IO流熟悉吗,用的什么设计模式?

2、创建型模式

  1. 介绍一下单例模式?手写单例模式?懒汉式的单例模式如何实现单例?

3、行为型模式

  1. 介绍一下策略模式?
  2. 设计模式了解哪些,手写一下观察者模式?

4、模式汇总

  1. 说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
  2. j2ee常用的设计模式?说明工厂模式。
  3. 简述一下你了解的Java设计模式 开发中都用到了那些设计模式?用在什么场合?

三、Java web编程

1,web编程基础

  1. JAVA应用服务器有那些?
  2. 启动项目时如何实现不在链接里输入项目名就能启动?
  3. 1分钟之内只能处理1000个请求,你怎么实现,手撕代码?
  4. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?(JSP)
  5. 说一说四种会话跟踪技术
  6. 讲讲Request对象的主要方法
  7. 过滤器有哪些作用和用法?
  8. 请谈谈你对Javaweb开发中的监听器的理解?
  9. 说说web.xml文件中可以配置哪些内容?
  10. get和post的区别
  11. token , cookie和session的区别 , 与localstorage的区别
  12. session怎么保证多次访问是同一个ID
  13. 谈谈Session的save()、update()、merge()、lock()、saveOrUpdate()和persist()方法分别是做什么的?有什么区别?
  14. 如何设置请求的编码以及响应内容的类型?
  15. Servlet相关接口 , Servlet里面有哪些方法 ? Servlet执行时一般实现哪几个方法?
  16. Servlet 3中的异步处理指的是什么?
  17. servlet生命周期?servlet是单例模式么?为什么是单例?Servlet和cgi有什么区别?
  18. 服务器收到用户提交的表单数据,到底是调用Servlet的doGet()还是doPost()方法?
  19. servlet写过么,底层是怎么处理前台传来的请求的
  20. Servlet中如何获取用户提交的查询参数或表单数据?
  21. Servlet中如何获取用户配置的初始化参数以及服务器上下文参数?
  22. 登录功能如何保证安全性。(MD5+盐)为什么用MD5,讲一下机制。还有什么保证安全的加密方式?
  23. 设计一个怎么使得验证码有效期,过了一段时间就过期了。
  24. 如何实现单点登录

2、web编程进阶

  1. forward与redirect区别,说一下你知道的状态码,redirect的状态码是多少?
  2. 常见的加解密算法方式了解吗?对称加密和非对称加密的算法有哪些?3DES为什么叫3DES?
  3. 是否单例,为什么是单例。
  4. 如何在基于Java的Web项目中实现文件上传和下载?
  5. 缓存的优点?
  6. 说说MVC的各个部分都有那些技术来实现?如何实现?
  7. 什么是DAO模式?
  8. 请问Java Web开发的Model 1和Model 2分别指的是什么?
  9. 如何保存会话状态,有哪些方式、区别如何
  10. 分布式session如何管理,你有哪些方案
  11. 布隆过滤器及其实现
  12. 项目中数据如何加密传输?
  13. 在用户成功登录之后怎么保证数据安全传输?如何保证请求合法?
  14. 你了解的web安全问题都有什么,什么是xss攻击? CSRF攻击 ? JSONP问题? 追问crfs攻击,怎样伪造受信用的的客户端,具体怎么伪造的。
  15. 系统化怎么进行分页的呢?我答了sql语句limit、数组分页还有拦截器分页。
  16. tomcat的类加载机制。
  17. 登录逻辑?如何保证登录安全?用户携带的这个token和谁进行比较?怎么获取token?
  18. 什么是中间人攻击
  19. 安全相关,token的设计应该考虑哪些因素?
  20. tomcat有哪些配置?有没有修改过tomcat的参数?如果有修改过什么?tomcat底层怎么实现的?Tomcat是类加载实现结构,它有哪些实现类加载器
  21. dos攻击怎么回事,怎么解决
  22. 服务端是怎么验证用户的?生成的token有可能重复吗?
  23. 我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?
  24. 登录怎样校验密码,海量用户同时登录怎么优化

3、web编程原理

  1. 请谈谈转发和重定向的区别?
  2. forward 和redirect的区别
  3. BS与CS的联系与区别。
  4. 什么是Web Service(Web服务)?
  5. 大型网站在架构上应当考虑哪些问题?
  6. jwt是怎么实现的
  7. Tomcat启动主要负责什么工作?
  8. tomcat为什么会出现假死,既然死锁是某几个线程之间出现循环等待,为什么整个tomcat会假死。
  9. 禁用cookie怎么办
  10. 单拎出来的跨域问题,了解下浏览器同源(协议,域名,端口)政策,对后端的限制(AJAX等,前端问题暂不考虑),解决方法(JSONP,WebSocket,CORS),CORS(Cross-Origin Resource Sharing)相关内容,头字段 Origin,Access-Control-Allow-Origin 等;
  11. SOCKS

三、Java常用框架及组件

1、Spring

  1. 介绍一下spring? spring框架的优点? Spring框架为企业级开发带来的好处有哪?缺陷有哪些?怎么避免这个缺陷
  2. 介绍一下bean的生命周期
  3. Spring里面注解用过没有?autowired 和resource区别?
  4. Spring中BeanFactory和ApplicationContext的区别?
  5. 请问Spring中Bean的作用域有哪些?
  6. Spring加载Bean的过程? Spring框架xml文件中配置bean的实例化过程?了解Spring是怎么递归地加载Bean的吗?BeanFactory和FactoryBean有什么区别?
  7. Spring getBean的整个流程
  8. 谈谈Spring中自动装配的方式有哪些?
  9. 说一下IOC和AOP? DI的方式有几种?哪几种?
  10. spring怎么解决循环引用的问题,比如,A对象构造时需要B对象;B对象构造时需要A对象
  11. springIOC原理?说说Ioc容器的加载过程Spring IOC底层存储结构 ? 自己实现IOC要怎么做,哪些步骤?
  12. aop的应用场景?
  13. AOP的原理是什么? 除了动态代理还有什么?
  14. 拦截器和AOP的关系 Spring拦截器的底层是怎么实现的
  15. 你如何理解AOP中的连接点(Joinpoint)、切点(Pointcut)、增强(Advice)、引介(Introduction)、织入(Weaving)、切面(Aspect)这些概念?
  16. #号和$号的区别
  17. Spring支持的事务管理类型有哪些?你在项目中使用哪种方式?
  18. 什么是Spring的声明式事务管理。
  19. AOP 的 @transaction 是怎么做的?为什么不加这个注解就不是事务?
  20. spring事务传播机制
  21. spring中用到了哪些设计模式
  22. Spring Security 的核心原理
  23. 如果spring的事务中抛出了IOException,会回滚吗?
  24. 在spring中双重检查锁有效吗

2、Mybatis

  1. 持久层设计要考虑的问题有哪些?你用过的持久层框架有哪些?
  2. 解释一下MyBatis中命名空间(namespace)的作用。
  3. Mybatis原理
  4. MyBatis中的动态SQL是什么意思?
  5. MyBatis 如何获取自增主键的值?底层怎么实现?
  6. mybatis 如何防止SQL注入
  7. mybatis如何配置测试和开发环境下不同的链接
  8. mybatis和jdbc区别,什么是一级二级缓存,为什么一般不开启二级缓存有什么问题?#KaTeX parse error: Expected ‘EOF’, got ‘#’ at position 24: …别对应什么?mybatis中 #̲ 和 ¥ 的区别,sql注入问…{}的区别是什么?预编译的作用
  9. 写一下mybatis的批量插入
  10. mybatis中xml是怎么解析的?
  11. 讲讲mybatis和jpa的区别
  12. mybatis哪里用到过反射
  13. mybatis的数据库表与配置文件是如何实现映射关系的

3、MVC

  1. Spring MVC注解的优点
  2. @Controller和@RestController的区别?
  3. 那一个controller分别调用两个Service再调用两个Dao时,注解加在什么层,如何实现事务?那两个Service强相关呢?(还是事务传播,加入到一个事务中。)再问:怎么加入呢?(答:事务管理器),那是事务管理器里的哪个对象呢?(答:记 记不清了
  4. springmvc和spring-boot区别?
  5. SpringMVC的运行机制,运行机制的每一部分的相关知识?
  6. 拦截器和过滤器区别? springmvc拦截器和servlet过滤器先用哪个
  7. springMVC中对整个请求的处理流程是怎样的?返回json的话是用哪个view?
  8. spring框架从URL请求如何找到controller
  9. RestFul 规范是怎么样的?
  10. 如何使用SpringMVC对用户写入的参数进行修改?
  11. 如果一个Dao有两个实现,一个连接mysql,一个oracle,service要自动注入这个类,如果直接注入的话会有冲突,怎么解决冲突?

4、SpringBoot

  1. Spring Boot的启动函数是怎样的? 怎么找到启动类
  2. springboot如何实现自动装配
  3. springboot扫描配置的过程

5、dubbo

  1. Dubbo原理
  2. 讲 Dubbo SPI 的源码?
  3. 讲 Dubbo 服务暴露源码 + Dubbo 服务注册
  4. 讲一下 Dubbo 服务引用底层?
  5. 讲一下 Dubbo RPC 协议调用过程,使用哪些协议?
  6. Dubbo 的连接
  7. Dubbo 的负载均衡
  8. dubbo为什么比springcloud快 , 从网络角度分析dubbo为什么比springcloud快 dubbo服务注册怎么做,过程。如果几万个服务怎么配的。怎么设计服务中心效率更高。

6、Kafka

  1. kafka 消费者组和分区的关系? kafka有5个消费者,4个分区,是如何消费?kafka的分区有哪些方式,分区算法?
  2. kafka 应答机制,选举算法
  3. kafka 消息丢失的原因? 消息丢失场景和怎么保证数据不丢失 ? 如何防止重复消费
  4. kafka如何实现消息是有序的?
  5. kafka如何实现多线程的消费?
  6. 接口防刷限流是怎么实现的,较短时间出现大量请求该如何解决
  7. kafka的重复消费?
  8. kafka异步刷盘,数据会不会丢

7、各框架对比与项目优化

  1. Mybatis和Hibernate区别?
  2. 介绍一下你了解的Java领域的Web Service框架。

8、es

  1. ES怎么用的?倒排索引讲一下?

9、rabbitMq

  1. rabbitmq从发送到接受之间的具体过程
  2. rabbitMQ事务的底层实现原理
  3. 为什么使用rabbit mq?
  4. rabbitmq能够多个线程进行消费吗?
  5. 那如果有的事件消息的数量很多,有的很少怎么办?做了负载均衡么?

10、Zookeeper

  1. zookeeper的服务注册
  2. zookeeper的节点类型
  3. 说下CAP理论,Zookeeper 舍弃了哪个 , Zookeeper和Eureka分别是满足CAP中的哪些 redis属于哪种 分区容错性的意义?

四、数据库

1、SQL语句的使用

  1. 写SQL:找出每个城市的最新一条记录。
  2. 一个学生表,一个课程成绩表,怎么找出学生课程的最高分数
  3. 插入一条数据时如何直接取到当前数据的id
  4. 有一组合索引(A,B,C),会出现哪几种查询方式?tag:sql语句
  5. 写一下创建存储过程的语句
  6. 建立组合唯一索引的语句
  7. delete truncate 区别
  8. SQL 中select…limit and offset 会有什么问题,怎么解决
  9. 一个考试成绩明细表,字段有id,class_name,user_name,score,找出考试分数大于90分的人数最多的班级
  10. 我现在要查询某一个商家某段时间内的订单金额,sql语句怎么写?

2、mysql基础

  1. mysql和Oracle的区别?
  2. 数据类型(datetime timestamp)的大小
  3. 怎么防止sql注入?
  4. 一条SQL语句在MySQL中会经过怎样的过程
  5. 数据库两种引擎 InnoDB和MyISAM的区别?介绍一下什么时候用Innodb什么时候用MyISAM。
  6. 讲一下事务ACID的特性?怎么保证事务的原子性?
  7. mysql数据库的事务,隔离级别 , 可重复读如何实现的?给定一个场景,银行账户相互转账, 你觉得设定什么隔离级别比较合适?
  8. 数据库索引介绍一下。 数据库索引适合用在什么场景下?不适合用在什么场景下?什么情况下索引会失效?
  9. 索引了解嘛,底层怎么实现的,什么时候会失效
  10. 聚族索引和非聚簇索引
  11. 如何让模糊查询使用索引
  12. 数据库乐观锁和悲观锁 ? 如何实现 ? 各有什么优缺点 ? 缺点如何解决 ?
  13. mysql主从复制? 延迟了怎么办?
  14. left join和right join的区别?给两张表 100行和50行,left join后有多少行?如果有一行重复呢? 知道数据库的join操作吗?谈谈这个操作怎么做
  15. 谈一下你对继承映射的理解。
  16. 说出数据库连接池的工作机制是什么?
  17. JDBC中如何进行事务处理?
  18. 行锁和表锁的区别 ? 数据库行锁如何触发?行锁实现原理?
  19. sql中limit会不会越来越慢,为什么
  20. 建立abc三列的索引,问ac bc ba 会不会用到索引 , 两个字段的联合索引, 是一棵树 还是两个树? 联合索引为什么要遵循最左前缀原则?
  21. 数据库主从同步是怎么做的
  22. 间隙锁的锁定范围是多少?Select * from t where id<4,这条sql中,间隙锁锁的范围是什么?是(1,4)还是(-无穷,4)?
  23. MySQL宕机怎么解决?
  24. 一条Update语句,一定会更新索引吗
  25. 增删操作相比查找操作的弊端
  26. like关键字进行查找会用到索引吗? like“aa%”索引是否可以 ?为什么like后跟%不走索引? mysql如何知道sql语句用没用上索引?
  27. 查询表中最后一个记录,哪个索引更快,为什么
  28. mysql视图
  29. MySQL数据库的select…for update是只锁一行数据么??分析一下
  30. uuid做主键可以吗?为什么?
  31. 间隙锁锁的是数据还是索引? 间隙锁解决的是啥问题
  32. 单表更新是否需要事务?
  33. mysql主键索引和unique索引区别 ? 主键索引可以用来建立复合索引吗
  34. 在一个事务A方法里调另一个事务B方法,映射到mysqlA和B两个事务,这两个事务可以并存吗?
  35. Mysql索引 hash和btree什么情况使用
  36. 覆盖索引
  37. mysql列扩容的时候,是否可以进行select, update
  38. select … for update加锁时,宕机时锁会释放吗?会的话,原理是什么?
  39. MySQL 的 binlog、bitmap , redo log 和 undo log
  40. 幂等的实现,fail over怎么处理
  41. update … where a = 1;这句语句innoDB会加几行锁?
  42. 什么时候会造成数据库死锁?什么时候会造成数据库索引失效?

3、mysql优化

  1. 数据库优化方法
  2. 数据库自己做了哪些优化,
  3. vachar 字段非常大,数据库怎么进行优化存储
  4. MySQL做高可用了么?怎么做的?过程简单讲一下?
  5. 怎么定位数据库慢语句?怎么分析 SQL 语句的性能?如何对查询语句优化?分析SQL的字段?explain,会关注哪些字段?
  6. 有一个查询语句,速度特别的慢,服务器都快不行啦,你咋排查呢?
  7. 那怎么进行读写优化?
  8. MySQL索引优化,索引设计原则。 对索引的内容有什么要求,比如年龄字段适不适合建立索引?做过索引优化不?explain语句出来的结果中的type如果为index是啥意思
  9. 平时有查看过sql的执行计划吗
  10. 怎么去监控MySQL的性能问题?怎么查看一个sql语句的执行效率?
  11. 数据量大时如何分库分表,原则是什么,如何管理id
  12. 数据库如何水平切分,垂直切分 ?
  13. 设计一个实时监测 MySQL 的工具,可以监测每条 SQL 语句运行时间、事务的运行和数据库的连接信息等
  14. mysql进程利用率很高如何排查问题
  15. MySQL 大表翻页优化怎么做,具体情境100w页之后

4、mysql原理

  1. 数据库的架构
  2. mysql的通信协议
  3. mysql 索引 b 和B+ 的区别是什么? B+树索引的核心在于什么? 我们知道树有很多种,为什么要选择b+树,而不选择其他?为什么要用 B+ 树而不用红黑树? 为什么B+树磁盘读写代价更低
  4. 为什么myisam不支持行锁
  5. mycat分库分表了解吗?
  6. 数据库删除操作底层实现
  7. Innodb如何避免幻读的?innodb怎么实现可重复读?
  8. java访问的数据库的时候速度瓶颈问题是什么造成的,为什么会有瓶颈?
  9. InnoDB是如何实现聚集索引的?
  10. mvcc是什么怎么解决未提交读的。mvcc 适用的隔离级别,为什么

5、mysql表的设计

  1. 数据库的三范式? 设计表的时候一定要遵从范式吗?
  2. 如何设计表,从安全、性能、高并发等方面分析

6、mysql集群

  1. 如何解决跨节点的join关联查询
  2. 两个MySQL数据库怎么来做数据同步?
  3. 怎么处理跨库跨表查询,怎么做数据迁移,
  4. 说一下分布式事务以及多数据库高并发的处理 ? 什么是两段式,三段式,它的实现原理是什么?补偿事务?Sagas事务模型?

7、JDBC基础

  1. JDBC的反射,反射都是什么?
  2. Jdo是什么?
  3. Statement和PreparedStatement有什么区别?哪个性能更好?
  4. 使用JDBC操作数据库时,如何提升读取数据的性能?如何提升更新数据的性能?
  5. 反射能获取到父类的私有方法吗?怎么防止反射破坏单例模式?

8、Redis基础

  1. Redis哨兵模式和集群的区别?
  2. Redis为什么用跳表不用其他的?介绍一下Redis的zset中的跳表zskiplist
  3. 讲一下RDB、AOF,优缺点,怎么选择?讲一下缓存雪崩、缓存击穿、缓存穿透、怎么避免?
  4. redis为什么快?除了内存角度呢?
  5. redis有哪几种数据结构?给你一个key怎么知道是用的哪种结构?Redis数据类型??
  6. redis宕机后恢复数据的方式
  7. 怎么保证 redis 和 数据库的一致性? 如果数据库更新成功,缓存更新失败呢?
  8. redis 集群的实现?
  9. redis的过期规则?如何设置过期时间? 过期后是怎么处理的?
  10. redis的内存置换方法
  11. Redis内存泄漏,
  12. Redis 主从节点是怎样通信的,传输数据是全量复制还是半增量复制
  13. 讲一下redis的主从复制怎么做的?
  14. Redis为什么单线程但是性能高
  15. aof,rdb,优点,区别?
  16. redis的List能用做什么场景?
  17. 在一个多核cpu环境下,既然redis是单线程的,怎么提高服务器的利用率
  18. redis用到哪些设计模式
  19. Redis怎么解决双写一致性问题
  20. 影响Redis最大并发性能的主要因素
  21. Redis除了有做缓存还有什么用
  22. redis中热点key导致单点挂掉怎么解决
  23. redis如何实现对热点数据的存储
  24. redis是否支持事务
  25. redis如何存一个键值对 , 如何存String
  26. 若存在一些排序操作,例如order by score这样的操作,在缓存中怎么进行处理
  27. 假设Redis中存储着一个List类型的数据,这些数据会不定期的变化,例如,论坛的帖子,按照发布时间进行排序显示。怎么确保每一次读这样的List数据,能够确保不读到空的数据?(最佳方式,利用脚本实现)
  28. Redis集群负载均衡怎么搭建?
  29. 有序集合的底层 -字典与跳跃表 为什么用这两个结构
  30. SDS优点,链表、跳表的实现与复杂度
  31. 那两个数据库双写不一致问题怎么解决呢?(那就先把缓存删了,再从MySQL中重新加载缓存。常见方法导致继续加问。。。)还有别的方法么?(那做序列化,将数据按照顺序一条条写入。)那如果有一条数据写入失败怎么办,MySQL成功,Redis失败?(答:再从MySQL读这条数据。总不能回滚吧?)
  32. 业务中redis如何保证可用性? 一些节点崩了怎么办,全都崩了咋办。。
  33. 如果你要对班里的学生根据分数进行排名,你觉得用redis里的哪个数据结构比较好。zset的底层是用什么数据结构实现的。
  34. redis,十几万条已排好的数据在redis里,这时新来了一条数据,怎么快速更新排行榜,这个问题说了好久没说到面试官想要的答案
  35. redis除了使用lua脚本还能如何实现原子性
  36. redis为什么使用跳跃表,不使用红黑树
  37. Redis出现多个Client同时修改redis服务器中同一个key怎么办?(redis并发竞争问题?)
  38. redis的事务跟数据库的事务一样吗?

五、计算机网络

1、网络概述

  1. OSI、TCP/IP、五层体系结构联系与区别?
  2. TCP和UDP的区别? UDP相比TCP来说最大的优点是什么?视频使用tcp还是udp,为什么?
  3. 为什么要有MAC地址,用IP地址不行吗
  4. TCP和HTTP的keepalive分别是什么
  5. 给定域名有哪些方法可以获取到对应的IP,你自己获取,不是DNS。
  6. 怎么判断网络上发生了拥塞,重传?失序?
  7. 如何实现IPv6以及IPv4的检测
  8. 点到点和端到端的区别
  9. 桥接和NAT
  10. osi主要协议,telnet哪一层
  11. 江苏放个服务器,北京访问,大概需要多少时间,按什么方法计算,能最快达到什么级别的速度
  12. 如何确定网络的稳定性?
  13. 翻墙中的墙的实现原理
  14. 假设你在宿舍玩游戏,突然发现特别卡,原来你舍友在用迅雷下载东西,为什么迅雷会占用网络带宽导致你玩游戏特别卡,而游戏竞争不过迅雷。
  15. 假如你要传一个很大的文件,怎么传?
  16. 从输入url到页面渲染中间过程,如果网络距离太长,怎么解决
  17. ping的原理?
  18. 详细说一下arp

2、运输层

  1. 讲一下TCP的连接和释放连接。
  2. TCP有哪些应用场景?
  3. tcp如何实现可靠传输
  4. tcp为什么要建立连接
  5. 阐述TCP的4次挥手
  6. 讲一下浏览器从接收到一个URL到最后展示出页面,经历了哪些过程。tag
  7. http和https的区别 ? https为什么安全? https 单向认证和双向认证的流程?
  8. http的请求有哪些,应答码502和504有什么区别
  9. 为什么TIME_WAIT状态需要经过两个最大报文段生存时间才能到close状态?
  10. 说说ssl四次握手的过程
  11. 304状态码有什么含义?
  12. 如何减少TCP的时延问题
  13. TIME-Wait和Close-Wait出现在什么时候,为什么需要它们?什么原因会导致服务端一直CLOSE-WAIT
  14. TCP客户端发出第一个报文后状态是什么,服务端收到这个报文的状态?
  15. 大量TIME_WAIT?大量主机在CLOSE-WAIT状态是什么原因
  16. TCP如何避免拥塞,怎么判断拥塞了。拥塞控制算法最坏的场景
  17. 滑动窗口是什么,滑动窗口大小怎么确定?什么场景下滑动窗口效率低
  18. 如何使UDP变得可靠
  19. 数据中心网络下TCP的缺陷不足
  20. 三次握手第二次失败了,客户端和服务器分别做什么
  21. TCP未按序到达的包怎么处理
  22. tcp传输中数据被篡改了怎么处理
  23. tcp_reuse ,timestamp参数
  24. 为什么time_wait是2MSL,2MSL时长是多少,为什么需要将time_wait设置减小,调整时间有什么意义。(需要再深入再详细一些)如何让time_wait快速回收。
  25. TCP中RTT,RTO相关计算公式,给解释一下。给了提示,tcp传输一组数据要用多长时间。
  26. 如何快速复用处于TIME_WAIT的连接?
  27. tcp dump命令的使用?如何dump数据包然后优化网络?
  28. QQ的属于tcp还是udp协议,直播是怎么实现的
  29. syn攻击
  30. 有哪些因素会影响 tcp 的传输速率?
  31. TCP的RST了解吗?
  32. 第二到第三次挥手之间服务器在做什么?最后一次挥手,客户端与服务端的状态?

3、网络层

  1. arp协议,arp攻击
  2. icmp协议
  3. 讲一下路由器和交换机的区别?
  4. 路由器给局域网动态分配IP的原理吗
  5. 广播和单播?局域网和广域网?同一局域网下网段要相同吗?如果不是路由器,是交换机网段要相同吗?
  6. 路由表的结构是什么样的
  7. 报文乱序;有一个报文一直未收到,什么原因,怎么解决
  8. BGP路由协议
  9. 路由的两种方式(rip, ospf),怎么实现

4、应用层

  1. DNS寻址过程
  2. 负载均衡反向代理模式优点及缺点
  3. HTTP状态码 ? 304具体是什么错误?
  4. 如何提高HTTPS的效率
  5. 端口号 443 和80 分别是用于哪个协议
  6. HTTP 1.1版本增加了哪些内容?有哪几种请求方式?
  7. HTTP是怎么传图片的?
  8. 如果现在让你写一个程序能出现500的错误,你怎么写?
  9. 发布一个http接口需要考虑哪些方面:协议(get post),安全(白名单,token,sql注入,xss攻击等),考虑前后端分离(所以用json格式当参数和返回值,另外可以传设备类型到后台,aop统计不同设备调用次数)
  10. http如何保持连接
  11. 如果不用http,如何保持连接
  12. 了解身份鉴别协议,有哪些?http证书怎么来?
  13. 如果让你实现一个文件上传协议,你会怎么设计??断点续传??如果这个接收端是分布式的呢???怎么控制传输速率???文件怎么存储??分布式存储怎么办???
  14. http中向服务器请求一个网页,用的是以下哪个函数,get/read/post/head
  15. Http 报文里有什么?
  16. http1.0,1.1和2.0的区别
  17. http是三次握手吗
  18. 短连接和长连接?

短连接:连接、传输数据、关闭连接

短连接指SOCKET连接后发送接收完数据马上断开连接。

长连接:连接、传输数据、保持连接、传输数据、、、、、关闭连接

长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

19、半包:接收方没有接收到一个安装的包,只接受了部分,这种情况主要是由于TCP为提高传输效率,将一个包分配的足够大,导致接收方不能一次接收完(在长连接和短连接中都会出现)粘包:指发送方发送的若干数据到接收方接收时粘成一包,从接收缓存区看,后一包数据的头紧接着前一包数据的尾。分包:出现粘包时接收方要进行分包处理(在长链接中出现)。

20、在并发量比较大的情况下,就会出现一次接受并不能完整获取所有数据?

解决方法:1、通过包头、包长、包体的协议形式,当服务器端获取到指定包长时才说明获取完整。2、获取到指定包结束标识时,说明包获取完整。

什么时候需要考虑粘包的情况?

1、 当短连接时,不需要考虑粘包情况。

2、 如果发送数据无结构,如文件传输,这样发送方只管发送,接收方只管接受存储就好,不用考虑粘包。

3、 如果双方建立连接,需要在连接受一段时间内发送不同数据结构时,接收方创建一处理线程,对接收到的数据包进行预处理,将粘包分开。

注:粘包情况分两种:一种是粘在一起的包是完整的数据包,另一种情况是粘在一起的包有不完整的包

一个包没有固定长度,以太网限制在46-1500字节,1500就是以太网的MTU,超过这个量,TCP会为IP数据报设置偏移量进行分片传输,现在一般可允许应用层设置8k(NTFS系)的缓冲区,8k的数据由底层分片,而应用看来只是一次发送。windows的缓冲区经验值是4k,Socket本身分为两种,流(TCP)和数据报(UDP),你的问题针对这两种不同使用而结论不一样。甚至还和你是用阻塞、还是非阻塞Socket来编程有关。

1、通信长度,这个是你自己决定的,没有系统强迫你要发多大的包,实际应该根据需求和网络状况来决定。对于TCP,这个长度可以大点,但要知道,Socket内部默认的收发缓冲区大小大概是8K,你可以用SetSockOpt来改变。但对于UDP,就不要太大,一般在1024至10K。注意一点,你无论发多大的包,IP层和链路层都会把你的包进行分片发送,一般局域网就是1500左右,广域网就只有几十字节。分片后的包将经过不同的路由到达接收方,对于UDP而言,要是其中一个分片丢失,那么接收方的IP层将把整个发送包丢弃,这就形成丢包。显然,要是一个UDP发包佷大,它被分片后,链路层丢失分片的几率就佷大,你这个UDP包,就佷容易丢失,但是太小又影响效率。最好可以配置这个值,以根据不同的环境来调整到最佳状态。

send()函数返回了实际发送的长度,在网络不断的情况下,它绝不会返回(发送失败的)错误,最多就是返回0。对于TCP你可以字节写一个循环发送。当send函数返回SOCKET_ERROR时,才标志着有错误。但对于UDP,你不要写循环发送,否则将给你的接收带来极大的麻烦。所以UDP需要用SetSockOpt来改变Socket内部Buffer的大小,以能容纳你的发包。明确一点,TCP作为流,发包是不会整包到达的,而是源源不断的到,那接收方就必须组包。而UDP作为消息或数据报,它一定是整包到达接收方。

5、关于接收,一般的发包都有包边界,首要的就是你这个包的长度要让接收方知道,于是就有个包头信息,对于TCP,接收方先收这个包头信息,然后再收包数据。一次收齐整个包也可以,可要对结果是否收齐进行验证。这也就完成了组包过程。UDP,那你只能整包接收了。要是你提供的接收Buffer过小,TCP将返回实际接收的长度,余下的还可以收,而UDP不同的是,余下的数据被丢弃并返回WSAEMSGSIZE错误。注意TCP,要是你提供的Buffer佷大,那么可能收到的就是多个发包,你必须分离它们,还有就是当Buffer太小,而一次收不完Socket内部的数据,那么Socket接收事件(OnReceive),可能不会再触发,使用事件方式进行接收时,密切注意这点。这些特性就是体现了流和数据包的区别。

六、操作系统

1、操作系统概论

  1. 计算机底层是用补码来计算的,为什么用补码?
  2. 用户态和内核态的区别? 为什么需要内核态?什么时候进入内核态?用户态切换到内核态的过程?如何实现切换?进程快照需要保存哪些必要数据?中断处理函数让你自己写如何实现?在时间片乱转的情况下,计算机有什么方法可以实现中断?(定时器)
  3. 什么是分时操作系统和实时操作系统 Linux是实时还是分时 ?
  4. 什么是大小端
  5. 操作系统层面 怎么解决多个cpu同时访问同一个区域
  6. 操作系统有几大模块? 说一下你设计操作系统要几个模块。

2、Linux操作系统

  1. CentOS 和 Linux的关系?
  2. 64位和32位的区别?
  3. 用过哪些Linux命令
  4. linux查看cpu和文件目录
  5. top里面,内存那有buffer/cache,知道这是什么吗?
  6. 如何定位IO使用高的程序
  7. chmod 777代表什么意思?
  8. 如果要查看服务器中各个进程CPU的状态用什么命令
  9. linux查看内存指令,修改权限指令,如果权限相关的数字是777,代表什么含义,
  10. 关键字查询怎么查
  11. Awk命令
  12. inux查看一个文件末尾几行的命令(tail)
  13. 怎么查看含有某个关键字的几行(grep),具体怎么写命令
  14. 讲讲如何查看你项目占用的进程,讲讲如何将项目传到服务器上,讲讲如何杀死一个进程。
  15. 给你一个日志文件,里面包含ip、date等字段,如何求出每日的去重后的ip数量
  16. Linux的软连接和硬连接
  17. 虚拟地址和物理地址时怎么转化的?其中用到哪些硬件? 为什么用虚拟地址
  18. swap分区
  19. 硬盘结构,如何工作,最小单位?
  20. 多进程多线程浏览器(比如 Chrome),主控进程,插件进程,GPU进程,每个 tab 一个进程,tab 进程内有网络请求线程等;
  21. ls、ps的内部原理,如何操作的,死锁设计的时候如何预防
  22. 线程调度算法,linux采用哪

3、进程与线程

  1. 怎么杀死进程?
  2. 线程,进程区别 ? 多线程与多进程区别,使用场景,浏览器使用哪个,为什么。
  3. 系统线程数量上限是多少?
  4. 进程和线程的区别是什么? 线程切换的时候保存哪些状态
  5. 解释一下LINUX下线程,GDI类。
  6. Linux线程模型是什么样的,或者说Linux线程和进程的关联
  7. 怎么查看某个进程中的线程?
  8. 协程? 协程有哪些优势?把所有多线程都替换成协程实现可以嘛?
  9. 进程间通信方式?
  10. 信号量通信中,进程是如何获取到信号量的
  11. 进程分配了哪些资源
  12. 进程调度策略
  13. 守护进程、僵尸进程、孤儿进程,如何创建守护进程;
  14. 讲讲信号和信号量,它们有什么区别

4、输入输出系统

  1. socket编程,BIO,NIO,epoll?

5、存储器管理

  1. 什么是页式存储?
  2. 操作系统里的内存碎片你怎么理解,有什么解决办法?
  3. 知道哪些页面置换算法?
  4. 磁盘调度算法?
  5. 虚拟内存的实现原理 ? 虚拟内存怎么管理 ?
  6. 除了top怎么看内存使用量?
  7. 文件读写授权

6、处理机调度与死锁

  1. 什么情况下会发生死锁,解决策略有哪些?
  2. 系统CPU比较高是什么原因?
  3. 系统如何提高并发性?
  4. 操作系统层面,CPU调用线程完成任务的过程,
  5. Linux下的中断
  6. 死锁和死循环都会导致程序hung住,怎么判断是死锁还是死循环:
  7. Linux CPU的轮询方式

7、文件相关操作

  1. linux熟悉吗?怎么查看文件的前10行,怎么查看文件的后10行?
  2. 怎么对文件内容排序
  3. linux查看文件和目录的磁盘占有率、查看端口被哪个进程占用
  4. 一个文件如何组织存放到硬盘上
  5. 怎么看这个文件夹下所有文件的大小
  6. Linux 中能否删除一个正在运行的文件
  7. 给你一个文件里面有好几列,怎么用命令统计某一列的和
  8. 如果rm了正在读写的文件,会发生什么?
  9. mv一个文件到另一个地方,是真实的把整个文件移动过去吗?
  10. 怎么看打开这个文件的是哪个进程?

七、算法与数据结构

1、哈希

  1. hashset存的数是有序的吗?
  2. Object作为HashMap的key的话,对Object有什么要求吗? hashCode 怎么对应桶的位置?
  3. 一致性哈希算法
  4. HashMap碰撞的概率? 1000W个数put碰撞的概率??
  5. Java中的HashMap的工作原理是什么?
  6. hashCode()和equals()方法的重要性体现在什么地方?
  7. 解决hash冲突有哪些办法
  8. 讲下你了解的Hash函数有哪些?

2、树

  1. 说一下B+树和B-树?
  2. 怎么求一个二叉树的深度?手撕代码?
  3. 算法题:二叉树层序遍历,进一步提问:要求每层打印出一个换行符
  4. 二叉树任意两个节点之间路径的最大长度
  5. 如何实现二叉树的深度?
  6. 如何打印二叉树每层的节点?
  7. TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
  8. 红黑树平衡怎么调整
  9. B树什么时候的高度会变高;

3、遍历

  1. 编程题:写一个函数,找到一个文件夹下所有文件,包括子文件夹
  2. 二叉树 Z 字型遍历

4、链表

  1. 反转单链表
  2. 随机链表的复制
  3. 链表-奇数位升序偶数位降序-让链表变成升序
  4. bucket如果用链表存储,它的缺点是什么?
  5. 如何判断链表检测环

5、数组

  1. 寻找一数组中前K个最大的数
  2. 求一个数组中连续子向量的最大和
  3. 找出数组中和为S的一对组合,找出一组就行
  4. 一个数组,除一个元素外其它都是两两相等,求那个元素?
  5. 算法题:将一个二维数组顺时针旋转90度,说一下思路。
  6. 二分查询的时间复杂度是多少,为什么是logn

6、排序

  1. 排序算法知道哪些,时间复杂度是多少,哪些是稳定的 , 不稳定会有什么问题?解释一下快排?
  2. 如何得到一个数据流中的中位数?
  3. 堆排序的原理是什么? 大顶堆转换小顶堆
  4. 归并排序的原理是什么?
  5. 排序都有哪几种方法?请列举出来。
  6. 如何用java写一个冒泡排序?
  7. 口述topK
  8. 100个数字,100万个数字,100亿个数字,分别给出排序的方法。
  9. 讲一下最大堆和最小堆

7、堆与栈

  1. 堆与栈的不同是什么?
  2. heap和stack有什么区别。
  3. 解释内存中的栈(stack)、堆(heap)和静态区(static area)的用法。

8、队列

  1. 什么是Java优先级队列(Priority Queue)?

9、字符串

  1. KMP算法

10、图

  1. Dijkstra 算法
  2. 说一下数据结构中的图如何存储

11、高级算法

1、题目:

Design and implement a data structure for Least Frequently Used (LFU) cache. It should support the following operations: get and put.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.

put(key, value) - Set or insert the value if the key is not already present. When the cache reaches its capacity, it should invalidate the least frequently used item before inserting a new item. For the purpose of this problem, when there is a tie (i.e., two or more keys that have the same frequency), the least recently used key would be evicted.

Could you do both operations in O(1) time complexity?

2、id全局唯一且自增,如何实现?

3、如何设计算法压缩一段URL?

4、为什么要设计后缀表达式,有什么好处?

5、LRU算法的实现原理?

如何实现? 有两种方案(LinkedList和Redis) https://zhuanlan.zhihu.com/p/34133067

6、负载均衡算法 负载均衡器Ribbon的实现原理

7、A*算法

8、设计一个不使用链表的缓存淘汰算法

9、负载均衡算法有哪些

10、大O复杂度具体指的是什么?

11、动态规划了解吗,主要是用来解决什么问题?适用于什么场景?动态规划相比递归来说有什么优点。

八、分布式相关

1、分布式原理

  1. 缓存的实现原理,设计缓存要注意
  2. 微服务和单体架构优缺点在哪里?怎么评估一个系统是不是需要做微服务化?
  3. 了解的中间件;
  4. 微服务架构中,多级链路调用过程,如果部分调用失败,如何让状态回滚
  5. 服务熔断和服务降级有什么区别
  6. 分布式系统需要考虑哪些方面要素
  7. Hystrix 熔断原理
  8. RPC通信框架的概念。RPC通信的流程。rpc架构了解吗怎么实现?RPC框架的核心?
  9. 如果你自己设计一个rpc框架,怎么设计?
  10. 怎么热拷贝,给一个思路,比如一个ES集群在建立索引,我们怎么样在它还在持续建立索引的情况下,将当时的状态给dump下来
  11. 如果缓存雪崩,大量请求直接打到数据库怎么办?
  12. 服务限流,服务隔离。
  13. 当库存预加载以后,库存再次发生变化该如何解决?
  14. 实现限流怎么实现?若让你设计一个限流器,你会怎么设计(令牌桶算法的思路)
  15. 2PC 和 3PC
  16. raft协议介绍,raft的日志需要有什么特点 , 网络分区怎么解决,raft一致性如何实现
  17. etcd分布式锁如何实现
  18. 分布式kv元数据管理用什么结构
  19. Paxos和ZAB协议
  20. 分布式集群中如何保证线程安全?
  21. Twitter雪花算法了解一下

2、系统设计

  1. 如何画项目的架构、模块、技术图
  2. 如何设计存储海量数据的存储系统
  3. 设计一个系统,每天有100亿条数据,需要在后台做实时展示和查找。
  4. 我当时回答的大体思路是nginx负载均衡,消息队列存储,多线程读取,批量插入,数据库分库分表。面试官根据我的回答又衍生出了很多问题,如消息队列存满了怎么办?(也就是消费跟不上生产)批量插入时某一条失败了有什么影响?怎么解决?分库分表应该怎么分?怎么解决数据迁移的问题?
  5. 讲一下秒杀系统的整个架构? 秒杀系统如何解决超卖问题 ?
  6. 分布式秒杀如果不用mq怎么做?不使用缓存设计一个秒杀系统如何优化? 秒杀如何在手机端限流
  7. 设计一个关注系统,一个用户可以关注很多个用户,也可以查看自己关注的人的信息,数据怎么存储,数据库怎么设计,然后设计一套API,包含两个功能:关注某个用户,查看关注的用户的信息
  8. 场景设计题:如果让你设计类似于滴滴打车的软件,只考虑后端,那么你会设计哪些模块?
  9. 设计题:有一个服务器专门接收大量请求,怎么设计?
  10. 如果搜索做的很大,需要分布式,你会怎么设计?
  11. 做项目,高并发遇到的瓶颈,除了数据库方面,能从其他方面考虑吗?
  12. 怎么削峰?接口压测QPS只有2000,怎么应对5000QPS的访问量(我回答的消息队列,面试官没啥表情) 如果消息队列也超过阈值了呢?

3、场景题

  1. 一张商品表的主键是int类型(大概21亿),并且这张表还和其他的很多表有关联,现在表中的id已经到了20亿。 问: 假如快到双11了,商品量暴涨,表里可能存不下了,给一个方法,躲过这个难关???
  2. 多租户场景下的单个数据库资源占用过多怎么解决?
  3. 如果我们有 1000 个服务,在双 11 要关闭部分业务,这个怎么更快关闭。(回答MQ 说不行,最后没辙说注册中心方案)如果要关闭1000个服务,结果有 5 个消息丢失了怎么办?
  4. 文件并发访问量很高的时候,怎么保证可用性

九、补充

1、Git , Maven等工具使用

  1. maven版本控制
  2. Maven怎么解决包冲突的
  3. 使用git时有哪些情况会push失败
  4. Git的基础命令
  5. Git相关,工作区和暂存区?git push?
  6. Git中 rebase 和 merge 有什么区别
  7. Git相关,如果现在要切换到其他分支处理bug,保存当前的工作,用什么命令
  8. git的使用,怎么避免代码冲突,怎么回退代码,问我有多少种回退机制

2、知识扩展

  1. 对数据压缩方面有了解吗?
  2. 大概讲一下搜索引擎原理
  3. 比如云计算有哪些服务和应用场景
  4. NP 问题
  5. 拜占庭问题
  6. SSO原理,应用场景
  7. 介绍一下mapreduce
  8. 讲讲同构和同态

3、场景题

5、情景题:如果一个外卖配送单子要发布,现在有200个骑手都想要接这一单,如何保证只有一个骑手接到单子?

6、场景题:美团首页每天会从10000个商家里面推荐50个商家置顶,每个商家有一个权值,你如何来推荐?第二天怎么更新推荐的商家?

可以借鉴下stackoverflow,视频网站等等的推荐算法。

7、场景题:微信抢红包问题

悲观锁,乐观锁,存储过程放在mysql数据库中。

8、场景题:1000个任务,分给10个人做,你怎么分配,先在纸上写个最简单的版本,然后优化。

全局队列,把1000任务放在一个队列里面,然后每个人都是取,完成任务。

分为10个队列,每个人分别到自己对应的队列中去取务。

9、场景题:保证发送消息的有序性,消息处理的有序性。

10、如何把一个文件快速下发到100w个服务器

11、给每个组分配不同的IP段,怎么设计一种结构使的快速得知IP是哪个组的?

12、10亿个数,找出最大的10个。

建议一个大小为10的小根堆。

13、有几台机器存储着几亿淘宝搜索日志,你只有一台2g的电脑,怎么选出搜索热度最高的十个搜索关键词?

14、如果有100g的文件要排序(数字),内存只有1g,该怎样排序

先划分成多个小文件,送进内存排序,然后再采用多路归并排序。

15、有十万个单词,找出重复次数最高十个?

16、对一个超大文件怎么搜索最快

17、有20亿个订单,其中一个缺失了,如何找到他 限制内存1G

18、网络藏书馆中有1000亿本英文书,每本书都有英文名字和出版日期,我想要计算出每个英文单词总共出现的次数。需要关注以下几个功能:以多线程方式来处理这个功能,在处理过程中我随时需要知道处理的进度和当前的结果,防止并发问题

19、设计一个类似“微信附近的人”的功能(考虑海量用户的场景,数据存储方式,使用什么数据结构,使用什么算法,时间复杂度和空间复杂度分别是多少)

20、美团点评发布团购订单,商家的操作有三个操作:新增一个操作,删除一个操作,界面显示(展示按照添加的顺序),任意两个商品信息互换。从最简单的设计一个如何来实现排序的功能(添加和互换) 数据频繁变更不适合建立索引,如何优化不考虑数据库,在内存中如何来实现这样一个feature?

21、海量数据迅速查询包含关键字的所有文章

22、有一个场景,现在一张表有几十万的数据,然后10个线程,对它并发计算,然后计算完了之后通知,该怎么设计?

23、一亿个文件需要处理,把处理结果汇总到一个文件,说说你的思路

24、百度的40亿次请求(关键词搜索),如何找到搜索次数top100万的关键字?如果已经有了这个100万个关键字,如何做关键词的联想推荐(输入中,推荐框提示中国,中华等)?百万条电话(假设7位)如何返回一个不含重复号码的清单?(想法是可反推的哈希方法,如何做到呢)

25、显示网站的用户在线数的解决思路

26、设计一个负载均衡算法,实现每个用户随机访问不同服务器,不能重复

27、设计一个系统,限制单个用户每5分钟只能访问100次接口

28、一道大数据量的题目,A文件有3T,里面放的是uid+uname,B文件2T,里面放的是uid+unage,找出相同的uid并写成uid+uname+uage的样子,限制内存2G

29、feed流用拉还是用推,这两种方式有什么特点?如果你设计微博,用户关注动态用推还是用拉?

30、求抖音小视频每日点击量最高的10个(Hash + 最小堆)

31、一个文件有1亿行,怎么定位到1000行最快

4、项目的实际问题

  1. 如果线上故障宕机,如何复现
  2. 项目怎么部署到服务器上的?怎么登录linux服务器?如果将项目部署到两台服务器中,需要考虑哪些因素?
  3. 做接口优化的思路是怎么样的?答:(用阿尔萨斯查看)。阿尔萨斯(iarthas)原理是怎么样的?
  4. 聊聊项目中进行的性能优化,怎么调优的。
  5. 会进行软件性能的考量吗?比如模块测试。有没有做过单元测试,不能连数据库, 你怎么做的单元测试。有没有进行过压力测试?如何进行压力测试?给一个测试场景(上传照片),分析压测的方向
  6. TDD的推行情况 , 如何保证开发能够推行TDD
  7. 前台,中台,具体的区别,中台是什么
  8. 客户抱怨你们网站太慢,怎么排查问题?
  9. 一个java程序halt住了,如何检查

4、智力题

  1. 有两个鸡蛋,如何最快的试出100层楼中刚好那一层扔下鸡蛋会碎
  2. 给你10只实验小鼠,用7天的时间检验999个瓶子中带有一瓶毒药的瓶子是哪一瓶,小鼠喝了毒药7天后才会死亡,如何实现?
  3. 时针和分针在十二点时刻是重合的,再过12小时之后,在这个过程中,分别在哪些时刻是重合的。
  4. n条直线最多把平面分割成几部分? n个平面最多把空间分割成几部分?

整理不易,希望觉得对自己有帮助的朋友可以点赞转发下,同时所有的答案都整理到一个文件里面,需要的朋友可以关注小编+点赞文章+点这里,免费获取文中题目中的答案和资料。

部分资料图片:

苦战金九银十:580道最全面的BATJ大厂Java面试真题分享

资料获取方式:

关注小编+点赞文章+点这里

猜你喜欢

转载自blog.csdn.net/lyl5454/article/details/114140516