1. Java事件机制包括哪三个部分?分别介绍。
      1. 事件源:触发事件的现场,工作内容包括:监听器注册,事件触发,事件参数构建,发布事件。
      2. 事件对象:事件现场和事件监听器之间的信息传递
      3. 事件监听器:根据事件对象传递的信息,进行事件的处理
      4. 这种方式和直接调用有什么区别?本质上没区别,设计模式都是这样。
        1. 代码复用:同一个事件源多种处理,多个事件源同一种处理,这两种方式都可以做到代码复用。
        2. 开闭原则:需要添加和删除事件的下逻辑,不用在事件源进行代码变更,只需要新增和取消注册监听器
        3. 方便异步化:因为传参和处理器已经抽象好了,直接通过消息组件发送+接收即可。
    2. 为什么要使用线程池?线程池有什么用?
      1. 线程池是池化技术的应用之一,此外还有链接池,池化技术的优点是:一是减少被池化对象创建和销毁成本,二是控制被池化元素的创建数量和机制(fixed、cached、single)。
      2. 问题来了?创建和销毁线程为什么开销很大?
        1. 需要为线程分配内存
        2. 需要调用syscall
        3. 需要初始化
        4. 另外一点,线程资源创建越多,会导致上下文切换越频繁。
    3. 说说几种常见的线程池及使用场景。
      1. fixed:指定大小,不希望在线程池在初始化之后再出现线程创建和销毁的动作,比如tomcat线程池。
      2. cache:根据任务流入量的情况,线程池动态在coreSize和maxSize之间变更,主要是为了最大程度利用cpu的性能。
      3. single:单线程执行,适用于少量且简单的任务,且在处理任务时可以天然保证线程安全。
      4. schedule:定时执行,如果业务有延时或定时执行的需求,且又不打算引入quartz组件或调度中间件的情况下,可以使用该类型。
    4. 线程池中的几种重要的参数及流程说明。
      1. coreSize:核心大小
      2. maxSize:最大大小
      3. keepAliveTime:存活时间,线程在空闲状态下的持续时间。
      4. workQueue:任务队列,线程池会从该队列中获取任务执行。
        1. 有界队列:可控任务量,如果超过大小,会配合rejectHandler进行处理。
        2. 无界队列:可存任务量取决于JVM堆内存大小,也就是说可能出现OOME,生产环境中需要格外注意。
      5. threadFactory:生成线程工厂,没什么特别的,就是new Thread,主要是要注意设置个可读性高的name
      6. rejectHandler:任务队列过长时,如何处理继续进来的任务
        1. 丢弃当前继续进来的任务,业务中使用时应该注意任务丢弃造成的影响。
        2. 丢弃最老的任务,相当于LRU,业务中使用时应该注意任务丢弃造成的影响。
        3. 抛异常,业务中使用时应该注意对该异常的监控,并将触发异常的任务信息日志打印出来,用于订正
        4. 让把任务丢给线程池的线程本身执行该任务,这样可以防止任务继续进入。
    5. 什么是反射机制?说说反射机制的作用?反射机制会不会有性能问题?
      1. 在运行时动态获取类信息、调用类方法的能力称为反射机制。
      2. 最常见的应用,注解、jdk动态代理InvocationHandler
        1. 根据getAnnotation获取类、方法、字段的注解类,根据注解类的配置执行相应代码增强或属性注入。
        2. 根据Proxy.newInstance+InvocationHandler实现动态生成代理类。
      3. 相比正常调用,反射多了一些安全检查逻辑,但反射使得JIT编译器无法有效做优化是反射慢的主要原因。
    6. 你怎么理解http协议?说说http协议的工作流程?
      1. 首先这是一个、一份、一种协议,协议是通信双方对通信内容格式的约定。
      2. 组成:method + uri + version + http + \n + (header+\n)*n + \n + body
    7. http有哪些请求提交方式?get和post有什么区别?
      1. GET:内容url可见,内容长度受限于url长度,一般用于检索数据。
      2. POST:内容url不可见,存放body中,内容长度不限,一般用于修改数据。
      3. PUT:基本不用
      4. DELETE:基本不用
    8. http中的200,302,403,404,500,503都代表什么状态?
      1. 200:Success
      2. 302:Found
      3. 403:Forbidden
      4. 404:Not Found
      5. 500:Server Error
      6. 502:Bad Getway
      7. 503:Service Unabailable
    9. 你怎么理解cookie和session,有哪些不同点?
      1. http是无状态协议,任意两次之间的通信没有任何关联。如果B操作想要基于A操作的结果成功而进行,那么需要某些方式来进行数据通信或数据共享。最常用的场景比如登陆状态保持、购物车功能等等。
      2. cookie和session分别是两种状态保持的手段,cookie是客户端状态保持,session是服务端状态保持。
      3. cookie通过在浏览器中保存A操作成功后写入的结果,运行机制是:在B请求时将该结果通过header中的cookie字段传入服务端,比如A操作是登录,登录成功后,在cookie添加cookie:loginStatus=true;服务端对所有请求都校验cookie中的这个字段判断登录状态。购物车同理,比如在cookie添加cookie:shopCart=good1&good2;缺点是,cookie存在浏览器中可以被用户篡改,非常不安全。
      4. session通过在服务端将用户的状态信息进行保存,可保存在各种地方,比如是单机应用可以保存在JVM内存中,集群应用可以保存在缓存中间件如redis、memcache中,状态数据的特点是非结构化、容忍丢失、定时失效等,所以上述三种kv介质进行存储是非常适合的。运行机制是:A请求成功后的数据存入介质中,并拿到key,同时将key设置到客户端cookie的sessionId中,这样每次客户端发起请求,先通过cookie拿到sessionId再通过sessionId拿到状态信息。这种方式优点在于安全,因为sessionId通常一串无意义的uuid,即使用户进行改动也最多拿不到session获取不到状态。这种方式的话sessionId类似于一个回家的钥匙,所以它能正确返回就很重要了,因为浏览器存在禁用cookie的功能,如果碰到这种情况,可以通过url重写技术将sessionId写入url中返回。
      5. 上述中的session+登录场景,因为是web应用最常用的功能之一,其中涉及到的cookie解析和写入、session存储和获取,未登录重定向等机制,目前已有非常成熟的框架来支持,比如apache-shiro和spring-security,开发人员只需要简单扩展,比如session存储和获取,状态信息对象定义等,即可实现登录功能。
    10. 什么是https,说说https的工作原理?
      1. 在http协议的基础上加了一层安全层,通过非对称加密+CA认证保证不被中间人攻击。
    11. nginx的作用?
      1. 静态页面缓存,如果页面不需要后端的实时数据渲染,比如hao123网站,可以通过web服务器的缓存直接返回页面,减少到服务器的消耗,更快响应请求。
      2. web缓存、负载均衡、网关
    12. 什么是java虚拟机,我为什么要使用?
      1. jvm是java代码运行的一套环境。
    13. 22、说说java虚拟机的生命周期及体系结构。

    14. 23、说一说java内存区域。
    15. 24、什么是分布式系统?
    16. 25、分布式系统你会考虑哪些方面?
    17. 26、讲一讲tcp协议的三次握手和四次握手流程。
    18. 27、为什么tcp建立连接协议是三次握手,而关闭连接确是四次握手呢?为什么不能用两次握手进行连接?
    19. 28、为什么tcp TIME-WAIT状态还需要等2MSL后才能返回到CLOSED状态?
    20. 29、什么是DoS、DDoS、DRDos攻击?如何防御?
    21. 30、描述一下Java异常层次结构。
    22. 31、什么是检查异常,不受检查异常,运行时异常?并分别举例说明。
    23. 32、Finally块一定会执行吗?
    24. 33、正常情况下,当在try块或catch块中遇到return语句时,finally语句在方法返回之前还是之后被执行?
    25. 34、Try、catch、finally语句块的执行顺序。
    26. 35、Java虚拟机中,数据类型可以分为哪几类?
    27. 36、怎么理解栈、堆?堆中存在什么?栈中存在什么?
    28. 37、为什么要把堆和栈区分出来呢?栈中不是也可以存储数据吗?
    29. 38、在java中,什么是栈的起始点,同时也是程序的起始点?
    30. 39、为什么不把基本类型放堆中呢?
    31. 40、Java中的参数传递时传值呢?还是传引用?
    32. 41、Java中有没有指针的概念?
    33. 42、Java中,栈的大小通过什么参数来设置?
    34. 43、一个空Object对象的占多大空间?
    35. 44、对象引用类型分为那几类?
    36. 45、讲一讲垃圾回收算法。
    37. 46、如何解决内存碎片的问题?
    38. 47、如何解决同时存在的对象创建和对象回收问题?
    39. 48、讲一讲内存分代及生命周期。
    40. 49、什么情况下触发垃圾回收?
    41. 50、如何选择合适的垃圾收集算法?
    42. 51、JVM中最大堆大小有没有限制?
    43. 52、堆大小通过什么参数设置?
    44. 53、JVM有哪三种垃圾回收器?
    45. 54、吞吐量优先选择什么垃圾回收器?响应时间优先呢?
    46. 55、如何进行JVM调优?有哪些方法?
    47. 56、如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决?
    48. 57、从分布式系统部署角度考虑,分哪几层?
    49. 58、如何解决业务层的数据访问问题?
    50. 59、为了解决数据库服务器的负担。如何做数据库的分布?
    51. 60、什么是著名的拜占庭将军问题?
    52. 61、为什么说tcp/IP协议是不可靠的?
    53. 62、讲讲CAP理念。
    54. 63、怎么理解强一致性、单调一致性和最终一致性?
    55. 64、分布式系统设计你会考虑哪些策略?
    56. 65、最常见的数据分布式是什么?
    57. 66、谈一谈一致性哈希算法。
    58. 67、Paxos是什么?
    59. 68、什么是lease机制
    60. 69、如何理解选主算法?
    61. 70、OSI有哪七层模型?TCP/IP是哪四层模型。
    62. 71、Fabric在哪里做的共识,如何解决双花问题和节点伪造问题的,比如说A给B转账5元,给C同志1元劳务费,但是该节点作弊了怎么办?
    63. 72、拜占庭算法的理解?
    64. 73、TCP协议拥塞是怎么解决的?
    65. 74、JAVA虚拟机的理解?
    66. 75、JAVA线程池的参数都有什么?
    67. 76、有序链表和二叉搜索树在查找和插入上时间复杂度的区别?了解过红黑树么,在插入上有什么优化?
    68. 77、介绍下你觉得你做的比较好的项目,解决了哪些技术难点?
    69. 78、一个数组中有正数和负数,找出来和最大的子数组
    70. 79、16瓶水中有1瓶水有毒,小白鼠喝了有毒的水1个小时后会死,一个小白鼠可以喝多瓶水,一瓶水也可以被多个小白鼠喝,现在给1个小时时间,最少需要几只小白鼠能够判断出来14瓶水是无毒的?
    71. 80、java虚拟机垃圾回收机制
    72. 81、事务隔离级别有什么?
    73. 82、concurrentHashMap实现原理?原来使用的什么锁?CAS具体如何实现的?
    74. 83、Fabric的共识机制
    75. 84、kafka不是共识机制么?
    76. 85、一个文本有很多单词,找出来其中词频最大的k个单词?如果内存读一次装不下怎么办?
    77. 86、HashMap扩容是怎么实现的?多线程同时put会存在什么问题?
    78. 87、单例怎么写,懒汉和饿汉哪个更适合多线程?
    79. 88、线程池的参数都有什么?
    80. 89、最近在看什么书?
    81. 90、比特币的共识机制?
    82. 91、项目中的监控:那个监控指标常见的有哪些?
    83. 92、微服务涉及到的技术以及需要注意的问题有哪些?
    84. 93、注册中心你了解了哪些?
    85. 94、consul 的可靠性你了解吗?
    86. 95、consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过?
    87. 96、项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理
    88. 97、Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别?
    89. 98、Spring Cloud 有了解多少?
    90. 99、Spring Bean 的生命周期
    91. 100、HashMap 和 hashTable 区别?
    92. 101、Object 的 hashcode 方法重写了,equals 方法要不要改?
    93. 102、Hashmap 线程不安全的出现场景
    94. 103、线上服务 CPU 很高该怎么做?有哪些措施可以找到问题
    95. 104、聊实验室的方向和做的项目
    96. 105、说一件你最得意的事儿,最失败的事儿和最出格的事儿
    97. 106、说一件你一直在坚持的事情
    98. 107、有几百亿个数字找出其中的中位数
    99. 108、JDK 中有哪几个线程池?
    100. 109、SQL 优化的常见方法有哪些
    101. 110、SQL 索引的顺序,字段的顺序
    102. 111、查看 SQL 是不是使用了索引?(有什么工具)
    103. 112、TCP 和 UDP 的区别?TCP 数据传输过程中怎么做到可靠的?
    104. 113、说下你知道的排序算法吧
    105. 114、常用的负载均衡,该怎么用,你能说下吗?
    106. 115、你有什么问题想问我的吗?
    107. 116、class存在哪儿,jvm结构
    108. 117、stringbuffer和stringbuilder的区别
    109. 118、Object 类中的方法
    110. 119、hashcode 和 equals 方法常用地方
    111. 120、hashmap put 方法存放的时候怎么判断是否是重复的
    112. 121、Object toString 方法常用的地方,为什么要重写该方法
    113. 122、Java 中有哪些线程安全的 Map?
    114. 123、Concurrenthashmap 是怎么做到线程安全的?
    115. 124、HashTable 你了解过吗?
    116. 125、如何保证线程安全问题?
    117. 126、volatile 的原子性问题?为什么 i++ 这种不支持原子性?从计算机原理的设计来讲下不能保证原子性的原因