社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
https://www.cnblogs.com/zhuawang/p/5213192.html
问:http和https有什么区别?
答:https是在http的基础上加了一层SSL或者TLS协议,提供了加解密的机制;http的端口号是80,https的端口号是443
问:https在三次握手的时候与http的区别?
答:https比http多了一步SSL的握手协议,具体的步骤如下:
(1)客户端浏览器向服务器发送SSL/TLS协议的版本号,加密算法的种类,产生的随机数,以及其它需要的各种信息;
(2)服务器选择一种客户端支持的价码算法和Hash算法,并且把自己的证书信息(网站地址,加密公钥,证书颁发机构)发给客户端;
(3)浏览器获取到证书信息后,进行对其验证,验证不通过会显示证书不受信;
(4)然后,客户端浏览器生成一个随机数并且用服务器传来的公钥加密,再用Hash算法计算握手消息,发生到服务端;
(5)服务端接到握手消息后用自己的私钥解密,并用散列算法验证,这样双方都有了此次通信的密钥;
(6)服务器再使用密钥加密一段握手消息,返回给客户端;
(7)浏览器用密钥解密,并用散列算法验证,确认算法与密钥。
问:web容器中的servlet的工作机制是什么?
答:web容器有多个一般会有多个servlet对象,servlet有著名的生命周期,实例化--初始化--处理请求--销毁;其中实例化由web容器完成,其它三个由servlet完成,init,service,destroy方法;初始化只需读取配置文件,处理请求一般是获取和返回,就是servletRequset和servletResponse,最后可以调用destory销毁servlet。
问:tomcat的启动脚本是startup.bat吗?
答:不是,startup.bat是为了寻找catalina.bat文件
问:一次完整的tomcat请求是什么逻辑?
答:
(1)Tomcat启动后,Connector组件的接受器(Acceptior)将会监听客户端的Socket
(2)与Socket连接后,将连接交给线程池Executor
(3)Http11Processor组件读取客户端的消息报文,解析HTTP的请求行,请求头,请求体;并且解析完的信息封装成Request对象,之后代码可以根据Request对象获取到信息
(4)Mapper组件是分析HTTP的URL属性和请求头Host的属性匹配哪个Host容器、哪个Context容器、哪个Wrapper容器来处理请求,简单说就是配置该请求对应的是哪一个servlet(一步步找到属于自己的servlet)
(5)CoyoteAdaptor负责连接Connector组件和Engine容器(承上启下的作用)
(6)接下来的Engine、Host、Context、Wrappe依次执行相应的阀门,Wrapper对应的是Servlet
(7)返回结果给客户端
问:线程池的原理是什么?
答:线程池里面的线程也不是一直在那待着不动的,在线程池里的线程一旦调用start方法就开始执行任务了,关键就是这个任务是什么,才能保持它一直在做类似于等待被调用的状态,不然会被GC回收;
线程池的三要素,线程数量、线程数组、任务队列,其中最关键的就是任务队列,所以刚才说的线程池中的所有线程start之后就是在不断检测任务队列里有没有任务,一旦有,线程就抢着去执行
问:tomcat接受请求的两种模式是BIO模式和NIO模式,有什么区别?
答:BIO先消耗线程池中的线程数,再去创建新的线程,直到消耗到线程池的最大线程数,再有请求的话会放在一个队列里面,如果超过队列大小就直接拒绝请求,客户端报“connection refused”
NIO所以的一切客户端请求由一个接收线程接收,将具体读写操作交给线程池,不会像BIO直接去访问线程池
问:提到Tomcat的性能,会考虑到并发,Tomcat有控制流量的流量控制器,它是怎么实现的?
答:AQS并发框架
问:两种模式的默认并发数是多少?
答:BIO是200,NIO是1000,这个数字只是最大接收的客户端连接;进来之后还是会放在接收队列的,系统的接收队列的默认长度是100,当然上面的三个数字都是可配置的
问:tomcat的连接时,会产生连接对象,tomcat会频繁地出现生成对象和销毁对象的情况;为了提高性能应该怎么去优化呢?
答:这种是比较常见的优化方式:将即将被销毁的对象放到一个队列里面,下次用这个对象的时候优先去队列里去找,如果找不到再去生成这个对象。
问:war包部署的过程?
答:(1)尝试读取war包里面的/META-INF/context.xml文件
(2)通过Digester框架解析context.xml文件,根据配置属性生成Context对象
(3)通过反射生成ContextConfig,并作为监听器添加到Context对象
(4)设置Context对象的其他属性
(5)调用Host的addChild方法将Context对象添加到Host中,此时Context会开始启动
(6)将Context对象中的WatchedResource添加到重加载监听列表中,tomcat会有专门的后台线程去检测这些变动,如果有改动就去更改Context内容
问:在tomcat,servlet容器是指哪一个容器
答:在context容器里有若干个Wrapper容器,属于tomcat最小的容器,Wrapper容器就是servlet
问:websocket的请求原理?
答:
问:什么是双亲委派模式?
答:如果一个类需要被加载,类加载不会立马自己去加载,而是委派给父类去加载,父类再往上委派,直到最上层;其中一层父类表示没办法加载了,子类加载器才会自己加载;这种模式保证了所以类都是同一版本的,提高了安全性
问:tomcat有自己的类加载器吗?
有:叫common类加载器
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!