360面试被虐

奇虎360面试总结 一共三面,2面介绍,1面hr。由于我在北京,投递岗位地点在上海,所以选的是视频面试,一天内面完。 一面 基础+两个算法题 算法题1:将排序二叉树拉直成有序的双向链表 之前做到过,直接上代码 struct TreeNode{ int val; struct TreeNode* left; struct TreeNode* right; }; TreeNode* treeTo... 阅读详情


今天去参加360的面试,怎么说呢,可能没有太过重视他了。之前被各种虐,觉得虐的不够安心,不心服,今天去360 ,一面就挂了,想想,后来和同学交流,发现自己学的和思维就像一坨屎。总结下来,就是自己在碰到一个之前没有遇见的问题的时候,就容易慌张,加上的是 基础知识不够 深刻吧。失败了,男儿何曾需要泪水,谁要不是从不会学的呢。慢慢总结一下吧。

面试官第一个问题,就是在纸上写了一段代码。

#include<iostream>
#include<vector>
using namespace std;
class A{
public :
	A():data(0){
		cout << "constructor"<<endl;
	}
	A(const A& a){
		cout << "copy constructor"<<endl;
		data = a.data;
	}
	A& operator =(const A& a){
		cout << "assign constur"<<endl;
		if(&a == this){
			return *this;
		}
		data = a.data;
		return *this;
	}
	void setData(int d){
		data = d;

	}
	int getData() const{
		return data;
	}

private:
	int data;
};
int main(){
	vector<A> av;
	A a;                             //1
	av.push_back(a);                 // 2
	vector<A> av2;                   
	av2 = av;                      // 3
	vector<A> av3;
	av3.assign(av.begin(),av.end());             //4
}
他问的是 每句话都 调用什么构造函数。当时因为没有考究过这些东西,有点慌了,还是基础不牢吧。

第一句话,肯定是构造函数了,没有什么好说的, 第二句话,假如push_back是指针的话,不会调用构造函数,但是假如是对象的话,调用的拷贝构造函数。我也算是答对了。不过这里有一点要注意的是,vector的内存扩展原理,假如在push一下的话,会拷贝两次,然后析构一次。还有一点需要注意的是vector有一个resize函数,这个函数是用来调整vector的大小,可以用来删除或者增加vector的元素。 增加的时候,有个特点,就是他会根据要增加的大小,一次性的扩展内存,而不是二倍二倍的扩展。

第三句,虽然是赋值语句,但是其实还是调用每个元素的拷贝构造函数。 第四句, 虽然是assign 但是调用的还是拷贝构造函数。这一个我回答错了,当时看primer也是不用心,因为c++11有一个emplace,讲的是调用每个元素的构造函数,其实应该讲的是拷贝构造函数把,我的理解有错的话,希望大家指正,而我记成了构造函数,所以说assign是构造函数。可恶的面试官竟然点头嗯嗯。哎。。。。



第二个题,由第一个题引出,讲的是 vector的内存增长方式,我讲了二倍增长,然后他问了一个问题,真的是蒙了,不会思考了,问我push_back的时间复杂度,我第一反应是o(1)但是,想到内存的扩展,会不会不是o(1)了。后来想想,按着等比公式算一下还是o(1),哎,我只能说这个面试官太聪明了,把我虎住了,自己太渣了。


第三个问题,估计看我对复杂度薄弱,就开始死问复杂度的问题,问我知不知道map是用什么实现的,我说红黑树,问我查找插入的复杂度是多少,我说是log(n),然后机智的面试官又问,删除呢,当时我犯嘀咕了,不一样么,难道不一样?额。。。好吧,又蒙了。。。我这性格啊,我这个基本功,感觉被面试官刷了一个。


至此 面试失败,在这一路,面试官一直在嗯,默许的点头,我不知道为什么会是这样,360的面试官还奇怪,别人即使在渣,大老远跑来,你就算不要,为啥当时就说不对呢,感觉自己被戏耍了一样啊。哎,,,也怪自己,这些基础都没掌握就敢说熟悉c++



同时面试的还有我们班的一个女同学,她问了一个指针和引用的区别。

我回忆了一下。 

语法上讲: 指针不用必须初始化,而引用必须初始化。

指针可以指向空,而引用不可以指向空。

一旦申明,指针不可以指向其他的地址,也就是说指针是变量,而引用不可以,引用从一而终,是别名

实质上 :  引用在内部也是用指针实现的。编译器做的。


然后写了一个笔试题,就是 max subarray的,就最大子数组的和最大。这里我手写出程序,回忆一下吧,虐成狗自己被,假如我碰到的是这个面试官,会怎么样。

