又到了一年一度的秋季校招招聘高峰期,很多小伙伴都在四处搜索面试真题,那么今天知了姐就从知了堂学员面试的真题中给大家整理出以下IT名企面试真题,帮助大家解析名企招聘套路,助你斩获心仪Offer!
请大家分析一下 如下的程序执行的原理:
short s1 = 1; s1 = s1 + 1; 有错吗? short s1 = 1; s1 += 1 有错吗?
答案及解题思路:
前者不正确,后者正确。对于 short s1 = 1; s1 = s1 + 1;由于 1 是 int 类型,因此 s1+1 运算结果也是 int 型,需要强制转换类型才能赋值给 short 型。而 short s1 = 1; s1 += 1;可以正确编译,因为 s1+= 1;相当于 s1 = (short)(s1 + 1);其中有隐含的强制类型转换
Java的四个基本特性
答案及特性解释:
【抽象】就是把现实生活中的某一类东西提取出来,用程序代码表示,我们通常叫做类或者接口。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。
【封装】把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。
【继承】是对有着共同特性的多类事物,进行再抽象成一个类。这个类就是多类事物的父类。父类的意义在于抽取多类事物的共性。
【多态】允许不同类的对象对同一消息做出响应。方法的重载、类的覆盖正体现了多态。
字符串中有重复的内容去重。例如:abbccccaaddaggb,去重后的效果:abvadagb
解题代码:
方案1:Java程序实现去重问题
package com.dingsheng.sql; import org.junit.Test; import java.util.ArrayList; import java.util.List; public class TestStr { @Test public void method() { String str = "abbccccaaddaggb"; List<String> list = new ArrayList<>(); for(int i = 0; i < str.length(); i++) { list.add("" + str.charAt(i)); } System.out.println("没有去重前的数据 == " + list.toString()); for(int i = 0; i < list.size() - 1; i++) { for(int j = list.size() - 1; j > i; j--) { if(list.get(j).equals(list.get(i))) { list.remove(j); } } } System.out.println("去重后的数据 == " + list.toString()); } }
方案2:JavaScript前端程序实现去重问题
<script type="text/javascript"> var str = 'abbccccaaddaggb'; var newStr = ''; for(var i = 0; i < str.length; i++) { if(newStr.indexOf(str[i]) == -1) { newStr += str[i]; } } console.log(str, newStr); </script>
js数组主要有哪些方法?主要参数你了解吗?
考点解析
1. 理解JS中的数组内置对象API方法
2. 注意这个考题要大家说出数组对象API方法参数的具体含义,一定要好好阐述,不要被面试官“吊打”自己的基础
答案及解题思路:
1、shift():删除数组的第一个元素,返回删除的值
2、pop():删除数组的最后一个元素,返回删除的值
3、push(3):将参数加载到数组的最后,返回数组的长度
4、concat(3,4):把两个数组拼接起来。
5、splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
6、reverse:将数组反序
7、sort(orderfunction):按指定的参数对数组进行排序
8、slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
什么是Promise对象,如何使用?
答案及解题思路:
Promise是解决异步回调的ES语法的标准,通常用来解决异步嵌套和多异步同时完成回调等问题。
Promise是一个构造函数,相当于一个容器,把异步代码包裹在里面,promise有三个状态(pending(进行中)、fulfilled(已成功)和rejected(已失败))初始化为pending,当异步请求成功后调用resolve函数,状态从pending--->fulfilled,失败的时候调用reject,状态从pending--->rejected。状态不可逆。
缺点:书写麻烦,不能实现异步代码,同步执行的需求(配合async函数使用即可)
说一些ES6、ES7新特性
答案及解题思路:
let,count快级作用域;解构重对象和数组中提取值;箭头函数;字符串模版;扩展运算符...;对象的简写;module;promise(async);class;对原生对象的扩展(新增加了很多方法) ;for-of (Object.keys,values,entries等);Symbal();
不常用的proxy,reflect,generate函数。
TCP和UDP的区别?
TCP协议和UDP协议特性区别总结:
1. TCP协议在传送数据段的时候要给段标号;UDP协议不标号
2. TCP协议可靠;UDP协议不可靠
3. TCP协议是面向连接;UDP协议采用无连接
4. TCP协议负载较高,采用虚电路;UDP采用无连接
5. TCP协议的发送方要确认接收方是否收到数据段(3次握手协议)
6. TCP协议采用窗口技术和流控制
当数据传输的性能必须让位于数据传输的完整性、可控制性和可靠性时,TCP协议是当然的选择。当强调传输性能而不是传输的完整性时,如:音频和多媒体应用,UDP是最好的选择。在数据传输时间很短,以至于此前的连接过程成为整个流量主体的情况下,UDP也是一个好的选择,如:DNS交换。
把SNMP建立在UDP上的部分原因是设计者认为发生网络阻塞时,UDP较低的开销使其有更好的机会去传送管理数据。TCP丰富的功能有时会导致不预料的性能低下,但是我们相信在不远的将来,TC可靠的点对点连接将会用于绝大多数的网络应用。
代码执行,文件读取,命令执行的函数都有哪些?
答案及解题思路:
(1)代码执行:
eval,preg_replace+/e,assert,call_user_func,call_user_func_array,create_function
(2)文件读取:
file_get_contents(),highlight_file(),fopen(),readfile(),fread(),fgetss(),fgets(),parse_ini_file(),show_source(),file()等
(3)命令执行:
system(), exec(), shell_exec(), passthru() ,pcntl_exec(),popen(),proc_open()
mysql的网站注入,5.0以上和5.0以下有什么区别?
答案及解题思路:
5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表;5.0以下是多用户单操作,5.0以上是多用户多操作。
在渗透过程中,收集目标站注册人邮箱对我们有什么价值?
答案及解题思路:
(1)丢社工库里看看有没有泄露密码,然后尝试用泄露的密码进行登录后台
(2)用邮箱做关键词进行丢进搜索引擎
(3)利用搜索到的关联信息找出其他邮箱进而得到常用社交账号
(4)社工找出社交账号,里面或许会找出管理员设置密码的习惯
(5)利用已有信息生成专用字典
(6) 观察管理员常逛哪些非大众性网站,拿下它,你会得到更多好东西