如上图所示,并没有通过面试,昨天晚上看书看到2点,一大早起床打了个滴滴到高新区那边参加面试,在车上就感觉很疲倦,然后从学校到面试地点一个多小时车,晕车把人晕的不行了,下车差点吐了。
到面试地点应该是个三星级酒店,去的人很多,看了一下大多是西电西工大的学生,我们学校的学生我没看见多少,鹅厂包了个大会议厅,笔试通过的学生和霸面的同学有两个分开的摊位,霸面的学生简历投递过去等通知就好,通过笔试的坐在大厅,等人叫你名字,叫到之后给你个卡片,卡片上有房间号,自己去找房间,在大厅刚坐下,头还是痛,然后被叫到了,拿着简历就上楼了。
一开始就是做个自我介绍,简单说了一下学校,专业,学习经历,简单的说了一下,然后说到项目,简历上写的TinyWebServer是去年写的,很多细节的东西都记不清了,当时就说的我刚在Udacity上看的CS101,写的一个搜索引擎,然后讲了一下我重构遇到的问题,做这个WebCrawl重构的时候,最开始爬页面的url的时候是自己写的文本的代码,然后我在stack overflow上看到了BeautifulSoup,然后我说到了我为什么用这个,不用自己写的,我解释自己写的爬下来的很多内容不是url,以下是自己写的解析文本提取出url的代码:
def GetNextTarget(page):
start_link = page.find('<a href=)
if start_link == -1:
return None, 0
start_quote = page.find('"', start_link)
end_quote = page.find('"', page[start_quote + 1, : ])
return page[start_quote + 1 :end_quote], end_quote
def GetAllTheLinks(page):
links = []
while True:
url, end_position = GetNextTarget(page)
if url:
link.append(url)
page = page[end_position + 1 : ]
else:
break
return links
但是出现的问题是,在网页文本中解析出来的不是url的文本也会当做文本,类似于下面的这样的文本:
解析出来显然不是我们需要的,所以我在google上搜索有没有好的解决方案,就找到了了beautifulsoup中解析出所有url的用法:
def GetAllTheLinks(page):
links = []
for link in BeautifulSoup(page).findAll('a', href=True):
links.append(link['href'])
return links
但是这个代码爬出来的url还是存在问题,如下:
只是现在可以爬取出网页中所有的url,但是其中也会包含不是url,我认为beautifulsoup底层解析的实现应该和我自己手写的实现类似,但是beautifulsoup的适用性更强,所有我对爬出来的links再做一次过滤,如下:
def GetAllTheLinks(page):
links = []
for link in BeautifulSoup(page).findAll('a', href=True):
links.append(link['href'])
links = [link for links if link.startswith('http')]
return links
当时回答这个问题的时候解释的还算清楚,下面就是让我做了关于C语言的const 的用法和枚举的用法,const的用法答的还可以,但是问到枚举的时候,当时记不清具体的语言规则,只把我记得清楚的说了一下,题目中问到的我直接说记不清楚了,不敢乱说。
后面就让我手写代码了,我觉得这也是这次面试我失败的主要原因,让我写一下拷贝字符串,下面是我当时写的代码:
char *MyStringCopy(char *src, char *dest)
{
size_t length = strlen(src) + 1;
char *temp_string = (char*) malloc(length);
return (dest = temp_string);
}
当时写完,我就觉得哪里不对,但是就说半天看不出来,还有迷一样的temp_string
给面试官看,面试官皱了下眉。。。。唉,后面下楼的时候,发现自己一没检查内存分配不成功,二是循环都没跑,拷毛字符串啊。。。写出来的代码丢死人。。送分题都做错,自己实在是原谅不了自己,下面是我自己写的正确的代码
char *MyStringCopy(const char *src, char *dest)
{
if(!src || !dest)
return nullptr;
size_t length = stlen(src) + 1;
char *temp_string = (char*) malloc(sizeof(char) * length);
dest = temp_string;
if(temp_string){ // allocation succeeds
while(*src){
*temp_string = *src;
++temp_string;
++src;
}
}
return dest;
}
字符串拷贝,主要的陷阱就是内存分配不成功的情况,其他的如果dest和src为null,还有就是src和dest指在一起时,这里我对题目的理解时自己手动分配内存,所有没有加入这种情况,这里相等的情况是is和equal的的区别,我倾向与后一种理解
后面问了一下网络的知识,讲了一下TCP三次握手,我捎带提了一下SYN洪泛,嘴贱又说了一下SYN Cookies,这里给自己挖了个坑,后面还问了一下判断图是否有环,这个以前没遇到过,我想了一下用并查集给面试官讲了一下,貌似面试官也没听懂,回来搜了一下解法
判断无向图是否有环路的方法 -并查集 -BFS
并查集(1)-判断无向图是否存在环
判断一个图是否有环
后面还问了一下http的状态码,只记得清楚403 404,问了一下ICMP属于哪一层(网络层)和滑动窗口的序号确认
第一次现场面试,有一点紧张,面试的时候状态不好,这次面试对自己主要不满意就是把送分题做错,面试写出来的代码一点也不专业,没有什么BAT情节,能不能进大厂其实我不太在意,只是希望以后能进个待遇不错,技术氛围浓厚的公司,希望正式找工作的时候能够找到这样的公司。
Keep focus and have fun