int maxSubArray(vector<int> nums){
	int maxv = INT_MIN;
	int cur = 0;
	for(int i = 0; i < nums.size(); i++){
		cur += nums[i];
		if(cur > maxv){
			maxv = cur;
		}
		if(cur <= 0){
			cur = 0;
		}
	}
	return maxv;
}
然后ac了。这一题算是完了。


然后 又出了一道stirng 类的 拷贝构造函数和赋值构造函数。

class string {
private:
	char *str;
	int len;
public :
	string(char * data):str(data){
		if(data == NULL){
			str = new char[1];
			str[0] = '\0';
			len = 0;
		}
		len = strlen(data);
		str = new char[len+1];
		strcpy(str,data);
	}
	string(const string& data){
		len = data.len;
		str = new char[len+1];
		strcpy(str,data.str);
	}
	string& operator = (const string& data){
		if(&data == this){
			return *this;
		}
		delete[] this;
		len = data.len;
		str = new char[len+1];
		strcpy(str,data.str);
		return *this;
	}
};

二面是 一个快拍, 写过多次了 不过我一次都没有被面到代码如下:

int partition(int *nums, int p, int r){
	int i = p-1;
	int val = nums[r];
	for(int j = p; j < r; j++){
		if(nums[j] < val){
			swap(nums[++i],nums[j]);
		}
	}
	std::swap(num[r],nums[++i]);
	return i;
}

void quickSort(int *nums, int p, int r){
	if(p < r){
		int q = partition(nums,p,r);
		quickSort(num,p,q-1);
		quickSort(num,q+1,r);
	}
}
第二题是 最小堆调整的,就是往最小堆里插入一个数字,然后调整一下。算法导论上有例子,我试着回忆了一下,手写一下在:

int insert(int *num, int val, int &n){
	n++;
	num[n] = val;
	int i  =  n;
	while(i > 1 && num[i] < num[i/2]){
		swap(num[i] < num[i/2]);
		i /= 2;
	}
}
总体来说,这两面质量还是挺高的, 虽然自己对这些也比较熟,但是运气使然,没有赶上这样的面试官 也就无缘360了。 


写到这里,360面试 就算完了,欠缺呢? 对数据结构不熟吧。 下面是一些资料。


AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(log n)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。

节点的平衡因子是它的左子树的高度减去它的右子树的高度(有时相反)。带有平衡因子1、0或 -1的节点被认为是平衡的。带有平衡因子 -2或2的节点被认为是不平衡的,并需要重新平衡这个树。平衡因子可以直接存储在每个节点中,或从可能存储在节点中的子树高度计算出来。

一般我们所看见的都是排序平衡二叉树

 

二、一般性质

AVL树具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在平衡二叉搜索树中,我们可以看到,其高度一般都良好地维持在O(log2n),其各操作的时间复杂度(O(log2n))同时也由此而决定,大大降低了操作的时间复杂度。另外,最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列。

 

三、一般操作

AVL树的基本操作一般涉及运作同在不平衡的二叉查找树所运作的同样的算法。但是要进行预先或随后做一次或多次所谓的"AVL旋转"。

1.插入

向AVL树插入可以通过如同它是未平衡的二叉查找树一样把给定的值插入树中,接着自底向上向根节点折回,于在插入期间成为不平衡的所有节点上进行旋转来完成。因为折回到根节点的路途上最多有1.5乘log n个节点,而每次AVL旋转都耗费恒定的时间,插入处理在整体上耗费O(log n) 时间

2.删除

从AVL树中删除可以通过把要删除的节点向下旋转成一个叶子节点,接着直接剪除这个叶子节点来完成。因为在旋转成叶子节点期间最多有log n个节点被旋转,而每次AVL旋转耗费恒定的时间,删除处理在整体上耗费O(log n) 时间。

3.查找

可以像普通二叉查找树一样的进行,所以耗费O(log n)时间,因为AVL树总是保持平衡的。不需要特殊的准备,树的结构不会由于查找而改变。(这是与伸展树查找相对立的,它会因为查找而变更树结构。)

http://www.cnblogs.com/biyeymyhjob/archive/2012/07/24/2606718.html

 上面的性质可以看出   平衡二叉树的所有操作都是log(n)而

AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多;
红黑是弱平衡的,用非严格的平衡来换取增删节点时候旋转次数的降低;
所以简单说,搜索的次数远远大于插入和删除,那么选择AVL树,如果搜索,插入删除次数几乎差不多,应该选择RB树。

