辣条走起,每月的刷题99元奖励靠你们了java
创新工厂/涂鸦移动,李开复创办的程序员
我没有走提早批,走的秋招,笔试是对方给我发一份邮件,里面有一份word文档,而后里面有两道编程题,须要这份word文档的后台回复 创新工厂面试
题目一算法
题目一解答编程
int number_of_cards(float length)
{
if(length <= 0)
return 0;
float i = (float)1.0;
float sum = (float)(1.0 / (i+1));
while(sum < length)
{
i++;//就是上面标注字体的实现,每次都加1/(i+1),题目已经给出公式
sum = sum + (float)(1.0/(i+1));
}
return (int)i;
}
复制代码
题目二数组
题目二解答缓存
int beauty_of_array(int[] array)
{
int sum = 0;
int length = array.length;
for(int i=1;i<=length;i++)//i表明子序列的长度从1开始最长是数组的长度
{
for(int j=0;j<array.length;j++)
{//j表明从数组的第几个数开始找i长度个数,穷举
Set<Integer> set = new HashSet<>();
int temp = j+i-1;//temp用来记录从j下标开始,到i长度后的下标为止,好比i取2,也就是子序列长度是2,那么temp就是j+2-1
if(temp >= array.length)
break;//若是下标超过数组长度,break掉
for(int k=j;k<=temp;k++)
set.add(array[k]);//因为是不重复的,加入集合
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext())//遍历集合求和
sum += (int)iterator.next();
}
}
return sum;
}
复制代码
电话面试,时长半个小时,全程没问任何项目,一直在问基础知识点。安全
public static Integer valueOf(int i) {
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
复制代码
8.而后接着问我,char能够存储汉字吗?
答:我说能够。顺便说了缘由:char型变量是用来存储Unicode编码的字符的,unicode编码字符集中包含了汉字,因此,char型变量中固然能够存储汉字。若是某个特殊的汉字没有被包含在unicode编码字符集中,那么,这个char型变量中就不能存储这个特殊汉字。服务器
9.而后问我了我计算机网络的知识,https是什么?
答:https是在http的基础上加了ssl,实现了传输过程的加密。微信
10.ssl的加密原理是什么?
答:我说了ssl是基于RSA原理的加密保证安全,而后说了RSA的握手协议。1.RSA握手协议
第一步,Client给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法。
第二步,Server确认双方使用的加密方法,并给出数字证书、以及一个服务器生成的随机数(Server random)。
第三步,Client确认数字证书有效,而后生成一个新的随机数(Premaster secret),并使用数字证书中的公钥,加密这个随机数,发给Server。
第四步,Server使用本身的私钥,获取Client发来的随机数(即Premaster secret)。
第五步,Client和Server根据约定的加密方法,使用前面的三个随机数,生成”对话密钥”(session key),用来加密接下来的整个对话过程。
11.RSA原理说一下?
答:这里你们若是不懂RSA就在ssl加密原理那里说RSA的握手协议了,直接把那5步说一下也行。这个RSA因为我本科信息安全的,常常接触,因此基本能够把下面的步骤说一遍。
RSA算法的步骤主要有如下几个步骤:
一、选择 p、q两个超级大的质数 ,都是1024位,
二、令n = p * q。取 φ(n) =(p-1) * (q-1)。 计算与n互质的整数的个数。
三、取 e ∈ 1 < e < φ(n) ,( n , e )做为公钥对,正式环境中取65537。能够打开任意一个被认证过的https证书,均可以看到。
四、令 ed mod φ(n) = 1,计算d,( n , d ) 做为私钥对。 计算d能够利用扩展欧几里的算法进行计算
五、销毁 p、q。密文 = 明文 ^ e mod n , 明文 = 密文 ^ d mod n。利用蒙哥马利方法进行计算,也叫反复平方法,很是简单、
其中(n,e)是公钥 (n,d)是私钥
12.TCP和UDP的区别讲一下
答:主要答了如下几点。若是本身熟悉拥塞控制,能够把其中的每一块都详细说一下。
13.TCP三次握手说一下。
答:就是下面这个图片了,要是现场面试,下面这个图片,我能够手画出来,这个必须理解地背下来。
14.为何要用三次握手,不是两次呢?
答:这里我说了以前的一个链接请求,因为网络阻塞已经被发送端放弃了,而后过了一段时间被接收方收到了,接收方直接就创建了链接,白白浪费了资源。详细版能够把下图背下来。
15.而后问了我七大排序中,的最好最坏时间复杂度?
答:就是下图了,这个得背了,常常问。我没说基数排序,这个不太了解。
16.接着问我,哪些是稳定,哪些是不稳定?
答:说了归并,冒泡,插入稳定,其它不稳定。
17.接着问了我两道算法题,如何判断链表中有环?
答:我说使用快慢指针,快的每次走两步,慢的每次一步,看看是否相遇。
18.接着问我,如何判断两个链表是否相交?
答:先分别求链表长度,哪一个长久用哪一个先进行遍历长度差的长度,而后在一块儿遍历,若是相等,那么相交。
有一些问题忘了,大致上问的问题都很基础。
电话面试,时长半小时,感受创新工厂很卡时间,时间一到,立马结束面试。面试官让我准备好纸和笔,而后问了我两道动态规划的题目。
因为这个时间过久远了,这道题目具体是啥,实在想不起来了,只记得当时我强行套状态方程,把思路说了一下,而后面试官最后给我讲了一下这道题的思路,最后面试就结束了。
印象中没有hr面,二面结束而后过了一天通知我面试经过了,而后发了offer,当时看到创新工厂开的offer,仍是很吃惊的,感受相对于其余互联网公司真的有点少,具体薪资你们能够去offershow搜一下。
做者乔戈里亲历2019秋招,哈工大计算机本硕,百度java工程师,欢迎你们关注个人微信公众号:程序员乔戈里,公众号有3T编程资源,以及我和我朋友(百度C++工程师)在秋招期间整理的近200M的面试必考的java与C++面经,并有天天一道leetcode打卡群与技术交流群,欢迎关注。