整理22.2.16号

1、从浏览器输入一个url发生了什么?

      从输入URL到浏览器显示页面发生了什么 - ABC袁 - 博客园

 2、TCP/IP协议   

       TCP/IP协议_百度百科     

3、TCP/IP  三次握手四次挥手

                                               https://blog.youkuaiyun.com/qzcsu/article/details/72861891

                                               TCP三次握手和四次挥手通俗理解 - jainss - 博客园

                                               理解TCP/IP三次握手与四次挥手的正确姿势 - 吉米乐享驿站 - 博客园

    所谓三次握手(Three-Way Handshake)即建立TCP连接,是指建立一个TCP连接时,需要
客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行
connect来触发。 
    所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要
客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端
任一方执行close来触发。

为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?
    这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK
和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的
FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,
所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文
给对方来表示你同意可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。


为什么建立连接是三次握手,关闭连接却是四次挥手呢?
    建立连接的时候,服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN
放在一个报文里发送给客户端。
    而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,
而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,
再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而
导致多了一次。

4、Tomcat服务器与Http协议

        Tomcat服务器与Http协议_小菜鸟的博客-优快云博客

        HTTP 教程 | 菜鸟教程                HTTP_百度百科

5、 Cookie和Session

       转载文章:    cookie和session的详解与区别 - 测试开发喵 - 博客园

Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE
response.addCookie(cookie);                    // 输出到客户端


Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
cookie.setMaxAge(0);                          // 设置生命周期为0,不能为负数
response.addCookie(cookie);                    // 必须执行这一句


注意:从客户端读取Cookie时,包括maxAge在内的其他属性都是不可读的,也不会被提交。
浏览器提交Cookie时只会提交name与value属性。maxAge属性只被浏览器用来判断Cookie是否过期。
Session对应的类为javax.servlet.http.HttpSession类。每个来访者对应一个Session对象,所有该
客户的状态信息都保存在这个Session对象里。Session对象是在客户端第一次请求服务器的时候创建的。
Session也是一种key-value的属性对,通过getAttribute(String key)和setAttribute(String key,
Object value)方法读写客户状态信息。Servlet里通过request.getSession()方法获取该客户的Session,
例如:
HttpSession session = request.getSession();       // 获取Session对象
session.setAttribute("loginTime", new Date());     // 设置Session中的属性
out.println("登录时间为:" +(Date)session.getAttribute("loginTime"));// 获取Session属性

 cookie和session的区别:

① cookie数据存放在客户的浏览器上,session数据放在服务器上.

       简单的说,当你登录一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上面,客户端每次请求服务器的时候会发送 当前会话的session_id,服务器根据当前session_id判断相应的用户数据标志,以确定用户是否登录,或具有某种权限。

由于数据是存储在服务器 上面,所以你不能伪造,但是如果你能够获取某个登录用户的session_id,用特殊的浏览器伪造该用户的请求也是能够成功的。

session_id是服务器和客户端链接时候随机分配的,一般来说是不会有重复,但如果有大量的并发请求,也不是没有重复的可能性。
Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器生成一个唯一的SessionID,用该SessionID 为标识符来存取服务器端的Session存储空间。而SessionID这一数据则是保存到客户端,用Cookie保存的,用户提交页面时,会将这一 SessionID提交到服务器端,来存取Session数据。这一过程,是不用开发人员干预的。所以一旦客户端禁用Cookie,那么Session也会失效。
② cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。

③ 设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。
④ session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。
⑤ 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。(Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型)

   注意:

      session很容易失效,用户体验很差;

      虽然cookie不安全,但是可以加密 ;

      cookie也分为永久和暂时存在的;

      浏览器 有禁止cookie功能 ,但一般用户都不会设置;

     一定要设置失效时间,要不然浏览器关闭就消失了;

例如:

            记住密码功能就是使用永久cookie写在客户端电脑,下次登录时,自动将cookie信息附加发送给服务端。            application是全局性信息,是所有用户共享的信息,如可以记录有多少用户现在登录过本网站,并把该信息展示个所有用户。

 两者最大的区别在于生存周期,一个是IE启动到IE关闭.(浏览器页面一关 ,session就消失了),一个是预先设置的生存周期,或永久的保存于本地的文件。(cookie)

Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪。Cookie是完全保持在客户端的如:IE firefox 当客户端禁止cookie时将不能再使用。

