- 公司环境
1.1硬件环境
1.2公司文化 - 面试题目
2.1c/c++部分
2.2算法部分 总结
1. 公司环境
1.1硬件环境
①每人一台台式机和一台MAC笔记本;②coffee随便取;③早中餐免费供应
1.2公司文化
①20**年创业公司②分离于搜狗,做全球旅行方向③主要从事自然语言处理,数据挖掘方向
2. 面试题目
综述:面试官人很nice~;先问了自己做过的项目(babala~babala),说了蛮多;然后问些比较基础的题目;手写相应的算法;想了解的公司的具体情况,以及实习时间安排(后话了…)
2.1c/c++部分
2.1.1STL当中vector和数组区别
①数组定长,vector可以动态增长②vector提供了许多方便的库函数③vector特点简述:动态分配策略只增不减;其capacity()有一个固定分配,方便push元素的内容重新分配;当添加元素超过以前的容量时,新分配一块空间(原则是两倍),两部分元素(原来元素,push的元素)拷贝到新得空间中;析构以前的内存空间
http://www.cnblogs.com/biyeymyhjob/archive/2012/09/12/2674004.html%20%E5%8F%82%E8%80%83“>参考链接
2.1.2深拷贝与浅拷贝的区别
浅拷贝本质:两个指针指向同一块空间
因此,在内存析构时,①指针会释放两次;②任何一次的变动都会对数据结果产生影响;③因为第一次已经释放,第二次内存释放会出现问题
参考链接:2.2算法部分
2.2.1k-means算法思想
①随机选取k个中心点②将与其中近的点归属为一类(共k个类),计算其质心③将质心作为输入的中心点④迭代②③过程 终止条件:输入的终止次数或者质心不在发生改变。
参考链接:http://blog.youkuaiyun.com/qll125596718/article/details/8243404
2.2.2链表反转
leetcode的经典题目
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head)
{
if(!head||!head->next)
return head;
ListNode*pre=head;
ListNode*p=head->next;
pre->next=NULL;
while(p)
{
ListNode*q=p->next;
p->next=pre;
pre=p;
p=q;
}
return pre;
}
/* ListNode* reverseList(ListNode* head)
{
if(!head || !head->next)
return head;
return reverse(head, NULL);
}
ListNode* reverse(ListNode* head, ListNode* add)
{
if(head == NULL)
return add;
ListNode* temp = head->next;
head->next = add;
return reverse(temp, head);
}*/
};
2.2.3找连续子数组的最大和(于搜狗面试)
leetcode经典题目
class Solution {
public:
int maxSubArray(vector<int>& nums)
{
int max=INT_MIN;//
int sum=0;
for(int i=0;i<nums.size();i++)
{
if(sum>=0)
sum+=nums[i];
else
sum=nums[i];
max=sum>max?sum:max;
}
return max;
}
};
3.总结
I.题目都非常简单,都来源生活当中的积累;II.让我们一同学习,共同努力,明天会更好!