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

腾讯校招Java面试题总结及答案

         其他系列文章:

乐视校招Java面试题总结及答案
腾讯校招Java面试题总结及答案
阿里巴巴校招Java面试题总结及答案
微店校招Java面试题总结及答案
蘑菇街校招Java面试题总结及答案

招银科技校招Java面试题总结及答案

 

  1.TCP/UDP区别,TCP三次握手,SYN攻击

  TCP是面向连接的可靠传输,需要三次握手,保证可靠通信;有重传机制;
  UDP是无连接的不可靠传输,但是速度快,适用于视频和电话会议等实时应用场景;
  TCP三次握手是:SYN=x(SYN_SEND)、ACK=x+1,SYN=y(SYN_RECV)、ACK=y+1(ESTABLISHED);
  SYN攻击是:SYN攻击属于DOS攻击的一种,它利用TCP协议缺陷,通过发送大量的半连接请求,耗费CPU和内存资源。
  检测SYN攻击非常的方便,当你在服务器上看到大量的半连接状态时,特别是源IP地址是随机的,基本上可以断定这是一次SYN攻击。
  一类是通过防火墙、路由器等过滤网关防护,另一类是通过加固TCP/IP协议栈防范。过滤网关防护主要包括超时设置,SYN网关和SYN代理三种。调整tcp/ip协议栈,修改tcp协议实现。主要方法有SynAttackProtect保护机制、SYN cookies技术、增加最大半连接和缩短超时时间等。
  但一般服务器所能承受的连接数量比半连接数量大得多

  2.SHA,MD5

  SHA(安全哈希算法):该算法的思想是接收一段明文,然后以一种不可逆的方式将它转换成一段(通常更小)密文,也可以简单的理解为取一串输入码(称为预映射或信息),并把它们转化为长度较短、位数固定的输出序列即散列值(也称为信息摘要或信息认证代码)的过程。可以对任意长度的数据运算生成一个160位的数值。SHA将输入流按照每块512位(64个字节)进行分块,并产生20个字节的被称为信息认证代码或信息摘要的输出。SHA-1是不可逆的、防冲突,并具有良好的雪崩效应。
  MD5(信息-摘要算法5):MD5将任意长度的“字节串”映射为一个128bit的大整数。MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128位散列值。
  两者比较:
  (1)对强行攻击的安全性:最显著和最重要的区别是SHA-1摘要比MD5摘要长32 位。使用强行技术,产生任何一个报文使其摘要等于给定报摘要的难度对MD5是2^128数量级的操作,而对SHA-1则是2^160数量级的操作。这样,SHA-1对强行攻击有更大的强度。
  (2)对密码分析的安全性:由于MD5的设计,易受密码分析的攻击,SHA-1显得不易受这样的攻击。
  (3)速度:在相同的硬件上,SHA-1的运行速度比MD5慢。
腾讯校招Java面试题总结及答案


       3.了解的网络攻击手段,可以怎么预防

  拒绝服务攻击:
  (1)SYN拒绝服务攻击:目标计算机如果接收到大量的TCP SYN报文,而没有收到发起者的第三次ACK回应,会一直等待,处于这样尴尬状态的半连接如果很多,则会把目标计算机的资源(TCB控制结构,TCB,一般情况下是有限的)耗尽,而不能响应正常的TCP连接请求。
  (2)ICMP洪水:。这样如果攻击者向目标计算机发送大量的ICMP ECHO报文(产生ICMP洪水),则目标计算机会忙于处理这些ECHO报文,而无法继续处理其它的网络数据报文,这也是一种拒绝服务攻击(DOS)。
  (3)UDP洪水;
  (4)死亡之PING:TCP/IP规范要求IP报文的长度在一定范围内(比如,0-64K),但有的攻击计算机可能向目标计算机发出大于64K长度的PING报文,导致目标计算机IP协议栈崩溃。
  (5)IP地址欺骗:如果一个攻击者向一台目标计算机发出一个报文,而把报文的源地址填写为第三方的一个IP地址,这样这个报文在到达目标计算机后,目标计算机便可能向毫无知觉的第三方计算机回应。这便是所谓的IP地址欺骗攻击。

  4.10亿条短信,找出前一万条重复率高的

  (1)首先将文本导入数据库,再利用select语句某些方法得出前10条短信。(索引)但是这个时间效率很低;
  (2)使用hash计算并存储次数,然后遍历一次找出top10;

  5.有1亿个浮点数,如果找出期中最大的10000个?

  用快速排序的方法,将数据分为2堆,如果大的那堆个数N大于10000个,继续对大堆快速排序一次分成2堆,如果大的那堆个数N大于10000个,继续对大堆快速排序一次分成2堆,如果大堆个数N小于10000个,就在小的那堆里面快速排序一次,找第10000-n大的数字;递归以上过程,就可以找到相关结果了。

       6.对一万条数据排序,你认为最好的方式是什么

  申请长度为一千万位的位向量bit[10000000],所有位设置为0,顺序读取待排序文件,每读入一个数i,便将bit[i]置为1。当所有数据读入完成,便对bit做从头到尾的遍历,如果bit[i]=1,则输出i到文件,当遍历完成,文件则已排好序。本机运行耗时9秒49毫秒。
  (这种方法要求数组中的数据没有重复,且都不超过最大值)
  1、10w行数据,每行一个单词,统计出现次数出现最多的前100个。
  (1)可以使用小根堆;
  (2)在linux中实现:cat words.txt | sort | uniq -c | sort -k1,1nr | head -10
  uniq -c: 显示唯一的行,并在每行行首加上本行在文件中出现的次数
  sort -k1,1nr:  按照第一个字段,数值排序,且为逆序
  2、一个文本文件,给你一个单词,判断单词是否出现。
  grep -wq "fail" 123.txt && echo "no"||echo "yes"
  3、两个线程如何同时监听一个端口。
  多个线程可以监听同一个端口,但我们通常不这样做。
  多个进程也可以同时监听一个端口,比如nginx。


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

       要参加校招的小伙伴们,知了堂针对校招专门开设“校招冲刺”课程,在校阶段,通过线上直播快速弥补基础编程知识,暑假参加线下课程,切实体验企业的真实项目。达到企业校招所需人才要求。(添加知妹儿QQ:2567083467详细了解查看《计算机科班生如何规划职业生涯?几个方向任你选》文章详细了解。

项目教学·项目驱动

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