6、 mybatis一级缓存和二级缓存

Mybatis官网 :http://mybatis.org/mybatis-3    进入官网后,左侧菜单Mapper XML Files→cache介绍了Mybatis的缓存策略,默认使用LRU算法。一级缓存不共享,没有线程安全问题。

MyBatis-一级缓存与二级缓存_杨晓尚-优快云博客_mybatis一级缓存和二级缓存

Mybatis的一级缓存和二级缓存机制原理和区别 - 元小疯 - 博客园

7、RabbitMQ消息队列

 8、ZooKeeper、Eureka、Consul 、Nacos对比

微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比_琦彦-优快云博客_zookeeper和nacos

微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比

9、缓存穿透、缓存击穿、缓存雪崩

     缓存穿透、缓存击穿、缓存雪崩区别和解决方案_kongtiao5的专栏-优快云博客_缓存击穿

     REDIS缓存穿透,缓存击穿,缓存雪崩原因+解决方案 - 大码哥 - 博客园

     缓存穿透:                                 (回忆解决方案)

     缓存击穿指并发查同一条数据;(回忆解决方案)

     缓存雪崩是不同数据都过期了,很多数据都查不到从而查数据库。(回忆解决方案)

10、百度搜 java LinkedHashMap lru 

  10-1   LinkedHashMap的底层原理 

  10-2   使用linkedhashmap来实现LRU缓存    Java集合详解5:深入理解LinkedHashMap和LRU缓存_程序员黄小斜-优快云博客_linkedhashmap lru

11、面试四大引用

       java大厂面试题整理(七)强/弱/软/虚四大引用 - 简书

       Java的四种引用类型史上最详细,再也不怕面试官 - cq指尖代码 - 博客园

12、Redis LRU

        Redis中的LRU淘汰策略分析

        LRU原理和Redis实现——一个今日头条的面试题 - 知乎

13、mybatis中的#{}和${}

            mybatis中的#{}和${} - xiao_lin - 博客园

14、java中的各种锁

彻底理解Java中的21种锁! - pipizhou - 博客园

15、Java中如何实现序列化,有什么意义

看这一篇并亲自测试就懂了:为什么Java序列化要实现Serializable_lihuihui01的博客-优快云博客_java serializable

这篇文章很好:序列化和反序列化为什么要实现Serializable接口?(史上最全、简单易懂) - 凸凸大军的一员 - 博客园

java序列化,看这篇就够了 - 9龙 - 博客园

16、泛型

17、java8新特性-lambda表达式

java8新特性-lambda表达式入门学习_GalenGao-优快云博客_lamda表达式学习

18、数据结构

一起学数据结构1_程序媛泡泡的博客-优快云博客

19、Java线程池七个参数详解

线程池7大参数,三大方法,四大拒绝策略_小喵的博客-优快云博客_线程池七大参数

Java线程池七个参数详解_IT小跟班-优快云博客_线程池的七个参数

java 创建线程的三种方式、创建线程池的四种方式_SmileTimLi的博客-优快云博客_创建线程池的四种方式

为什么要使用线程池;常见的创建线程池的4种方式_Zeus_龙的博客-优快云博客_创建线程池的方式

20、FactoryBean & BeanFactory

BeanFactory 简介以及它 和FactoryBean的区别(阿里面试) - aspirant - 博客园

Spring BeanFactory与FactoryBean的区别及其各自的详细介绍于用法 - 低调的小黑 - 博客园

一文搞懂BeanFactory和FactoryBean区别 - 知乎

spring源码factoryBean接口注释解读_wlyang666的博客-优快云博客

FactoryBean以Bean结尾,表示它是一个Bean,不同于普通Bean的是:它是实现了FactoryBean<T>接口的Bean,根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取。 测试如下图:

由上图,第49行根据该Bean的ID从BeanFactory中获取的实际上是FactoryBean的getObject()返回的对象Calendar(或者说是子类对象GregorianCalendar)——即泛型T的类型,而不是FactoryBean本身,如果要获取FactoryBean对象,请在id前面加一个&符号来获取:context.getBean("&calendar3");

21、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值