Q&A

1、Http长连接和Keep-Alive以及Tcp的Keepalive

TCP的keep alive是检查当前TCP连接是否活着;HTTP的Keep-alive是要让一个TCP连接活久点。它们是不同层次的概念。

https://blog.csdn.net/weixin_37672169/article/details/80283935 

2、HttpClient出现大量time_wait问题解决

https://www.cnblogs.com/kaleidoscope/p/9876903.html

3、CMS(标记-清除算法)执行步骤

· 初始标记(STW initial mark)

在这个阶段,需要虚拟机停顿正在执行的应用线程,官方的叫法STW(Stop Tow World)。这个过程从根对象扫描直接关联的对象,并作标记。这个过程会很快的完成。

· 并发标记(Concurrent marking)
这个阶段紧随初始标记阶段,在“初始标记”的基础上继续向下追溯标记。注意这里是并发标记,表示用户线程可以和GC线程一起并发执行,这个阶段不会暂停用户的线程哦。

· 并发预清理(Concurrent precleaning)
这个阶段依旧是并发的,JVM查找正在执行“并发标记”阶段时候进入老年代的对象(可能这时会有对象从新生代晋升到老年代,或被分配到老年代)。通过重新扫描,减少在一个阶段“重新标记”的工作,因为下一阶段会STW。

· 重新标记(STW remark)
这个阶段会再次暂停正在执行的应用线程,重新从根对象开始查找并标记并发阶段遗漏的对象(在并发标记阶段结束后对象状态的更新导致),并处理对象关联。这一次耗时会比“初始标记”更长,并且这个阶段可以并行标记。

· 并发清理(Concurrent sweeping)
这个阶段是并发的,应用线程和GC清除线程可以一起并发执行。

· 并发重置(Concurrent reset)
这个阶段依旧是并发的,重置CMS收集器的数据结构,等待下一次垃圾回收。

4、Tomcat 组件(filter listener servlet)执行顺序

web.xml 的加载顺序是:context-param -> listener -> filter -> servlet

<web-app>    
<display-name></display-name>定义了WEB应用的名字    
<description></description> 声明WEB应用的描述信息    

<context-param></context-param> context-param元素声明应用范围内的初始化参数。    
<filter></filter> 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。    
<filter-mapping></filter-mapping> 一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。    
<listener></listener>servlet API的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。    
                     Listener元素指出事件监听程序类。    
<servlet></servlet> 在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。    
<servlet-mapping></servlet-mapping> 服务器一般为servlet提供一个缺省的URL:http://host/webAppPrefix/servlet/ServletName。    
              但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时,使用servlet-mapping元素。    

<session-config></session-config> 如果某个会话在一定时间内未被访问,服务器可以抛弃它以节省内存。    
          可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。    

<mime-mapping></mime-mapping>如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。    
<welcome-file-list></welcome-file-list> 指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。    
<error-page></error-page> 在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。    
<taglib></taglib> 对标记库描述符文件(Tag Libraryu Descriptor file)指定别名。此功能使你能够更改TLD文件的位置,    
                  而不用编辑使用这些文件的JSP页面。    
<resource-env-ref></resource-env-ref>声明与资源相关的一个管理对象。    
<resource-ref></resource-ref> 声明一个资源工厂使用的外部资源。    
<security-constraint></security-constraint> 制定应该保护的URL。它与login-config元素联合使用    
<login-config></login-config> 指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。    
<security-role></security-role>给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素    
                   的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。    
<env-entry></env-entry>声明Web应用的环境项。    
<ejb-ref></ejb-ref>声明一个EJB的主目录的引用。    
< ejb-local-ref></ ejb-local-ref>声明一个EJB的本地主目录的应用。    
</web-app>    

5、分布式锁实现方式

6、Netty 内部组件

Channel、EventLoop和ChannelFuture

7、MySQL组合索引A+B+C,B或者AC是否走索引?

联合索引又叫复合索引。对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分。例如索引是key index (a,b,c)。 可以支持a | a,b| a,b,c 3种组合进行查找,但不支持 b,c进行查找 .当最左侧字段是常量引用时,索引就十分有效。

8、如何顺序执行三个线程?CyclicBarrier和CountDownLatch区别

9、ConcurrentHashMap  如何保证线程安全?CAS & Volatile?

10、Volatile 操作数组元素保证原子性?

11、String 对象在线程本地拷贝也有么?为什么?Object对象呢

12、Vector实现

13、synchronized 和  lock区别

14、lock 默认公平锁还是非公平锁?公平锁是如何定义?如何实现

 

14、根据IP地址路由负载均衡属于7层还是4层负载均衡

15、kafka 如何保证消息顺序?保证高可用?

16、分库分表TDDL 数据库事务

17、Java线程未执行完,会被回收么?为什么?

18、倒排索引

19、在MySQL,B-tree和哈希索引区别

20、threadLocal原理

21、cache.get 操作实现,考虑高并发

https://blog.csdn.net/yanyan19880509/article/details/52435135

22、atomic内部CAS和volatile实现线程安全

23、实时JVM缓存设计

24、Kafka日志存储

25、Kafka消息时间复杂度

26、Kafka broker/replica 个数

27、设计模式之策略模式

28、间隙锁、自旋锁

29、常见负载均衡算法

30、虚拟机容器区别

31、MySQL主从复制过程

 

posted @ 2018-10-26 18:21  kaleidoscopic  阅读(311)  评论(0编辑  收藏  举报