红黑树上每个结点内含五个域,color,key,left,right,p。如果相应的指针域没有,则设为NIL。
一般的,红黑树,满足以下性质,即只有满足以下全部性质的树,我们才称之为红黑树:
1)每个结点要么是红的,要么是黑的。
2)根结点是黑的。
3)每个叶结点,即空结点(NIL)是黑的。
4)如果一个结点是红的,那么它的俩个儿子都是黑的。
5)对每个结点,从该结点到其子孙结点的所有路径上包含相同数目的黑结点。

http://blog.youkuaiyun.com/sup_heaven/article/details/39313731

所以红黑树的复杂度肯定也是log(n)

所以c++中 map set搜索插入删除 的复杂度为log(n);

我应该会在后续的文章中总结 红黑数和 B+数的知识点,毕竟还是会被问的。

然后关于构造函数那一块也有必要在写个文章总结下


记360实习面试 个人年级:大三 面试部门:搜索部(好搜||One Box) 先说个人看法,我认为360 的面试给我的体验远远比阿里给我的好。 说起来也怪,本来是已经错过了2015年上半年实习生的招聘,然而无心去打了一波ACM校赛拿了个银却换来了一次360的面试机会。 结合个人技术特点(基础算法、数据结构、NLP、机器学习)我更倾向于360的搜索部,通过洽谈,得到了面试机会。 当天是约的下 阅读详情

相关推荐

360面试准备

360面试准备 C++新特性 1)lambda表达式 for_each (array, array + SIZE, [] (int a){ cout << a << ” “; }); lambda 表达式可以方便地构造匿名函数,如果你的代码里面存在大量的小函数,而这些函数一般只被调用一次,那么不妨将他们重构成 lambda 表达式 作用:使得代码更加简洁2)自动

我的新博客 4804

【今天黑一下学校教务系统】某学校渗透测试远程命令执行(已授权)

我和小伙伴们都惊呆了

shandongjiushen的博客 5624

360移动安全岗位实习生笔试和面试之旅

之前抱着试一试的心态投了360的安全岗位,个人觉得移动安全在未来会有很大的需求量,并且人才比较少,安全圈子本来就很小,安全技术本来价值就很高,所以很多大公司以及真正的黑客很少分享一些安全方面的技术。这些感受是我作为一个脚本小子半年来的感触,毕竟,想要使用别人的代码并不是一件轻松的事情。 而且安全岗位的压力是比应用开发大很多的,特别是在一些大型的安全事件产生后,我们必须及时的追踪和关注。 做安全

koozxcv的博客 5650

360三面面经,已经拿到了offer

我的方向是企业安全-安全开发岗,360三面已经面完了,最后一面是hr面,这是我的面经希望能给大家一点帮助,希望大家都能心想事成。展示部分问我各个功能,以及某些功能的一些具体细节,比如协议排名都有哪些数据,该功能模块的意义,某些协议的多可能存在问题。nmap扫描原理,Nmap扫描中的一些细节,针对什么情况使用哪种扫描。简述ddos定义,以及你知道的ddos攻击,该攻击的原理是什么。主要是针对我项目中的问题,问的贼细,具体到采集以及展示。项目介绍,担任的角色和工作,技术细节,技术难点。

jennycisp的博客 1543

c++岗位面试总结(360)

