1、体系结构以及各层协议 《a》OSI分层(七层):物理层,数据链路层,网络层,传输层,会话层,表示层,应用层 《b》TCP/IP分层(四层):网络接口层,网际层,传输层,应用层 《c》五层协议:物理层,数据链路层,网络层,运输层,应用层 《d》每一层的协议如下: 物理层:IEEE802.3协议 数据链路层:HDLC(高级数据链路控制),VLAN(虚拟局域网),MAC(物理地址) 网络层:IP,ICMP(因特网控制报文协议),ARP(地址解析协议) 传输层:TCP,UDP 会话层:SQL,RPC(远程协议控制) 表示层:TIFF,GIF,HTML 应用层:FTP,DNS(域名解析),SMTP(邮件传输协议),Http,www 等。
2、TCP三次握手和四次挥手的全过程 《1》三次握手: 客户端请求服务器发起请求,等待服务器的确认 服务器确认,表示可以建立连接 客户端再次建立连接 《2》四次挥手: 主动关闭方发送一个FIN,用来关闭主动方到被动方的数据连接,但是主动关闭方还可以接受数据。 被动方关闭方,发起确认连接。 关闭被动关闭方到主动关闭方的数据连接。 主动关闭方发起确认序号。
3、其他协议 ICMP : 因特网控制报文协议 HTTP:超文本传输协议 DHCP:动态主机配置协议
4、TCP和UDP的区别? 答:(1)TCP:连接、可靠 传输单位:TCP报文段 注重安全性 对应协议:FTP>文件传输协议,Telnet:远程登录,SMTP:邮件传送协议【收】,POP3:【发】,HTTP (2)UDP:非连接、不可靠 传输单位:用户数据报 数据传输快,不需要等待 DNS>域名解析 SNMP>简单网络管理协议 TFTP>简单文件传输协议
5、浅谈HTTP中GET和POST的区别? 答:(1)HTTP中定义了与服务器交互的不同方法,最基本的包括4种,GET、POST、PUT、DELETE (2)GET是从服务器上获取数据;POST是向服务器传送数据 (3)GET是把参数数据队列加到表单的Action 属性所指URL中,且数据在URL可以看到;POST是通过HTTPPOST机制,用户是看不到数据的。 (4)GET传输的数据量较小,不能大于2KB POST传输的数据量较大,一般默认为不受限制 (5)GET安全性非常低,POST安全性较高。
6、B树和B+ 树的区别? 答:(1)B树:每个节点都存储key和data值,所有节点组成这棵树,并且叶子节点指针为null。 (2)B+树:只有叶子节点存储数据data,叶子节点包含了这棵树的所有键值,叶子节点不存储指针。 在Mysql中,常用的存储引擎是MyISAM和InnoDB (1)MyISAM:data存的是数据地址,索引是索引,数据是数据。 (2)InnoDB:data存的是数据本身,索引也是数据
7、多线程的实现方式 答:1、继承Thread类,重写run方法并通过start方法启动线程。 2、实现Runnable接口,重写run方法,并把Runnable实例传给Thread对象,Thread的start方法调用run方法,再通过调用Runnable实例的run方法启动线程 3、实现Callable接口,并重写call方法,并把对象callable实例传给FutureTask对象,再把FutureTask对象传给Thread对象,它与前两种最大的不同是callable能返回一个异常处理的结果Future对象并能抛出异常,其他两种不能。
8、多线程的死锁、活锁、饥饿和无锁。 答:死锁:多个线程相互占用对方的资源的锁,而又互相等待对方释放锁,若无外力干预,形成死锁。 活锁:死锁是大家互相拿不到都占用着对方的资源,而活锁是拿到资源却又互相释放不执行。 饥饿:由于线程中使用优先级,高的优先级优先执行,与死锁不同的是饥饿在以后一段时间后还能得到执行。 无锁:即没有对资源进行锁定,即所有的线程都能访问并修改同一资源,但同时只有一个线程可以修改成功。
9、多线程中的并发和并行: 并发:即一段时间内多个任务在执行,但不一定是同时在执行,他们可能是交替在运行,也有可能是串行运行。 并行:指多个任务在同时执行。 * 注:单核CPU不会并行操作,一个CPU只能执行一条指令,并行操作只存在于多核CPU中
10、同步和异步: 同步:指发送一个请求,需要等待返回,然后才能发送下一次请求。 异步:指发送一个请求,不需要等待返回,随时可以发送下一个请求。
11、阻塞与非阻塞: 答:阻塞:如果一个线程占用了一个公共资源而没有释放对它的锁,另外的别的线程想要继续执行就只能等待释放锁,此时就造成阻塞了。 非阻塞:即就是没有阻塞,线程可以自由运行,没有锁定公共资源,不相互阻塞运行。
12、避免死锁? 答:(1)按顺序加锁 (2)获取锁的时限 (3)死锁检测
13、session和Cookie的区别和联系 答:《1》Cookie数据存放在客户的浏览器上,Session数据存放在服务器上 《2》Cookie不是很安全,别人可以分析存放在本地的cookie 并进行Cookie欺骗 《3》Session会在一定时间内保存在服务器上,当访问量增多的时候,会比较占用服务器的性能。 考虑到减轻服务器性能方面,应当使用cookie。 《4》单个cookie保存的数据不能超过4K
14、Http请求的基本过程:socket连接、请求、应答、关闭连接。
15、事务的四大特性以及事务的隔离级别 原子性:指事务包含的所有操作要么全部成功,要么全部回滚 隔离性:当多个用户并发访问数据库时,比如操作同一张表时,数据库Wie每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。 一致性:指一个事务执行之前和执行之后都必须处于一致性状态 持久性 :指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作 隔离级别:脏读、不可重复读、虚度(幻读) (1)读未提交:最低级别 ,任何情况都无法保证 (2)读已提交:避免脏读 (3)可重复读:避免脏读、不可重复读 (4)串行化:可避免脏读、不可重复读、幻读的发生
Java中的网络支持 针对网络通信的不同层次,Java提供的网络功能有四大类; 1、InetAddress ; 用于表示网络上的硬件资源 2、URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据 3、Sockets:使用TCP协议时间网络通信的Socket相关的类。 4、Datagram :使用UDP协议,将数据保存在数据报中,通过网络进行通信。 Socket通信实现步骤: 1、创建ServerSocket和Socket 2、打开连接到Socket的输入/输出流 3、按照协议对Socket进行读写操作 4、关闭输入输出流、关闭Socket 基于TCP的通信服务 服务器端: 1、创建ServerSocket对象,绑定监听端口 2、通过accept方法监听客户端请求 3、连接建立后,通过输入流读取客户端发送的请求信息 4、通过输出流向客户端发送响应信息 5、关闭相关资源 客户端: 1、创建Socket对象,指明需要连接的服务器的地址和端口号 2、连接建立后,通过输出流向服务器端发送请求 3、通过输入流获取服务器响应的信息 4、关闭相关资源
多线程服务器 * 应用多线程来实现服务器与多客户端之间的通信 基本步骤: 1、服务器端创建ServerSocket,循环调用accept等待客户端连接 2、客户端创建一个Socket并请求和服务器端连接 3、服务器断案连接客户端请求,创建socket与该客户建立专线连接 4、建立连接的两个socket在一个单独的线程上对话 5、服务器端继续等待新的链接
基于UDP的通信的类 DatagramPacket:表示数据报包 DatagramSocket:进行端到端通信的类
服务器端实现步骤: 1、创建DatagramSocket,指定端口号 2、创建DatagramPacket 3、接收客户端发送的数据信息 4、读取数据
客户端 1、定义发送的信息 2、创建DatagramPacket,包含将要发送的信息 3、创建DatagramSocket 4、发送数据
