搜狗一面的感悟
2017-06-01 09:50 tlnshuju 阅读(248) 评论(0) 编辑 收藏 举报(0) 文件夹
Java Socket编程Thread 和 Runnable
何海涛的日志面试经典题目(更新到2012年)
java
之 引用(基本类型的包装类,构造函数析构函数与c++不同)
JD笔试试题(凭记忆写的+人生感悟
try finally )
搜狗面试的经典题(C++map按值排序。class struct的差别)
http://www.ruanyifeng.com/blog/2013/12/naive_bayes_classifier.html
向大家推荐一个非常好的学习站点 ~~~ 关于算法 http://www.cnblogs.com/kaituorensheng/category/445233.html
一:自己的一些感悟
搜狗笔试题目请点击链接:搜狗笔试题目
怎样准备笔试:
(1)笔试是很重要的,笔试的分数直接影响你接下来的的面试。这应该算给面试官下的第一潜在的个印象(面试官告诉我。你昨天的笔试成绩还不错,这也是我作
为一个霸笔者能进入面试的关键因素吧)。尽管考的都是一些基础的东西,可是可能基础的连你自己都不知道从哪里下手。
(2)尽量提前网申。不到万不得已。不要霸笔的。霸笔会受到特殊的待遇的,除非你笔试的成绩很牛!
总之,笔试一定要做好充分的准备——数据结构、C++基本语
法、剑指offer、编程之美、程序猿面试宝典里面的算法题。少说也得手写3遍吧;
(3)应聘c++研发方向的,一定一定得会用而且吃透(自己实现)STL,特别是里面STL对象的运算符重载。再有就是算法一定要吃透,特别是一些算法的优化
笔试结束,面试之前的准备:
(4)假设可以把笔试的题目弄出来最好(个人的感悟吧)。并且一定要当天把笔试中的全部疑问,查清楚;特别是算法题,一定要看一看有没有更优的算法实现 ——
本人,接到面试官的第一个命令。并非先自我介绍吧,而是你感觉你昨天笔试的怎样?我就实话实说了,(自己当晚已经把笔试的疑问所有百度和google了)。算法题的第
二个时间复杂度是O(N^2),事实上能够用动态规划dp蒋伟O(N)的,面试官自然而然得就询问你的dp算法了,顺势又问了一下dp的使用情形,我就分析了一下状态转移(注意,你
自己得说话方式。你说到了dp,一定要对dp有深入的了解)
(5)接(4),面试中的说话技巧,化被动为主动 —— 让你自己牵着面试官再走,而非自己给自己下套子(明明自己不会的东西,你却提到了,那你肯定吃亏
的)。这次面试中,我感觉自己是语无伦次的,前胸一直冒汗,可是并不紧张(没哆嗦的)。可能是穿的太厚了吧。羞愧啊!这是说明。面试之前并没有想好,话是怎样讲
的。怎样说的。
(6)接(5)面试之前一定要想好。话是怎样讲。怎样说,哪些算法能够提,哪些方法能够提。哪些技术能够提等等 —— 总之。自己深入了解的,要时不时的提
一下,比如面试中,他先提到笔试中的统计词频那一题提起,我就把自己本科时做的中文情感分词(注意分词)。他就顺势提问我,给你一句话。中文是怎样分词的。
(7)做一个诚实的孩子,面试官问的问题。一定要诚实的回答。会就是会,不会一定要说明,不能含糊的,否则接下来他会问你实现方法的;
(8)学会应变。避开陷阱:捕捉面试官问题中的关键信息,那些重复强调的信息就是你解题的突破口。
(9)收到面试通知时,请务必认真地回复。信息例如以下:谢谢您,***收到,明天准时參加。
(这里的***是很关键的)
(10)请务必提前半小时达到面试现场,一是熟悉环境。而是能够和已经面试过的同学得到一些信息 的。
(11)一定要全方位额了解这个企业的业务流程和企业文化,重点开发方向。
二:面试题目
(1)笔试第二部分的第二个算法题 + dp算法的解释和说明(结合本题目)
(2)智力题:
问以现有的技术。怎样測量地球海洋的体积 ---- 抽样方法,标记一吨水。一年后抽样
老生的问题。一个人到了一个路口。两条路。当中仅仅有一条路能够通向城堡。有AB两个人。一个人说真话。一个人说假话。给你一次机会,怎样得到去城堡的路。(老生的问
题,是他说的,可我却是第一次。回答的不是非常好)
(3)接着问的是笔试的最后一个算法题,我就把mapreduce 解说了一下,解说了一下为什么要用它,正好符合题目要求嘛!我重点说了一下,句子拆分那一块自己不是非常了
解。可是把自己的算法复杂度非常高的分词方法说了 。看样子。面试官对hadoop不是非常懂的样子,mapreduce就更不用说了,由于他问了一个非常捉急 的问题,你在linux以下
编写过程需吗?(hadoop就是在linux下啊),我就把我的hadoop环境说了一下,顺便把vim的基本操作会主要的操作。
(4)问我read fread fstream用过吗?我说fread是读写文件的,read是干什么的?我预计,他是看出我不太懂。有直接问我你STL用过吗?用过哪些?我说map vector list ,接
着他给我出了一道题目,姓名 成绩(姓名可反复)。用map实现按分数排序,记住一定要用STL实现的。我纠结了半天,你能够不局限用map的我说用vector。结果还是没有
弄好,可是我说出了自己的想法,我说我排序时卡在分数list上了,他说,你能够直接云算符重载啊,在调用比較函数。
(5)接着说了句你的笔试成绩不错的嘛!string类用过吧。strip split用。我直接说了split是分词的。strip倒是反问 了他一句,他没有回答。直接问我你实现一下split吧 ——
好吧,第一次写完整的代码,和第一次的dp加一起才算两处代码书写。
(6)后来又讨论到分词。我之前说过,中文分词的,情感分词的。给你一句话你是怎样分词的
(7)问了句。今年搜狗来的招的比較晚,你之前拿到过offer了吗?我感觉我非常拙计的回答到:已经拿到了offer,可是不是非常理想,岗位不是自己想要的(我感觉应这样回答会
更好,之前不是我喜欢的企业文化,前提你得懂搜狗的企业文化);
(8)之后顺势问了我一句,你想应聘哪一个岗位?拙计的问题最终来了,我说c++研发,他说,你的java项目是JavaWeb啊,我说JavaWeb会用,可是细节不是非常了解。并且个人倾向于c++,(好捉急啊,自己应聘的是c++研发,却写着项目经历全是是JavaWeb的)他说你能够算法开发啊,我说我听说研发非常是锻炼人的。想从研发做起。我对一些算法的优化不是非常强项。等通知。。。。
(9)中间还问过我一个问题就是:你做过多线程的程序吗?我也不知道人家问的是java的还是c++的,直接回答说自己写过java的多线程。他追问。怎么实现的,我说通过sys什么玩意实现的,当时仅仅是练手,很easy。之后他就没有细问。。
(10)接近最后的时候还问了一个以搜索引擎为背景的问题: 每天用户进行关键词搜索。可是词频高达90%的以上的词占总数的不到10%,而那高达90%的关键词却搜索的次数却很少,问怎样依照词频进行排序?想了一会,用堆排?不好……之后问了本次面试中的第一个问题。是只对!10%的高频词进行排序吗?面试官:不是。是所有排列。我:我用快排,第一次partition的时候,用抽样的方法进行划分,以下的partition就不用了 —— 不知道我回答的正确了还是他懂我的意思了,就说好的。进入下一个环节了(好几次这种情形)
三:感悟
(1)充分的准备是前提:笔试基础知识,面试技巧方法演练
(2)面试中的应变能力測试,和面试官的眼神交流(感觉自己这一点很的欠缺的)
(3)礼仪,礼貌方面的測试。
(4) 最后的感悟:自己准备非常渣的,stl就是一渣啊,自己用的stl居然是java里面的,并且并非非常好的。一知半解。一定要精通一门语言,c++ 或 java,不要交叉的啊。
哪一门须要。没有和面试官进行有效交流,自己得到的面试题目的信息不是非常多,交流太少。还问了一个排序题。
(5)一定要和面试官进行沟通和交流。特别是出题环节,一定对不清楚的地方进行询问,比如map那一个题,能否够创建struct结构体?海洋体积估算。是否有时间限制等等。一定不要留下,你觉得他懂他却不懂。他觉得你懂,你却不晓得的局面;有效的沟通也会给面试官留下好的印象的;更拙计的局面可能是这种:面试官由于某种原因(多数由于疏忽,或者觉得你懂。人那么多,能不疏忽吗)把面试的题目叙述的不清楚。或者给你的前提条件不够,或者一不小心给描写叙述错了,怎么办?此时的及时询问是很有必要的。
四:阿里电话面试(实习生内推)的尴尬之局
(0)人家内推的是Java研发,我后来因为种种原因改成了c++研发,这是导致后面比較尴尬的起始原因
(1)面试我的人就是内推的人,陈超—— 很尴尬。一个Java方面的project师,和一个C++研究岗位的人谈论技术,最后连我自己都不知道最后问的我是c++吗?问我字符串拼接—— 我回答的是string类里面的append 函数或者+。他接着就跟我说String类的对象是常量。没有append函数的(呵呵,回来后我一查才知道这是Java的东西)。你说的append 函数是StringBuilder(StringBuffer类的吧)(呵呵,回来后我一查才知道这是Java的东西),还让我回答 + 和 StringBuilder 类的append 函数的差别?—— 经验值:事先一定要确定公司的定位,了解公司的核心岗位和缺口最大的岗位,有的放矢的准备一篇简历(至少准备两篇以上的简历),避免java面试 c++或者前台面试后台。(当然,还是自己有些盲目,没有分析公司,后话——有时真的须要投缘)
(2)询问我的算法问题—— 排序算法还是dp算法,剪枝算法 —— 原来指的是排序算法。我回答了高速排序(quicksort)、堆排序(heapsort)、归并排序(mergerSort)、以及冒泡算法(BubbleSort),让我解说了一下quicksort和heapsort(后话。我是不是应该问一下。要是手写代码就好了。仅仅能描写叙述一下核心思想了),我就是说了一下快排中的核心partition过程。每一次的取一个数作为key值最左面的作为key值(事实上,自己应该说一说取key值的策略的。每一次都取得左側或者random一下更好(O(NlogN)),当时。也没有询问老师是按从小到大还是从大到小排列 ),堆排更是三言两语说完了。主要是向下调整的过程(呵呵,预计自己没有讲清楚)——经验值:表达能力很欠妥。语序和前后逻辑不够缜密,说了半天人家并没有明确你的思路或者想法,一旦你没有表达清楚或者清楚。人家就觉得你不会不懂。
(3)Hadoop 的Map 和 Reduce的过程。自己也是三言两语的说过去了;问我顺序存储和链式存储的差别。自己也是根本没有条理的就回答了。Map处理员工的ID号(数字+字母),我是说的ID映射为int型的作为key值,其它基本信息作为value值,可是他追问我假如员工的人数比較多,怎样处理?二次哈希(主要的概念忘了。如c)链地址法,b)再哈希法 )经验值:准备不够充分,一些细节和基础的东西记不太清楚了。忘得一干二净了,再加上紧张,前后逻辑都乱了。
(补充,hash函数的选取 ——除留余数法:取keyword被某个不大于散列表表长m的数p除后所得的余数为散列地址。
即 H(key) = key MOD p,p<=m。数字分析法:分析一组数据,比方一组员工的出生年月日,这时我们发现出生年月日的前几位数字大体同样,可是我们发现年月日的后几位表示月份和详细日期的数字区别非常大。假设用后面的数字来构成散列地址,则冲突的几率会明显减少。物理结构有:线性存储结构和非线性存储结构,线性存储结构有顺序、链接、索引和散列4种结构。非线性存储结构有树形存储结构、图形存储结构;顺序表的特点是逻辑上相邻的数据元素,物理内存位置也相邻,预先分配空间,可以依照元素的序号随机訪问元素。如数组,插入、删除须要移动N/2个元素;连式存储:不一定相邻。用指针实现元素之间的逻辑关系。动态分配内存,插入、删除比較方便,不可以随机存取元素。
(4)关于项目问的问题比較多,问的也比較具体,深挖的也比較深:可是对于一个项目来说,难点和重点既有前台也有后台,你怎么说怎么讲、側重点最起码得和你应聘的职位联系起来,主动的向自己熟悉的方向上讲。不能一塌糊涂的什么都讲。什么都说。(要是知道面试官的背景就好了),就是说一个项目至少要准备前台和后台比較有特色的两个点子。到面试的时候,依据情况讲一个。再准备一个算法方面的科研项目。
180KB能够存储多少个西文字符?多少个中文字符?
每一个西文字符为1字节(8bit位)。每一个中文字符为2字节(16bit位)。180KB能够存储180K个西文字符。90K个中文字符。只是,要余留10%
的空间。就象库里放东西,塞的超量了找取起来就麻烦了
最后一句经验:电面一定要找一个环境安静 信号好的地方。有效的交流是很有必要的,挑战你自己的语言表达能力;做好充分全面的准备。