招银面试汇总
1、cookie和session的区别
二者都是用于保持用户的会话,用于保存用户的用户名和密码等个人信息,cookie存储在客户端,即浏览器上。session存储于服务器端,本质是通过cookie进行信息处理。
2、http中无状态、无连接的含义
无连接是指服务器挨个处理访问队列中的每一个访问,每个访问处理完后就关闭再继续处理下一个,每次只处理一个访问。
无状态服务器不具有保存事物状态的功能,即我们给服务器发送请求后服务器返回相应数据,但返回后服务器不会保存客户端状态。
3、synchronized、lock以及semaphore的区别
synchronized一种修饰符,经过这个关键字修饰后的代码块属于临界资源,线程在进入临界区后会对资源进行加锁,避免其他线程进入,执行完毕后才会释放锁。
lock的一种实现形式是可重入锁ReenTrantLock,通过JDK实现,需要手工进行加锁和释放声明,锁的细粒度和灵活性更高。
信号量可以控制占有临界区的线程数目。
lock方法性能最高、其次synchronized,信号量最差。
4、介绍restful框架
Representational State Transfer(REST表现层状态转化),是用于描述在网络中客户端与服务器的一种交互模式,是一种设计原则,只要符合该原则的API设计方式都可以被称为RESTful架构。
1)服务端提供的RESUful API架构中,URL只使用名词来定位资源,原则上不使用动词。
2)通过HTTP协议的四种操作(GET、POST、PUT、DELETE)对资源进行修改,实现资源状态的转移。
3)客户端和服务器端间可使用(JSON、XML以及JPG)等手段传输数据。
4)可使用http state code传递客户端状态。
5、java和JavaScript的区别
①开发的公司不一样
②java是面向对象的语言,在进行程序开发时需要设计对象。JavaScript是基于对象的语言,是基于对象和事件驱动的编程语言,本身提供丰富的对象供编程人员使用。
③两者运行方式不同,java在传递到客户端之前必须被编译,并且客户端需要具备相应环境才可执行。JavaScript是嵌入在HTML中,源代码在发送到客户端之前不需要被编译,源代码会随着Web一起被下载下来。
④java是嵌在网页中而又能独立运行的小窗口程序。JavaScript是在HTML页面中,进行资源调度等功能实现。
6、基本有序数组和无序数组采用什么方式排序能最快找到前n个数
基本有序数组采用堆排序,维护一个大小为k的堆(k为将数组排序好时两个元素移动的最小距离),遍历数组时每次讲堆的根返回给数组,并将数组一下个元素插入根,并下沉。
无序数组时采用快速排序思想,每次将一个元素放到其对应位置,判断该元素右侧的元素数目是否等于n。
7、找到字符串中第一个不重复出现的元素
遍历一遍字符串通过LinkedHashMap存储每个字符出现的次数,字符串结束后遍历Map,找到第一个出现次数为1的即要求的字符。
8、select语句执行顺序
(1)from (2)where(3)group by(4)聚合函数计算(5)having(6)计算所有表达式(7)order by
9、new实例化过程
(1)寻找类定义
(2)加载类定义
(3)给对象分配内存空间
(4)给对象初始化变量值
给父类静态变量赋值
执行父类静态块
给当前类静态变量赋值
执行静态块
给父类变量赋值
执行父类构造函数
给当前类变量赋值
执行构造函数
10、数据库字符型数据类型对比:
11、什么是死锁?
死锁是指两个或两个以上进程在执行过程中因争夺资源而造成一种相互等到状态,若无外力作用都无法继续推进下去。此时称系统状态为死锁状态或系统产生了死锁。死锁产生需要四个必要条件。
互斥:进程对所分配到的资源进行排他使用,一个资源一次只能被一个进程占有。
请求和保持:进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已经被其他进程占有。
不可剥夺:进程已获得的资源在进程完成前不能被剥夺。
循环等待:若干个进程形成一种头尾相接的循环等待关系。
12、如何解决死锁
预防死锁:破坏死锁产生的4个必要条件。
避免死锁:在资源分配过程中动态使用检测算法保证系统不进入死锁状态。
解除死锁:当检测到死锁发生时,撤销或挂起一些进程,以便回收一些资源并将这些资源分配给处于阻塞状态的进程使之转为就绪状态继续运行。
13、一次http请求流程?
1)根据输入的URL地址,通过域名解析将域名映射为对应IP地址。
2)通过三次握手建立TCP链接。
3)服务器根据http请求内容提供对应服务,并将html页面返回给客户端。
4)浏览器解析html中代码,并请求html中资源。
5)浏览器对页面进行渲染并呈献给用户。
14、为什么要负载均衡?
负载均衡是一种网络设备的集群技术,实现将业务(网络流量或网络服务)分担给多个服务器和网络设备,从而提高业务处理能力,保证业务高可用性。当业务并发量很大时仅仅依赖一台服务器导致用户请求响应速度很慢,无法满足服务实时响应特性。更严重的情况是当这台服务器出现故障时服务完全无法响应,导致整个系统陷入瘫痪。
15、怎样实现负载均衡
负载均衡包括服务器负载均衡和链路负载均衡,服务器负载均衡包括四层负载均衡以及七层负载均衡。
①四层负载均衡技术原理:客户端将服务请求发送给负载均衡设备,负载均衡设备上的虚服务接受客户端请求通过负载均衡调度算法选择真是服务器,通过网络地址转换将服务器真实地址重写请求报文地址,并将请求发送给真实服务器。真实服务器的响应报文通过负载均衡设备后改写响应报文的源地址为负载均衡设备地址,再传送给客户,完成整个调度过程。
②七层负载均衡原理:七层负载均衡与四层负载均衡的区别是进行负载均衡时依据的协议不同,七层负载均衡可处理到应用层协议。四层负载均衡每个虚服务器只对应一个实服务器组,七层服务均衡每个虚服务器可对应多个实服务器组。
七层负载均衡流程如下:
(1)-(3):Client和LB建立TCP连接;
(4):Client发送HTTP请求,目的IP为虚IP;
(5):LB设备分析报文,根据调度算法选择实服务器,注意此时会缓存该报文;
(6):LB设备向实服务器发Syn报文,***为Client的Syn报文***
(7):Server发送Syn/Ack报文,目的IP为Client;
(8):LB接收Server的Syn/Ack报文后,回应ACK报文
(9):修改步骤(5)中缓存的报文目的IP和TCP***,然后发给Server;
(10):Server发送响应报文到LB;
(11):LB修改步骤(9)中的报文的源地址和TCP***后转发给Client。