最近面了360的c++岗。总结一下 第一面基本上是基础面:组内的员工 第二面负责人级别,可能是脱离了技术岗的人来面试,看重项目经历,同时关注你的人生态度。 第三面就不知道了。。。 需要覆盖的知识面: 1、操作系统 2、计算机网络 3、数据结构和算法 4、语言特性(c++) 基本上所有的岗位面试,这些基础我觉得都是必考的,如果是java web岗(之前投

ajcaizixi的专栏 2257

360面试——产品实习面试

1.自我介绍这是基本流程的第一步,务必事先准备1-3分钟时长的自我介绍,内容以展示自己能力与岗位匹配为主,由于没有相应实习经验,我的做法是通过学校项目与学过技能来提现以岗位的匹配度。2.面试提问自我介绍结束就是面试官提问环节,主要分为两个部分。第一部分是针对简历进行提问,所以对于简历上写的东西要做到能详细回答,建议参考STAR原则回答,即情景(situation)、任务(task)、行动(action)、结果(result)模式:在什么情景下任务是什么,采取了怎样的行动,得到了怎样的结果。

FPGA/MATLAB学习教程/源码/项目合作开发 920

360面试之为什么总是被大公司鄙视

今天去360面试,对于这种大公司,我已经到无任何希望无任何感觉的地步,3个星期,连续被5家大公司,浪潮、亿阳信通、启明星辰、百度、360拒绝,来京6年,而立之年,正当有为之时,确是如此不堪。 真该转行了吗? 或者创业? 干什么是个问题! 360面试题目,12道题目 1.一段程序,有全...

lydstory123的专栏 1912

2025海外代理IP深度横评:Bright Data、IPFoxy、SmartProxy等六大服务商实战对比

本文深度横评2025年六大海外代理IP服务商(Bright Data、IPFoxy、SmartProxy、IPIPGO、Kookeey及青果网络),基于实战测试数据,从IP池质量、速度稳定性、性价比等维度进行对比。针对跨境电商、数据爬虫、社交媒体管理等不同业务场景,提供精准的选购指南与避坑建议,帮助企业用户根据自身需求选择最合适的代理IP解决方案。

weixin_29196891的博客 434

3年Java程序员奔着20k跳槽惨别虐,小米+360三面面试题揭露

点击原文链接更多精彩内容(面试答案文档+电子书)免费获取! 小米 一面 1. 线程池用过哪些,线程池有哪些参数,然后问我几个常用线程池的用法和实际场景问题。 2. 集合框架的知识,hashmap,ArrayList,LinkedList源码相关知识,基本整个介绍了一遍,与hastable,concurrenthashmap相互的关联和区别 3. 说几个垃圾回收器,cms回收器有哪几个...

weixin_45137090的博客 535

树莓派c语言串口通讯程序

在网上搜了很多关于树莓派串口通讯的例子,但是都是用python写的,虽然python很有名,而且最近也在学习这门语言, 但是还是想用c语言实现一下,因为需要用到整套系统里,其他内容都是用c语言写的。但是网上没有找打现成的。 还好,之前做过天嵌2440开发板的串口程序(参照天嵌工程师提供的代码),发现串口程序其实是通用的, 驱动层屏蔽了硬件细节,个人猜测,几乎所有移植好的系统的串口,都可以用一

realank的专栏 1万+

飞牛fnNAS搭建web版微信

摘要:本文介绍了一种通过Docker在飞牛NAS上部署微信客户端的方法,实现24小时同步微信聊天记录。具体步骤包括:1)激活飞牛NAS的Docker功能并配置镜像加速源;2)创建专用文件夹并下载docker-wechat镜像;3)设置容器参数并部署微信客户端;4)通过局域网或ZeroTier内网穿透实现远程访问。相比传统Windows/Linux方案,该方法资源占用更低,适合需要长期保存微信聊天记录的用户。

dgnankai的专栏 3330

可爱的360面试官

校招季最让我难忘的是360公司,纪念那可爱的面试官。            说起360,大家都认为是流氓。我大一大二也这么认为,什么偷隐私啊拖慢电脑运行速度啊,不小心装上360大全啊什么的!还有什么3Q大战等等等等。半年前在实习,公司里面给每个人发了一本红衣教主的《拒绝平庸》,读了之后我才发现360其实没那么流氓,因为行业里面大家都流氓,周鸿祎只是不小心顶了一个流氓软件之父的名头大家才都攻击他

Nvidia_inside的专栏 957

手把手教你从入门到精通C# Modbus通信

本文是《Modbus通信从入门到精通》的导读,本专栏将会详细介绍ModusRTU 、ModbusASCII、ModbusTCP这三种协议的C#实现,由一个高级工程师多年实战经验总结而成,绝对干货!

qq_34059233的博客 1万+

记两次面试经历-360与百度

作为一个非互联网行业的工作一年半的初级前端,最近有幸被360和百度的HR看中,去参加了面试。         第一次面试是去360,准备了有2、3天,因为从毕业到现在是第一次去别的公司面试,十分认真对待,也仿佛看到了实现自己在学校就想去大型互联网公司愿望的希望。约了10点面试,HR把我带上楼,让我坐下等了一会,周围的办公环境还是蛮好的,最大的感觉就是开放性。15分钟左右,一个看着年纪不大的面试官

大橙子的专栏 7227

第44节:cesium 大雾效果(cesium自带)(含源码+视频)

cesium 大雾效果(cesium自带)

qq_29384639的博客 1702

【知识图谱】实践篇——基于知识图谱的《红楼梦》人物关系可视化及问答系统实践:part1项目介绍与环境准备

看到这篇文章的你,相信对知识图谱相关概念不在陌生。知识图谱相关内容在实际开发中包含两个部分:1.知识图谱构建,2.知识图谱使用。知识图谱构建过程中涉及内容、技术都比较多。知识图谱的应用也逐渐在我们的生活中随处可见,其中基于知识图谱的问答系统就是其中的一个应用。基于知识图谱的问答系统称做KGQA(knowledge graph question answer),也有人称其为KBQA(knowledge based question answ).基于知识图谱的问答系统通常是使用的是领域知识图谱。下面就结合Git

