华为校招Java面试题总结及答案-知了汇智

华为校招Java面试题总结及答案

其他系列文章:

  

  1.拓扑排序思想

  拓扑排序是对有向无环图的顶点的一种排序,它使得如果存在一条从顶点A到顶点B的路径,那么在排序中B出现在A的后面。

  (1)从有向图中选取一个没有前驱的顶点,并输出之;

  (2)从有向图中删去此顶点以及所有以它为尾的弧;

  重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。没有前驱 -- 入度为零,删除顶点及以它为尾的弧-- 弧头顶点的入度减1。

  2.操作系统IO的几种类型和原理

  1)阻塞IO

  2)非阻塞IO:轮询

  3)IO复用(select和poll)

  4)信号驱动IO(sigio):当我们所监控的套接口有IO操作准备就绪时,由内核通知触发前面注册的信号处理程序执行

  5)异步IO(aio_):异步IO直接是在第二个阶段完成后内核直接通知可以进程后续操作了

  3.nginx事件处理模型

  异步、事件循环;

  nginx事件驱动:通信机制采用epoll模型,支持更大的并发连接。

  通过异步非阻塞的事件处理机制,Nginx实现由进程循环处理多个准备好的事件,从而实现高并发和轻量级。

  Nginx特点:

  1. 跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。

  2. 配置异常简单,非常容易上手。配置风格跟程序开发一样,神一般的配置

  3. 非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)

  4. 事件驱动:通信机制采用epoll模型,支持更大的并发连接。

  5. nginx代理和后端web服务器间无需长连接;

  6. 接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送后后端web服务器,极大的减轻后端web服务器的压力

  7. 发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的

  8. 网络依赖型低。NGINX对网络的依赖程度非常低,理论上讲,只要能够ping通就可以实施负载均衡,而且可以有效区分内网和外网流量

  9. 支持服务器检测。NGINX能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上

  4.程序开发的流程,什么样的代码是比较好的代码?

  需求分析->概要设计->详细设计(框架、模块)->编码(环境搭建、编码、调试、联调、集成)->测试->软件交付->验收->维护

  功能实现良好、效率高、易读、易扩展和维护、简洁和明确;模块化,封装好;

  5.http与https的区别

  (1)HTTPS是HTTP的安全版,是HTTP+SSL,HTTP协议以明文方式发送内容,不提供任何方式的数据加密;

  (2)https协议需要到ca申请证书,一般免费证书很少,需要交费。http是免费的;

  (3)http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443;

  (4)http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

  6.设计一个xml格式,将一个类序列化为xml

  public staticT parserXML(String xml) {
  ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes());
  XMLDecoder decoder = new XMLDecoder(new BufferedInputStream(in));
  decoder.close();
  return (T) decoder.readObject();
  }
  public staticString formatXML(T entity) {
  ByteArrayOutputStream out = new ByteArrayOutputStream();
  XMLEncoder encoder = new XMLEncoder(new BufferedOutputStream(out));
  encoder.writeObject(entity);
  encoder.close();
  return out.toString();
  }

  7.介绍非对称加密

  非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;

  1、乙方生成一对密钥(公钥和私钥)并将公钥向其它方公开。

  2、得到该公钥的甲方使用该密钥对机密信息进行加密后再发送给乙方。

  3、乙方再用自己保存的另一把专用密钥(私钥)对加密后的信息进行解密。乙方只能用其专用密钥(私钥)解密由对应的公钥加密后的信息。

  在非对称加密中使用的主要算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。

  8.介绍三级缓存原理

  内存 > 硬盘 > 网络

华为校招Java面试题总结及答案

 

  9.怎么保持长连接

  一个连接是通过服务器地址和端口还有客户端地址和端口来识别唯一连接的。

  Connection:keep-alive

  (1)在应用层使用heartbeat来主动检测,在应用层制定协议,发心跳包,客户端和服务端制定一个通讯协议,每隔一定时间(一般15秒左右),由一方发起,向对方发送协议包;对方收到这个包后,按指定好的通讯协议回一个。若没收到回复,则判断网络出现问题,服务器可及时的断开连接,客户端也可以及时重连。

  (2)通过TCP协议层发送KeepAlive包。这个方法只需设置好你使用的TCP的KeepAlive项就好,其他的操作系统会帮你完成。操作系统会按时发送KeepAlive包,一发现网络异常,马上断开。在应用层不需自己定协议,通信的两端,只要有一端设好这个值。还有一个好处就是节省网络资源。

  ServerSocket serverSocket=new ServerSocket(1111);
  Socket socket=serverSocket.accept();
  while(true){//保持长连接
  try {
  Thread.sleep(100);//等待时间
  } catch (InterruptedException e1) {
  e1.printStackTrace();
  }
  if (socket !=null){
  try {
  String ip = socket.getInetAddress().toString().replace("/", "");
  System.out.println("====socket.getInetAddress()====="+ip);
  socket.setKeepAlive(true);
  InputStream is = socket.getInputStream();
  OutputStream os = socket.getOutputStream();
  System.out.println("服务器端接受请求");
  String tempdata = StreamEazyUse.getContent(is);
  system.out.printl(“接收到的数据为:”+tempdata);
  if(tempdata.contains(“stop”)){
  is.close();
  os.close();
  }
  os.flush();
  }catch(Exception e){
  system.out.println(“出现了错误”);
  }
  }
  }


  版权声明:本文来源于网络,由知了堂搜集整理,仅供大家学习Java时使用

项目教学·项目驱动

132 2811 3191
预约免费试学
点击咨询
预约试学