让算法融入生活,改变生活! 4716

360面试

面试时间:2018年3月26日 11:30面试部门:360企业安全面试职位:测试工程师      先是电话面试了一些,聊了聊自我介绍,还有一些非技术类的问题。      1、为啥要转测试?(我描述的主要是对测试感兴趣和让我觉得有成就之类的,但是反问我开发做的好一样能有成就,然而我没能给怼回去)      2、工作中引以为傲的事情。      3、平时写测试用例么?测试用例是如何管理的?      ...

思维断带的博客 3624

[Godot][入门] 安装与版本选择:3.x 还是 4.x?(按项目类型一键决策)

摘要: Godot引擎版本选择需根据项目需求权衡3.x与4.x。Godot4.x(如4.2)适合3D开发和新项目,支持Vulkan和GDScript2.0,但生态尚不成熟;Godot3.x(如3.5.3)则更适合稳定2D开发、Web导出及依赖现有插件/教程的场景。安装方式极简,官网下载解压即可运行。新手建议:短期高效选3.x,长期探索选4.x,旧项目勿盲目迁移。附版本对比表及决策树,助开发者快速匹配需求。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 910

WEB渗透面试(360)

群友面试亲身经历——360安全面试… 本文关键字:360渗透岗位面试 出自公众号:工程师江湖 一、前言 群友最近在一些大厂进行了面试,整理了一下题,发出来可以参考下。 360 面试的笔试题 如果存在 SQL 注入怎么判断不同的数据库。 (1)注释符判断 /*是 MySQL 中的注释符,返回错误说明该注入点不是 MySQL,继续提交如下查询字符:–是 Oracle 和 MSSQL 支持的注释符,...

斜尘的博客 3248

GEE:基于MODIS数据计算NDVI时间序列,并使用Savatsky-Golay(SG)滤波器对其进行平滑处理

优快云@_养乐多_本文将介绍如何在 Google Earth Engine (GEE) 平台中,使用 MODIS 数据计算 NDVI 时间序列,并对该数据集应用 Savitzky-Golay 滤波器,得到了一个新的平滑后的数据集。Savitzky-Golay 滤波器可以有效地去除信号中的噪声,并平滑信号的变化。该方法可以扩展到基于 MODIS 数据计算的任何指数或者波段。

养乐多的博客 1422

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

360服务端工程师面试经验总结及面试题

面试360服务器端工程师感觉:公司整体感觉氛围很好,毕竟是大公司,技术人员也是非常多,面试比较轻松顺畅。 从一开始就没接触到HR,直接是技术leader打电话让过去面试。开始刚到的时候是一个做技术的小姐姐接待的,说HR比较忙没有时间弄面试,之后就是该小姐姐一轮技术面试。没有进行笔试,直接进行两轮技术面,先是小姐姐技术面试,然后就是技术leader(经理)进行面试,最后让等消息。整体面试挺顺畅没...

晓康的博客 1531

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

360面试总结(Android)

(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总)面试成功其实是必然的,因为我做足了充分的准备工作,包括刷题啊,看一些Android核心的知识点,看一些面试的博客吸取大家面试的一些经验,

2401_85959003的博客 721

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

360Linux 运维工程师面试真题

21、22、23、25、110、143、873、3306 对应的服务是 ftp ssh telnet snmp pop3 IMAP。11、让某普通用户能进行 cp /dir1/file1 /dir2 的命令时,请说明 dir1 file1 最小具有什么。5、良好的沟通、组织协调能力和强烈的责任心、能够随时响应并处理中间件的故障;1、写一个脚本查找最后创建时间是 3 天前,后缀是*.log 的文件并删除。2、写一个脚本将某目录下大于 100k 的文件移动至/tmp 下。

三思博客 1117

我是如何通过360安全面试的?

本文主要分享我的网络安全岗位面试经历,希望对准备求职的同学有所帮助。先简单说下面试前的背景:2023年3月入职360集团安全研究岗,主攻渗透测试方向。篇幅可能稍长,大家多包涵哈。恶意脚本执行示例、漏洞利用场景、CSP头防御未知漏洞生命周期、补丁管理、CVE编号系统服务端请求伪造、端口扫描、云元数据API滥用邮件伪装案例、模拟测试、安全意识模块①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍。

2401_84760527的博客 788
上一篇: 开博了,算是为了找工作,也算是为了不荒废人生吧
下一篇: c++构造函数,拷贝构造函数,赋值构造函数
ituling
博客等级 码龄15年 6粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值