a÷b=b分之a(b不等于零) 真分数和假分数:真分数:比较每个分数中分子和分母的大小,再看看这些分数比一大還是比一小分子比分母小的分数叫做真分数,真分数小于一 假分数:分子比分母大或分子和分母相等的分数叫做假分数。假分数大于一戓等于一带分数:有种数和真分数组成的数叫做带分数。分子除以分母的商做带分数的整数部分余数做带分数的分数部分的分子,分母鈈变分数的基本性质:分数的分子和分母同时乘或除以一个相同的数(0除外),分数的大小不变这样叫做分数的基本性质。约分:就相当於是求分子和分母的最大公因数我们可以用短除法来除若要是正常求两个数的公因数我们就把这两个数所有的因数都求出来,把相同的寫出来把一个分数化成和它相等,但分子和分母都比较小的分数叫做约分。分子和分母只有公因数一像这样的分数叫做最简分数。約分时通常要约成最简分数公因数只有一的两个数,叫做互质数通分:把异分母分数分别化成和原来分数相等的同分母分数,叫做通分可以用短除法来求他们的最小公倍数。分数和小数互化:小数表示的就是十分之几百分之几千分之几.......的数,所以可以直接写成分母是10100,1000...的分数,在化成最简分数??
参加了互娱的现场意向发放互娛给钱还是给力的,可惜我是其中的弟中弟
如果有地方蜜汁空白那就是少了一个+号,编辑的时候不知道怎么就少了许多+号
可能字数比较多大家多担待
一开始投的很少,但是后面被***海投一晚上投了11家公司吧,真的是海投一时爽一天面两场(甚至三场),然后从8月25号开始天天笔试面试我只能把时间都定在中午1点保障不冲突。
面试体验比较差了,从此开始补习后端知识包括计算機网络(面试还没问过) C++(偶尔问) 操作系统(偶尔问,但是 深入理解计算机系统这本书真的是好深深为这本书着迷了,我觉得就算不為面试也得好好看看)
一面:电话面 全程打断buff
答:因为不知道数据类型取数据要判断一下。
(1、python是一个动态的解释型语言;python中的值不是存儲在缓存区而是分散的存储在对象中
2、 Python是一门解释器语言C ++编译语言,也就是说写完 C++程序首先要编译源程序生成可执行文件一个 class文件,洏 Python写完程序提交到解释器,解释器会立刻将第一行代码翻译成机器码然后将这行代码交给 CPU去执行,然后进行下一行翻译第二行代码,再交给 CPU执行所以, Python要比那些编译型语言执行起来要慢
Java是解析语言全是封好的包。)
3、看过那些书(答:python高性能编程)
4、什么是内存泄露什么时候会内存泄露?
(动态申请的内存空间没有被正常释放但也不能继续被使用的情况。没有释放内存)
(可能是关闭进程不确定)
6、指针和引用?什么时候用指针什么时候引用
(指针可以不初始化,引用必须初始化且绑定后不能再变;向函数中传递指针和传递指针的引用的区别:
传递指针,会先复制该指针在函数内部使用的是复制后的指针,这个指针与原来的指针指向相同的地址如果在函数内部將复制后的指针指向了另外的新的对象,那么不会影响原有的指针;
对于传递指针引用如果将传递进来的指针指向了新的对象,那么原始的指针也就指向了新的对象这样就会造成内存泄漏,因为原来指针指向的地方已经不能再引用了即使没有将传递进来的指针指向新嘚对象,而是在函数结束的时候释放了指针那么在函数外部就不能再使用原有的指针了,因为原来的内存已经被释放了)
7、知道那些数据結构
答:堆 数组 列表 栈
答:平时只用数组模拟堆,不知道真实的结构认为是父节点-子节点这样状态的数据结构(超高频问题,一般由程序员分配释放 若程序员不释放,程序结束时可能由OS(操作系统)回收分配方式类似于。向上增长栈的分割开辟在程序运行时进行,内核顺着找到一块足够大的空间交给程序如果没找到就析构调无用内存再找一次,更具体的请自行总结一下并时常复习区别包括申請方式、系统响应等很多)
栈就是存东西的空间,往最里面存出来是最外面出来(超高频问题,函数运行时分配函数结束时释放。由編译器自动分配释放 存放为运行函数而分配的局部变量、函数参数、返回数据、返回地址等。向下开辟速度很快,局部性能好的话会囷寄存器交互存PC指针,函数参数多也会组成栈帧存到栈里面)
(超高频问题我看了深入理解计算机系统后的总结:1、进程就是活着的程序,程序不过是一些文本运行着的程序就是进程,是系统进行资源调度和分配的基本单位掌握资源,包括内存等线程就是轻量级進程,是CPU调度和分派基本单位2、由于进程占有资源,压栈和出栈慢所以切换不灵活,线程不占资源只占必要的资源(递归要压栈所鉯有一点资源),所以线程容易通信->在进程分来的内存中直接通信容易并发->切换灵活,同一进程的线程切换速度很快因此线程开销小3、地址空间,进程独立同一进程的线程共享资源,对其他进程的线程独立)
自我介绍。随便面面就不套蕗了就随意简单介绍一下。
全程面试官语音冷漠感受不到面试情况的反馈。
ifdef(当时就说了这个词懂得自然懂)
(还有 ifndef都一个意思, ifdef是否定義过了; ifndef是否没定义过就这一点区别,都是一个意思因为.h默认就是用来声明的,我们显然不希望include多次不仅效率低,而且变量会被重複声明因此在开头加个判断,如果定义了就不执行下面程序了等等。此语句是预编译需要的语句因为它指明了接下来的程序段要不偠被编译,所以带#表明这是预编译过程,格式上和结束判断一起使用格式一般是
static对全局变量,限制全局变量作用范围链接的时候,變量被分为内部、外部、全局全局变量就是这个可重定位文件内部的全局变量,外部变量就是外部文件的全部变量内部变量就是static修饰嘚变量。作用域就是先全局变量(对应当前的全局变量、然后再内部再外部)内部变量重定位的时候外部变量无法通过自身外部变量的指示找到这个变量,就实现了保护还是屏蔽?总之就是限定作用域
static修饰局部变量,存储位置就从栈变为静态存储区(生命周期变长),函数迭代的时候就可能用到上一次的局部变量
static修饰类内变量,存储位置从类里面转移到外部这样所有的类实体公用(或共用)一个变量。
static修饰類函数类函数因为在外面,看不见类的变量所以只能看到类的static变量,也只能使用它不能用别的变量。
(还有初始化为0这个功能解决偅定义的功能:就是把变量限制在本文件中,和上面一个意思最好都说出来)
3、static类内函数和类内普通有什么区别?
感觉答上一个题的时候答唍了复述一下,提到static变量是共享的要注意就结束
我说链接的时候,extern就是外部的全局变量就去找。巴拉巴拉
还有其他的功能吗?答沒想起来
(还有这个,链接指示功能extern"C"就是用C语言的方法去搞,类比得出extern"其他语言"估计面试官想让我答这个,除了背谁能想到大家都會用,谁不知道还有这个功能灯下黑。。和static默认初始化0一样没答出来)
malloc的功能是隐式空闲(不是通用分配器用的方法是简单的实现),找┅合适大小空闲空间挖出来返回先找一下,找不到申请帮助内核会合并相邻小碎片,重新找一次找不到就调什么什么brk还是rbk去申请更夶的空间(sbrk函数),然后返回的是void*需要我们自己强制类型转换成需要的类型。malloc是库函数
那么new呢?运算符可以重载,如果没申请出来就中斷malloc返回空。new还是一个就是可以输入类型符就是new个int,然后算大小他会把int的大小算进去malloc需要自己算。一个存储区上一个在堆上这两个嘚区别是巴拉巴拉。
(new会调构造函数、malloc不构造函数)
6、堆和自由存储区区别
(我不是刚说了么)堆是C的概念,自由存储区是C++的概念两者在概念仩有根本的不同,但C++沿袭了C实际使用的是一块空间。
7、malloc后的返回值是一个指针然后这个指针可以加数吗?
可以加(指针不就随便加)
能嗎?那么这个值+了几个数后在free会怎么样
懂了,面试官上一个问的应该是这个含义->新空间的首地址可以加么。不可以加这样free的时候内存泄露。
8、你有没有检测过内存泄露
没检测过。我程序最大的问题是重复析构当时想办法解决了这个问题。巴拉巴拉为什么会这样,巴拉巴拉如何解决巴拉巴拉。
(问了问收割大佬以下是原话:VS有个CRTDBG可以打印内存开辟和内存释放,也可以对内存使用情况快拍这是VS笁具,单独的工具有bound_checker功能是类似的其实。Linux是Vargrind)
9、内存泄露会怎么样
和面试官同时回答:占得空间越来越大。
10、重复析构会报错啊
是的。峩的软件中间有一段时间会在主程序在退出的时候会把申请的空间释放掉所以关程序会报错(程序崩掉,就是弹出一个报错框0x什么什么,一个大数字)
用python的角度介绍了智能指针,计数法析构内存python是引用自动析构内存,没有显式指针可用用的是引用,被引一次就+1不被引了就-1。为的0的时候我们就找不到这块变量了,就自由析构了
一边讲一边想到面试官可能要问循环引用了,就讲python本身解决不了用的昰gc垃圾收集器定位然后析构掉。C++用的是weak_ptr解决这个问题(点到即止,懂得自然懂面试官想问就问不问拉倒)
12、智能指针转普通指针注意什么?
说没转过懒得分析说不会。
(找了另一个工具人大佬问了问大佬说智能指针的作用就是帮你把这些东西封装成比较安全的使用的类,洳果把share的指针转化为普通指针这个时候share的又自动释放掉了这个东西,如果这时候此指针当普通指针用会用到已经被释放掉的东西。而weak_ptr轉换为普通指针的时候不会改变计数,引发访问到已被释放空间的时候就会报错,发生如此之风险)
13、调试的怎么调的
用调试器,然後普通调试器不好有的调试器对于地址,不显示地址对应的值还是只显示地址的值(臭codeblock)然后下了个牛逼的版本可以显示的。后面用pythonnotebook好鼡的一批,随便调试
顺势讲,从头到尾心路历程,中间结果最后结果,得出结论我知道,这些东西既可以拖时间拖完时间面试官往往还会非常满意。
logloss啊多分类。然后面试官又问了一遍题目就讲了优化的几种,自己的尝试和效果然后分析自己的里损失曲线的特点和原因。
的深度学习是在做一个基础性平台供使用还是做一个解决方案配套一个任务啊?
python用的多吗,毕竟用户可能用python要统一接口C++做底层?
本来想说-128到+127,突然顿悟答1字节。此题有些意思
上下文切换需要保存的内容?
上下文切换需要保存的内容?
保存PC指针其他的想不起来了。
(保存寄存器由于要切换进程,将当前进程的状态也要保存下来)
1、从数组找三个数,三和与value差最小
2、字符串A 、BB占A最短的子序列(A中最短的子序列包含B)
面试官和我都笑了,因为python切片+in操作符四行结束面试官也笑了,于是我们约定in这一步自己写函数
1、介绍Kaggle比赛(从EDA开始到最后)
2、ID3\C4.5等基本树 是还是多叉树 被切过的特征还会再切吗
离散特征(离散数量>2)是多叉分类,连续是二叉分裂连续可以在切,离散不可以(当时回答的是可以再切被提示后意识到不可再切,说了自己的matlab实现先做集合,遍历特征保存最大的信息增益位置,然后对特征切分切分后把这个特征从集合中删掉,所以离散特征切完就不在切了还好反应过来了,连续性特征可以再切详情可以去看看别人的ID3树和其他树的源代码)
损失等效优化交叉熵,而交叉熵用于衡量分布的一致性
1、预白化,训练快 sigmoid两端饱和梯度小, BN可以缩放到线性区 2、分布学习 NN深了之后每一层分布都会偏移, BN压缩分布使得各层分布趋近于一致 3、 BN可以看做一定程度的数据扩充数據做了抖动处理。注意 BN的训练过程要记得当前批次归一化,预测的时候是全部数据而且 BN层有两个超参数要优化)
4、GBDT和RF哪个树比较深
RF深。說了boost和bagging的思想boost使用低方差学习器去拟合偏差,所以XBG和LGB有树深的参数设置RF是拟合方差,对样本切对特征切构造多样性样本集合,每棵樹甚至不剪枝
5、XGB特征重要性程度是怎么判断的?
答:不清楚但是用的很多,猜测是按分裂点的次数(在所有树的出现次数)只说了這一点
(gain 增益意味着相应的特征对通过对模型中的每个树采取每个特征的贡献而计算出的模型的相对贡献。与其他特征相比此度量值的较高值意味着它对于生成预测更为重要。
覆盖度量指的是与此功能相关的观测的相对数量例如,如果您有100个观察值4个特征和3棵树,并且假设特征1分别用于决策树1树2和树3中10个,5个和2个观察值的叶结点;那么该度量将计算此功能的覆盖范围为10+5+2 = 17个观测值这将针对所有决策树结點进行计算,并将17个结点占总的百分比表示所有功能的覆盖指标
频率(频率)是表示特定特征在模型树中发生的相对次数的百分比。在仩面的例子中如果feature1发生在2个分裂中,1个分裂和3个分裂在每个树1树2和树3中;那么特征1的权重将是2 1 3 = 6。特征1的频率被计算为其在所有特征的权偅上的百分比权重)
6、XGB很容易理解它的回归和二分类,如何理解多分类呢
,用onehot+softmax,但是每棵树如何是拟合softmax前一步呢这个我确实不知道,面試官提示我说三分类构造100棵树还是300棵,我就意识到了回答原以为是100棵。
面试官说构造三百棵树拟合三分类,再softmax
(onehot之后,输入标签是┅个向量对向量中每一个预测点集成一群树)
1、先问你是报的NLP方向不
方法1:堆 分析复杂度是O(Nlogk)(没分析错把)
方法2:快排二分 分析复雜度是O(N)
要求O(N)所以用的快排二分面试官说快排能做这道题?但快排是最快的(我知道的)也正好是要求的O(N)复杂度
(了一下快排和hash朂快,其余都不快)
手写python代码但是编译不知道哪里也错了,这个IDE也不提示面试官也很尴尬,说以前用的可以报编译错了在哪 于是我就說下面的题用C++写(这个问题很严重面试的时候找不到bug,所以一定要小心python一定要bug free,不然老实用C++)
地板n*3木板1*3,几种排法
造等概率1-10分析调鼡1-7的次数期望
7进制,调用两次产生 0-48然后截掉 40和 40以上的再 //4+1
期望不好算,是个数等比列求和然后我就口算的近似值2.5n
想一想,可能是面试官壓力面我所以才会质疑快排把,分析了为什么是O(N)而不是面试官说的O(NlogN)
七险一12%金+高base+不让大小周了一周干5天
效率很高,交完简历一忝就面试了
一面很顺利二面一百分钟,在和面试官的交流中学到了很多东西
一面:过于顺利导致我小本本上什么都没记
一面顺利对答洳流,以致于问答记录上什么都没记录两道编程。
演都不演问完这个题的所有要求就直接默写最优情况
然后和面试官介绍这样的结果為什么是对的,然后顺便写了O(n^2)的写法
第二题忘了,一分钟结束
都是开放问题没有标准答案,时长一百分钟内容主要是实际推荐场景
從头到尾,讲了各个阶段我的工作各个阶段我的思考,各个阶段我的心路历程
(歪打正着了,面试官想听的应该就是我各个阶段的工作然后遇到的问题,对问题的思考和解决)
你觉得如何衡量用户对搜索结果的满意程度
南呀。我太南了不过我说了TCP连接计时,根据场景過滤计时噪声比如视频场景用视频长度的百分位计时,秒退的有效性等等这点面试官可以满意。然后绞尽脑汁想不出另外一个好特征叻就照着弱特说,比如quary的相关性什么什么的。面试官不满意因为这些东西主要表征用户感兴趣程度而不是满意程度。
你觉得如何解決新搜索结果的推送
回答:新搜索结果肯定历史推送为0,没有任何参考但我们不知道他质量怎么样。于是把他随机推送一小部分用户在推广。再推广时注意刷点击率现象过滤一下,巴拉巴拉面试官很满意。
你觉得如何看待场景和模型
我个人非常注重场景,从自巳的科研经历开讲讲到西瓜书的引言,讲了自己完整的心路历程面试官可以满意。
忘了一部分问题太多了,讲到嗓子哑了但是面試官的指导真的是干货满满啊,没有问模型的一些东西而是怼实际工程,被怼的怀疑人生怼完结束,面试官说会报给主管然后等消息就可以了。
没有内推直接在官网上写的简历,好像也是1天还是2天就面试了但是。
对我们部分感兴趣吗:部门做日志检测 安全领域
10點:继续聊上次的内容
二面结束,但是状态还是二面待安排。
和面试官讨论如何用的方法去处理危险日志检测。从头复习了各大器学習的知识然后教每个模型在这个场景下的有点和问题,也算自我反省了这里能获得的比较突出的经验就是,很多部门还是规则学习为主对的分类情况有强烈的可解释性要求。所以树模型和LR等可解释性好的模型很受青睐呀但最后面试官“感谢”了我,估计是暗示我挂叻桑心
通知笔试五题A了3道半,成绩也还行把但是部门锁我简历。。
通知了“两面”几分钟结束,随便聊聊说9月份现场继续面,嘫后就灰了
按理来说早该结束了呀因为太不匹配了,而且
这个部门没有岗 想找个来开辟一下业务,问我大概要招多少人emm~LR用过吗 用过:Kaggle的二分类检测
只想到三点,特征特征切分和直方图和全
说他们共同点较多 小提一点,又小提了GBDT到XGB和LGB然后扯了扯实际用这两个模型的感受,然后说只记得三点不同了实际效果xgb不输LGB但是调参不好搞,而且LGB很快
1)更快的训練速度和更高的效率:LightGBM使用基于直方图的
2)直方图做差加速:一个子节点的直方图可以通过父节点的直方图减去兄弟节点的直方图得到,从而加速计算
3)更低的内存占用:使用离散的箱子(bins)保存并替换连续值导致更少的内存占用。
4)更高的准确率(相比于其他任何提升):它通过leaf-wise分裂方法(在当前所有叶子节点中选择分裂收益最大的节点进行分裂如此递归进行,很明显leaf-wise这种做法容易过拟合因为容易陷入比較高的深度中,因此需要对最大深度做限制从而避免过拟合。)产生比level-wise分裂方法(对每一层所有节点做无差别分裂可能有些节点的增益非常小,对结果影响不大但是xgboost也进行了分裂,带来了务必要的开销)更复杂的树这就是实现更高准确率的主要因素。然而它有时候或导致过拟合,但是我们可以通过设置|max-depth|参数来防止过拟合的发生
5)大数据处理能力:相比于XGBoost,由于它在训练时间上的缩减它同样能夠具有处理大数据的能力。
7)局部采样:对梯度大的样本(误差大)保留对梯度小的样本进行采样,从而使得样本数量降低提高运算速度
代码水题,直接让面试官选C++还是Python面试官(好像所有面试官回应都是一样)“你选就好”
选的python写的,如果是直播间目前最好不要用python,直播间的python编辑器不行编译几乎不作检查,编译未通过经常不知道错在哪行
棋盘有棋子,只能左上走到右下右走或下走,问最多经过棋孓数
二面:估计凉凉答得不好
自带打断buff的面试官 搞思路搞得很厉害,面试体验差
(gbdt、xgb、lgb凡是提到了一定要熟练掌握)
(Dropout可以作为训练深度神经網络的一种trick供选择在每个训练批次中,通过忽略一半的特征检测器(让一半的隐层节点值为0当然这个“一半”是超参数,自己设)鈳以明显地减少过拟合现象。这种方式可以减少特征检测器(隐层节点)间的相互作用检测器相互作用是指某些检测器依赖其他检测器財能发挥作用。
Dropout说的简单一点就是:我们在前向传播的时候让某个神经元的激活值以一定的概率p停止工作,这样可以使模型泛化性更强因为它不会太依赖某些局部的特征。
其实就是个Bagging策略构造子网组合。)
3、为什么不用先用LR呀(LR这么简单用它干嘛)
用LR做做二分类,做莋stack还是挺好的但LR总感觉表达能力不够,特征比较粗的话效果可能一般
连续性特征交叉连续性特征映射成离散特征后,可以和连续性特征一起送到嵌入层里
5、AUC知道吧,回归怎么计算AUC
不知道怎么计算一查 根本没有..是不是我听错了 他其实想说逻辑回归的AUC怎么计算
(回归没有AUC这么一说)
6、堆和栈哪个开辟的快
脑抽完全说反了,答完很久才反应过来说的是堆编译的时候分配好了,不用再开辟伸缩什么的快栈要伸啊缩啊所以慢(见前面的答案,这个答错了我可以凉凉了)
(紸意重写是对虚函数的重写我当时就答错了,所谓重载就是同名函数参数表不同编译时会对函数改名,其实运行的时候他们已经不是哃名的了;重写是虚函数重写子类对父类的非虚函数在写一遍叫重定义或者隐藏,反正不是重写重写是对虚函数的重写)
8、大数据 买东覀 找买东西最多的100个 怎么做
(堆的实现下面某个面试里写了,看到后面可以参考下)
9、MAP底层怎么做的
我说还没看底层代码(话说我一直不知噵有MAP这种东西存在,都是手撸准备有时间看一下STL分析)
(底层,一种O(log(n)的查找插入和删除数据结构实际是2-3树,伪)
10、有没有O(1) 的?恍然大悟 我擦原来还有
回答了拉链 重哈希 当前 1
(同样高频问题拉链:,冲突了就在后 1个;探测:线性探测二次探测,就比如当前的值 1;再哈希:多个哈希函数)
面试体验特别好,一二面很顺利然后HR又特别好,感觉HR面巳经过了就差中间的交叉面了
这里说一个点:第一次接到面试通知的时候,打开链接是一个界面上面有个面试时间、可编辑框、确定按钮和放弃按钮。
提示写的是: 如果点确定时间将不能更改。我又不敢点放弃打电话问的HR,说写上钟意时间在点放弃就行
第二次面試的时候,这个框的提示语变成了, 如果点确定时间将不能更改,如果时间不合适请写上合适时间并点取消。
我就感觉HR贼好于是二面嘚时候疯狂表达了我对HR工作的满意、支持和欣赏,二面说我的夸奖她会反馈给HR滴所以我感觉HR面是不是已经过了,就差交叉面了
不过我說的都是实话,我确实很喜欢她们的HR
1000以内的最大素数
说了Python能够O(1)空间实现素数生成器,筛选法但是没写,没要求就不写直接bool判断僦好,注意从大到小
分析复杂度如何减少复杂度?从上到下从999开始往下搜,搜到就停每次-2。
bool判断从2到根号x开始,全求模非0跳出False。
但是好像面试官不会python哦于是改用C++下一题
不用除法实现除法,很简单
注意我的写法里C++里abs(一个负数)可能溢出,但是无所谓面试的时候速喥A比较重要平时要注意这些细节,而且python不会溢出
笔试的时候刚准备二进制优化就下一个话题了面试的时候写的,凑合看看吧
个别想不起来了失忆了。
1、为什么没有实习经验
第一点老师不让找工作。(这是真话今天老师对另一个同学说,你找到工作了吗你找到工莋但是毕不了业你说工作是不是白找了,。)
第二点,为了能够接触到实际工程在科研之余,参加了比赛巴拉巴拉。面试官可以滿意
4、L1、L2不同?L1为什么能稀疏
从数学分布讲了,一个是拉普拉斯分布 一个是高斯分布;讲了图解为什么L1能稀疏一个圈一个菱形,容噫交在轴上工程上讲了,L1的近似求导区间内0区间外优化。然后L2是直接求导比较简单
5、哪些学习器是凸优的呀?
LR sigmoid logloss 凸优 线性回归,最尛二乘凸优SVM凸优。NN肯定不凸优因为往往收敛到鞍点。PCA无数学解但是利用特征值去做反而得到最优解。
(注意sigmoid+平方损失不是凸优化)
6、特征重要性你怎么做例如特征组合和删除,调参你是怎么调的呀
答:特征组合用onehot、交叉、EMBEDING。组合的话要看实际分布讲了自己构造过的┅个和标签有线性关系的组合,说自己用的是遍历的方法用两两数学关系构造新特征,看和标签的线性关系
特征删除等想到了某个KAGGLE大佬的特征筛选步骤,从他的kernel我也是学到了很多
第一步祖传参数。比如树模型的深度、采样频率等这个主要还是经验
第二部调参,比如嘗试新特征特征采样频率要设为1啊这种细节
7、知道几种激活函数?
我说最简单的SIGMOID TANH RELU我就不提了讲了讲某个比赛时候用到了leakRELU,然后谷歌的論文里面的s函数随口介绍了一下这个论文。
我嘴贱说这个干吗然后我说忘了,但绝对不是局部最优点看表情面试官可以满意,其实嫃忘了
(结合鞍点图像理解更佳。注意鞍点在一个方向上升所以很容易坐滑滑梯从上方滑到鞍点。另一个方向是下降所以可以坐着下降的滑滑梯下去,但是鞍点这里梯度是0是平的,所以优化就容易困在这里前面多走几步就是滑滑梯但是他无路可走。
鞍点(Saddle point)在微分方程中沿着某一方向是稳定的,另一条方向是不稳定的奇点叫做鞍点。在泛函中既不是极大值点也不是极小值点的
临界点,叫做鞍點在矩阵中,一个数在所在行中是最大值在所在列中是最小值,则被称为鞍点在物理上要广泛一些,指在一个方向是极大值另一個方向是极小值的点。
广义而说一个光滑函数(曲线,曲面或超曲面)的鞍点邻域的曲线,曲面或超曲面,都位于这点的切线的不哃边)
答:的RNN效果,分析RNN在里不好和比赛中RNN前期效果(前期效果最好)
用过GRU吗,为什么LSTM能够记忆长时记忆
答:GRU用过一次,在哪里用的用的记忆门,保证长时记忆传输
答:之前说到了自己用过attention,只用过不知道原理。
10、Dropout为什么预防过拟合
从bagging的角度答的,NN是偏差小方差大的学习器适合用bagging,构造子网络在预测的时候组合相当于构造了学习的多样性,实现了bagging
说了解 但是没写过代码
(协同过滤,感觉一個学生要是搞科研为主还是很难接触到感兴趣的可以了解下,特别是面电商的商品推荐工程师呀还是容易问到的)
12、CTR估计都用什么?
我說LR和FM 代码写过,FM主要是NFM其他的FM都知道理论但是没写过代码
13、是干嘛的你造不?
答:卖衣服滴于是他介绍主要是电商和直播。(听到矗播我差点笑了快憋不住了,就莫名很开心然后他看我绷不住了赶紧说直播是目前发展最快的模块)
顺利,没有撸代码因为时间不夠面了半小时,二面说一面的评语是代码能力特别好所以不写代码了
我的里有一个完整的软件实现,我负责的主要部分超过了1万行代码可能是这一点让面试官觉得我不用谢代码了吧。
其实大部分正常手撸代码都可以(除了字符串是我的弱点)真出到不会的题是真的没辦法
里编码领域内特征组合都是异或,所以用RELU BN提特征BN真的是巨大提升
讲BN原理,公式实现
(可以去看看BN源代码,不长)
为什么用BN压缩异或后映射的正数部分而不是什么什么(没听清)
我提到了BN层也算做了数据扩充,而且BN层把只有0,1的编码流做了抖动转化让梯度能变起来,优囮的更好(可行无非就两点第二点就是优化问题)
为什么用CNN?然后面试官介绍推荐领域内的另一种东西(Embedding)这个Embedding映射了隐向量,你觉嘚是CNN交叉好呢 还是隐向量好呢
回答:(其实我知道Embedding因为一起参加比赛的朋友手撸了NFM,第一层就是这个嵌入层)我的回答偏向于场景编码領域内的一个特点:只有局部相关,时不变所以用CNN,做全局相关的Embedding反而不好推荐里面特征离散化后稀疏,而且特征间本身可能具有高階交互信息所以映射成隐向量效果会较好,如果是推荐我建议用隐向量而不是CNN,其实这是由场景决定的是数据的特点决定选用什么學习器,使用什么网络(我还介绍了图像为什么ResNet更好,但是编码里我的两层极限调参网络性能超过了残差网络其实都是场景决定的)
湔面对答入流,主要是我在介绍自己的比赛从开头讲到结尾,比赛的背景中间的心路历程,最后的处理
一二面如此顺利,交叉面前媔也顺利的不像话败在了一道会做的水题,好气
给定括号流,找到字串中合法匹配的连续对数
输出是3下面我的dp好像最开头多加1个0?泹是无所谓了
回来复盘在notebook上两分鍾写完,真水题后悔啊
没什么拿得出手的东西呀,我主要是而且实际科研要么专业性强(编程都不沾),要么是的东西
说了自己写嘚科研软件代码量1W以上写了一堆报告 其他的简单一提
自我介绍的时候提到了自己喜欢玩(以前玩盗版,现在玩正版steam50级以上,然后快100了)
2、平时喜欢玩什么啊
最近一段时间科研,没玩以前喜欢玩塞尔达、黑魂、怪物猎人等
以前特别喜欢玩炉石,主要是喜欢开包(面试官笑)为炉石花了很多钱,因为我喜欢一个就很愿意支持他炉石的优点在于它有竞技性,而且也是打牌类的所以本身有趣味性,而苴每局有随机性这样每一句的体验不一样。另外一点就是攒金币开包金币多了开包后卡池更新,可以有新的构筑新的体验。这样每過一段时间都会新体验留住用户,我本身也是喜欢紧张刺激的开包环节
5、三道题比较简单,要写测试用例
手撕成功写代码还是比较赽的
python写的编译报错,网查不到错在哪我就赶紧重写了一个
讨论了二分的四个边界条件
共四种,然后说四种情况对应每种的取值范围
返囙st,返回的取值范围是 0到数组长度 ,返回en则是 -1到数组长度 -1
st和en含义不一样,这个最好自己写写理解一下
(更新了一下lower_bound的理解解释了为什么返回值范围是0到len(data)
PS:标准库返回的是迭代器位置,是一个指针我这里从元素的位置概述。
lower_bound 返回数组大于等于value的第一个位置假如数组中所囿元素均小于value,返回尾部迭代器len(data)第一个元素大于等于value,返回0
(第一个元素大于等于value则所有元素大于等于value,则返回0)
从定义看这样定義就不可能返回负1。
找身边的跳动大佬讨论了一下应该没写错了,有误请指正呀
upper_bound返回大于value的第一个位置。同理理论上返回值就不包含-1。
标准库的写法里返回的是st。
加入返回的是en呢那么返回的含义是什么呢?即返回的st情况-1
注意C++标准库返回的是指针
python手撕又报错,然後无IDE查bug还好查到了print大发好,对python如果print(“XXX”)没输出东西就说明没运行这一行。
左旋转自信一波分析写完是右旋转,一脸懵逼怎么看都昰左旋转跑完就是右旋转
然后再那试了试改i,j,然后第二次就输出对了晕,运气比较好
然后循环是先行后列(这样局部性更好运行速度赽,更容易缓存命中当然面试官也没问我也没提)
写法应该是对的,但我不敢改成行列不相等的情况万一错了呢.PS:想了想应该不对,因為new数组我照着data开辟的应该行列反过来开辟才对,先行后列构造的话正好对应旋转后的情况幸好没深究,不过这种bug很容易改print()大法print一下僦出来了
问问题:好希望他问我的东东,这样我就能装逼了然而
6、静态内存和动态内存?
讲了static和堆栈是静态,编译的时候决定了大小,动态內存可以自由开辟->堆也不知道对不对。
(回来问了问另一个收割大佬,应该是这样)
说了向上开辟速度慢、运行时改,然后开辟的過程存着下一个位置和这一块有没有使用,如果没找到就析构合并内存再找再找不到返回null(可以参考前面的答案)
说了向下开辟、速喥快、编译时分配、主要是存PC指针,然后函数入口参数多组成栈帧存进去等着恢复
1、一个是函数(面试官没问但我自觉呀,诚实回答忘叻是哪个头文件里的了事后查了查是stdlib我擦我天天写没想到是这个)一个是关键字
*),强转后按转完后的类型用,要自己算大小;new的时候传类型就比如100个int,然后直接开100个就好了他自动将int长度算进去
3、malloc再堆上,new在自由存储区(然后回答忘了自由存储区再哪了) 讲着讲着忘了free和delete嘚事了
(自由存储区和堆似乎是概念上的区别我丢,深入理解计算机基础是按C讲的我哪知道C++的自由存储区和C的堆有啥区别呀,按理来说假如new是依赖malloc实现的那么他们不该开辟于同一块区域么。C++默认在堆上开辟new需要的空间所以new来自自由存储区和堆都行。
自由存储区是C++中通過new与delete动态分配和释放对象的抽象概念而堆(heap)是C语言和操作系统的术语,是操作系统维护的一块动态分配内存
new所申请的内存区域在C++中稱为自由存储区。藉由堆实现的自由存储可以说new所申请的内存区域在堆上。
堆与自由存储区还是有区别的它们并非等价。
10、智能指针叻解不
我从python的内存管理角度讲了计数法析构内存,和智能指针原理一致但我自觉诚实的说出我没用过智能指针
11、python怎么解决循环引用的?
是不是想问我智能指针的循环引用解法我忘了呀,我就直说python本身解不了循环引用的问题(这实话实说确实解不了,python又不是神循环引用要靠自己析构,对python来说循环引用的东西就算程序关了都还在),但python有个库函数可以发现循环引用位置然后调用垃圾收集器析构掉僦好(其实就是定位内存泄露,然后gc把它干掉)
12、计网了解不计算机网络TCP和UDP的区别?
答自学回答了很多,挺详细了
(UDP主要用于那些对高速传输和实时性有较高要求的通信或广播通信
TCP用于在传输层有必要实现可靠性传输的情况
1、TCP面向连接(如打电话要先拨号建立连接);UDP是無连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务也就是说,通过TCP连接传送的数据无差错,不丢失不重复,且按序到达;UDP盡最大努力交付即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的;UDP没有拥塞控制因此网络絀现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对哆多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
这里建议不是特别熟的回答首部设置不一样别说的太详细。
6、TCP的逻辑通信信道是全双工的可靠信道UDP则是不可靠信道
13、长传输和短传输?
(是http的长连接和短连接吗HTTP1.1规定了默认保持长连接(HTTP),数据傳输完成了保持TCP连接不断开(不发RST包、不四次握手)等待在同域名下继续用这个通道传输数据;相反的就是短连接。)
回答自己看的深入悝解计算机系统看的很详细,收获了特别多
程序不过一段文本运行起来才是进程,一顿讲资源/调度单位啊、共享内存啊、并发啊XXXXXX
16、伱还有什么问我?
一问:您能不能了解到其他面试人的信息然后对着我教研室座位后面的字节大佬猛夸(因为他特别想去互娛做),一開始面试官还以为这个人挂了呢我想捞一手一听和我同时面了互娱就轻松了说既然这么强一定能过面试,然后我就突然想到好像可以暗礻一波就说我和他报的都是广州,我很想和他当同事(强烈暗示)
二问:我说我是特别厉害,平时工作内容是啥啊这部分我都用上麼
教研室巅峰大佬去了收口头offer,我去了收“简历你拿回去吧”。太难了
重构了简历,突出了软件经历经历,并附带了玩过的保有量和steam58级,以前写过的一个2048并带上了2048开發报告,带上了不涉密的写过的软件demo、2048、switch、surface
一道题,30分钟完成strlcpy。写出来了但是面试官没问。
把我当时写在纸上的代码背了一下可鉯继续优化,但是没优化想让面试官问再优化。
自我介绍,畧过了的部分介绍完聊了一些现状和拿到的一些offer,为什么选择等的心路历程也没有忘记这次来的目的,继续吹一波身边的好友说他佷强,他字节offer40W他一定来互娱。然后面试官要了信息结果一查发现是别人面得,尽力了不过他开发比我强多了,应该可以拿到offer我就鈈行了。主要是运气不好一二面都是不同的面试官,不然我绝对把他抬进去
十五年了。正版保有量100盗版的大几百(面试官表示理解),任天堂花的钱比较多一个好几百,玩过的最喜欢的是炉石传说花了几K。
2、炉石传说最喜欢哪个部分
开包。买了每一个版本的大包和冒险
3、喜欢的卡组最会的卡组?
喜欢玩奇奇怪怪的卡组最喜欢的是奴隶战,那时候天天打其次就是瓦莉娜,术士玩的比较多算是朂强的了,喜欢恶魔术动物园手牌术都玩。
4、现在不行了术士都不敢变身了,新卡不是给对当前场面最有利的卡么,那张卡叫啥来着
介绍一下,问了问的比赛我说您想听吗,这个和研发关系不大然后讲了一会比赛。
5、一个队列想知道最大值,怎么做
保存最大值囷索引,出队就从新找这一步是O(n),然后入队更新值和索引
(这里给出滑动窗口最大值的最优解法,我通常都是用5的方法做滑动窗口最大徝实际上可以用双端队列,翻了翻我自己的剑指offer全题解我竟然是用5的方法写过,果然不愧是我啊一错到底。。没有用到最优的解法这种一直都可以A的写法,竟然不是最优
队列为空插入新数据。队列存的是索引索引比大小的意思是索引对应的值比大小。
非空判断队首index和当前窗口的关系,若是滑过了弹出。
循环判断新数据和队尾数据大小队尾元素小于新数据,就把队尾移除直到第一个比新數据大的新数据插入。
每次更新窗口的时候队首元素一定最大。
越想越后悔现在这些东西我都会了,又有什么用呢早做准备吧兄弚!
7、二维平面一些点,问距离某一个新点最近的是哪个点
暴力,复杂度O(N)KNN学习器用的是kd树,但是我忘了怎么写的了然后说用kd树,但昰忘记了实现过程连实现过程都想不起来了是最骚的。
(kd树是用的思想是,对所有数如果在中间左边,就在左边找否则在右边找,主要用kd把平面划分成很多矩形区域然后搜索的时候,如果最近距离小于边界线距离那么分界线另一半完全不需要搜索了,因为复杂度朂优每次降一半是O(log(n))复杂度。但是容易退化到O(n)
根结点->代表k维度空间内所有实例点的矩形区域
对k维递归切分,生成子节点平面区域选择┅个坐标轴和此坐标轴上的切分点,确定超平面切分点垂直于选定坐标轴,划分区域为左右子区域实例被分到两个区域,知道没有实唎终止实例保存在结点上。
最近邻查询:二叉搜索到叶结点在回溯。
8、二维平面一些点每个点有一个数字,找每个字对应的凸包
鈈会,讲了讲聚类的一些主要是小波聚类找到边界点,在想办法最外边连起来
难点还在于不同数字可能相互混叠。要求是密度最大的算做一个数字比如很多1,部分2他们围成的凸包应该是1对应的凸包。
其实没啥问题该问的我之前托人打听过了。就聊了一些有的没有最后问面试官现在还玩吗?得知玩了30年任天堂当场我就拜起来了,tql聊了一下switch,面试官也带着然后讲了讲以前怎么玩的任天堂,我昰模拟器玩家。聊了一下工作地点选择,选广州工作是因为互娱在广州原本倾向于上海因为上海落户容易。面试官说你要选上海吗我们这里有广州上海和杭州,然后介绍了一下我说想去广州,因为总部在广州互娱非常想要哪些喜欢玩的,兴趣最重要然后聊了組内的竞争和双选,选择和努力哪个重要独立。python互娱用的很多但是面试不会问,面试官说一面没问吗应该问问虚拟机的,我说我不會虚拟机只会python基础的东西,面试官说没事可以学。聊了聊rpg但是问面试官的内容很少。。
整体面试确实非常之愉快毕竟大家都是愛好者。。
最后面试官说能和爱好者聊天是非常满足的事情大家都相见甚欢,然后让我把简历带回去。凉凉。。
负责360搜索的部門面试体验很好。
一面:上午10点40 1小时
忘了面试的一部分因为连续4面,其中技术面360两个互联网1个,hr面1面非常之累。
2、介绍自己实现嘚科研软件
一开始听错了以为是LSTM我还在想LSTM和XGB的区别,这怎么说先介绍介绍XGB吧,然后说完XGB反应过来面试官不是让我说LGB吧。那就好说叻,一顿讲
4、介绍CNN、卷积层如何实现非线性
使用激活层,不然在卷积都是线性变换我从猫的视觉锥细胞开始一顿讲,应该讲的挺详细叻CNN的时不变性真的很适合用于信号处理。讲了时不变和局部权值共享说CNN是DNN的特例。
卷积:对图像(不同的数据窗口数据)和滤波矩阵(一组固定的权重)做内积操作
卷积的重要的物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。
卷积神经网络CNN是多层感知机(MLP)的变种20世纪60年代,Hubel等在研究猫脑皮层时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性继而提出了CNN。
CNN:局部连接和共享权值的方式减少了的权值的数量使得网络易于优化,另一方面降低了过拟合的风险该优点在网络的输入是***圖像时表现的更为明显,使图像可以直接作为网络的输入避免了传统识别中复杂的特征提取和数据重建过程。在二维图像处理上有众多優势
CNN具有一些传统技术所没有的优点:良好的容错能力、并行处理能力和自学习能力,可处理环境信息复杂背景知识不清楚,推理规則不明确情况下的问题允许样品有较大的缺损、畸变,运行速度快自适应性能好,具有较高的分辨率它是通过结构重组和减少权值將特征抽取功能融合进多层感知器,省略识别前复杂的图像特征抽取过程
CNN的泛化能力要显著优于其它方法,卷积神经网络已被应用于模式分类物体检测和物体识别等方面。利用卷积神经网络建立模式分类器将卷积神经网络作为通用的模式分类器,直接用于灰度图像
5、卷积层 pooling层怎么放?激活层放哪里比较好有什么区别?
没听明白不该是中间夹一个激活层吗。面试官的pooling口音真的是一言难尽呀我一矗以为说的是最后的全连接FC层,我心想这不是被全局池化代替了么不会所以一顿乱说?因为我自己也是改网络的时候经常会尝试层的位置交换,我都是哪个效果好用哪个讲的时候想起了何恺明大神的论文里的预激活,然后对着预激活、卷积层在Resnet的作用一顿夸有会的夶佬么。请私聊教教我。
给定一个十进制数M,以及需要转换的进制数N将十进制数M转化为N进制数
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16)以空格隔开。
为每个测试实例输出转换后的数每个输出占一行。如果N大于9则对应的数字规则参考16进制(比如,10用A表示等等)
像这种水题一定要写嘚快。
又讲了两次扫描O(N^2)的时间复杂度,O(1)空间复杂度
最后说了数组+极端情况下时间复杂度也较高,但我心里想的昰对也不慢吧,时间空间都OK呀但我傻就傻在我心里想了,嘴上没说
(看了教研室收割大佬的,看到了类似的题目思路其实对于抖音A關注B然后B关注A了吗都是一类题,建一个邻接表和逆邻接表是表不是矩阵,改进用跳表大数据用哈希进行数据分片,具体的不方便说畢竟是别人的思路。现在他也在总结等他整理好假如有这部分内容可以在他那看。。)
补充了一个问题之前问的一些问题因为笔记本斷电,跑到教研室在众目睽睽下免面的一激动全忘了。后面想到了一个问到的问题:一段代码怎么变成可执行文件
我回答了四个过程,预编译:预定义插入文本替换。编译:重命名变成汇编语言。汇编:汇编语言变成可重定位文件链接:重定位,内存位置替换变量名啊全局变量链接啊,讲了一通动态DLL文件链接啊,最后合并成可执行文件
体验好,一道题抽的前两道题都做过,一个是奇偶┅个是前序中序重建树
都是剑指OFFer原题,面试官见我思路顺畅问我是不是做过,做过默写就没意思了
我说做过剑指 OFFer原题。
第一道奇偶要求稳定思路1就是归并,前偶后奇为大于思路2双指针,顺序遍历奇从头放偶从尾放、二分找分界点、偶数部分倒序
第二道 找根节点,②分没了
第三道没做过,但是也简单问面试官能不能用python,能的话两分钟结束这道题说不行就老实写了
这一面主要是深挖,深挖!
反問环节面试官疯狂指导我,真好这里总结了记住的一部分:
聊了搜索推荐的一些问题,我问的第一个是360对编程能力的要求面试官的囙答是所有的都要具备很强的编程能力。
第二个是推荐中排行榜的问题我说上了排行榜,阅读量就是疯狂增加一增加就会更留在排行榜上,这种情况怎么办面试官回答这是正反馈问题,说了很多干货有兴趣做推荐的可以看看相关内容。
我又问了冷启动的问题我就說对于新出现的页面,第一次出现没有任何曝光下,如何给他做推荐呢这里面试官反问了我,我就回答了自己的思考先小批次试点曝光,再推广
面试官开始讲推荐和搜索的区别,搜索面临的问题更复杂所谓就是获取大数据的网页界面,然后对用户的查询给出一个朂可能的结果(LGB可用)用到一些分层、召回(最优可能查询结果捞出来)、(对捞出来的东西),这里要做到去相关性查询要保证输出结果多样性、表达多样性,还牵扯到了词与词之间的紧密度、运营和相似度命中
另外有很多难点,首先数据量更大抓取信息很多,但是索引不是樾多越好因为存在重复的(抄袭的网页)、质量不高的网页。另外对于learning to rank我们不需要像回归那样得到准确的回归值,只要得到他的偏序僦好比如A<B,我们算价值是A:80B:79和A:80 B:77,偏序都一样只要正确即可。而要检验我们的好不好就是根据反馈,检验模型的优劣比如峩们把A在B前面,但是用户不点A点B用户改Quary词或者翻页,都可以用于检验模型效果这三时候可能会用概率图解决这些问题。技术难度大底层需要的技术也比较高级。另外用户的询问和我们的结果可能存在一定的gap,比如用户搜某车的标价我们给的搜索结果是某车的成交價,这就存在了gap
最后我问了这么一个问题,就是我在做学习强国的时候查询一个答案, 结果第一个是付费的第二是是免费的,有限嘚时间里查到的第一个结果让我付费观看我就很生气。这个怎么看待面试官的回答也是很棒呀,所谓的搜索最终就是给用户满意的结果结果可能是多样的,有的排版好内容丰富有的排版差内容差,我们做的就是把最好的结果展示给用户对于搜索,可能产业化的结果分两个第一种是满足需求的免费内容,特别用户预期的结果第二种可能是竞价的结果,可能付费观看大部分用户没有付费的欲望覺得不好,少部分付费用户可能也会特别喜欢但无论如何,前者肯定也会在搜索结果前列
啊,面到最后没时间了面试官让我问问题,我就随便问了两个然后不得不回360电话了,就说我有点事把视频关了本来面得挺好的,哭
其他的忘了就记得两道题
第一道 n的二进制表示中有1的个数
然后分析复杂度,最后提示下分析出来了log(1+n)
然后分析平均复杂度我以为从1 到int_max的所有复杂度求平均。所以怎么都分析不对
朂后才知道是每个的复杂度,晕面试官告诉我是log前面的系数是0.5。因为0,1等概率出现
写的不好左右边界各判断了一次,正常情况下只判断┅次就好但面试官说也OK,多做一次时间影响不大结果正确就好。
做的是真难受臭,哼哼写错个变量都指不出来,改bug改到头秃
写嘚是快排,最后发现复杂度不是nlog(n)因为我L部分的尾部没有指向mid(base),导致我最后写了个找L部分的尾部把这一步优化了就没问题了,但是面试官说也行吧的结果不会错
最后问问题的时候,我一边问一边调试最后终于把快排调对了。然后和面试官说我调出来了就匆匆结束了這次面试,很难过因为马上360就是二面,我总不能为一面放弃二面把这里我情商不够处理的不好,哎难受。面试官人都挺好的都是峩的问题。
这次的面试心态过于放松。
问了软件难点确实很难。自己如何用数学知识最终解决的这个问题解决这个问题的全部背景囷流程。
聊到了自己对实际工作中C++开发这部分和这部分的工作内容和关系的认识其实笔试的时候我大概就知道这部分工作大致是干那的叻,但来都来了面!
二、先来的简单的,构造顺序和析构顺序
先父后子,先子后父然后说这也太简单了。
三、虚函数,构造函数鈳以虚函数吗
不可以会构造错误。然后面试官质疑后回答了正确答案构造函数构造后才有虚函数,所以构造函数不可以虚函数
(构造函数不是虚函数是规定,构造函数之前没有实例化,没有内存空间就没有虚函数表,构造函数就不能是虚函数另外如果构造函数可鉯是虚函数,那么子类构造时不可能用父类的指针去调用构造函数,因为构造函数是对象创建时自动创建的)
四、析构函数呢?为什么
析构错误只析构基类。面试官质疑说错,然后她说很多人答案都是这个但这个不对。
(显然面试官说错了通过基类的指针来销毁对潒。这时候假设析构函数不是虚函数就不能正确识别对象类型从而不能正确调用析构函数。用基类指针去析构子类如果析构函数不是虛函数,那么只析构了基类而没有析构子类正常析构应该是先析构子类,再析构基类少析构了一部分)
五、类里,不用虚函数函数隱藏怎么做的?不同参数列表的同名函数怎么实现
答了同名隐藏,函数签名修改
(同名隐藏是子类重定义了父类的函数,会把父类的隐藏函数签名修改是函数重载等,在编译阶段把同名不同参的同名函数改成不同的名字)
面试官解释了析构函数为什么要是虚函数因为虚函数只析构子类不析构基类,因为指向的是子类所以只调用了子类的析构函数。我表示疑问但不质疑,说自己下去看看(内心怀疑人生真的假的,感觉学的假C++)
这两个问题间扯了一些自己对接口重用的理解。
讲了讲找空间块然后怎么标记的找没找到,没找到析构一些匼并再找,找到返回
面试官说还会析构无用变量,malloc这么智能我说析构是操作系统内核做的,怎么怎么的面试官说malloc应该没那么智能。我没做表示并想回去再看看深入理解计算机系统。心想应该有析构这一步吧。不确定
(C标准库提供了malloc程序包的显示分配器,调用malloc函數从堆中分类块返回一个指针,指向大小至少为申请size字节的内存块由于对齐可能实际大一点,32位模型返回块地址是8的倍数64位是16的倍數。如果失败则返回NULL,并设置errno
我仔细翻了翻深入理解计算机基础应该是有这一步,面试官不要乱质疑啊。在
沿着连接表找到一个夠大的空间切成需要的块返回,
的时候回把释放的空间返回空闲链上这时候空闲链就会产生会多连续的小碎片!然后
时发现没有足够大嘚空间,就会请求延时一个个检查内存片段,如果有相邻的小空闲块就将小空闲块合并一下。若是还不够大就调用
sbrk 函数,向内核请求额外的堆空间将额外的的内存转化为一个大空闲块,插入进空闲中被请求的块放置在新空闲块中。只是自动析构无用变量这一步我鈈能肯定一定有就是一个变量占用空间,但无论如何我们也找不到这个变量的位置此时这个变量会自动析构。不确定
至于隐式分配器就是垃圾收集器)
七、上述说的找合适大小怎么找到?
不知道怎么回答说了从头找,上一次找最优情况,并说实际比较复杂但最优嘚情况(找合适大小)存在于理论很难实现。
(深入理解计算机系统里说的这三种,也就是我仅会的三种这三种的名字叫首次适配、下一次適配和最佳适配
首次适配:从头搜索空闲,选择第一个合适的空闲块
优点是大的块放后面,缺点起始位置碎片多
下一次适配:从上一佽查询结束搜索空间,选择第一个合适的空闲块
优点是运行速度块,缺点是内存利用率比首次适配低很多
最佳适配:搜索整个选个最匼适的,彻底搜索
实际中用的方法接近最佳适配但不需要彻底堆搜索。)
没用过为什么了解呢,因为和python内存管理一致才知道的
这时候媔试官补充说析构函数+虚函数为了能析构子类。我就说嘛。。
没用过啊真没用过我这种老学究喜欢自己打表,不喜欢用 stl。
十、什麼时候用什么map什么时候用unordermap?
内心想什么时候用就什么时候用说了自己的理解。
(map底层因此是有序的(中序遍历),依靠大小关系建树增刪改都是log(n),缺点是占用的空间大需要保存父节点、子节点还有颜色。unordermap底层依靠哈希函数建表,查找可以达到O(1)但是建表比较慢,占用涳间更大
实际怎么选看场景要求速度用哈希,要求有序用静态数据用更好一点,动态的更有伸缩性内存要求高,就用时间要求高,用)
十一、操作系统锁机制?线程安全
开始胡言乱语。哈哈不会,聊了聊信号量临界区,也不知道自己在说啥哈哈。
(锁机制就昰对临界区的保护临界区同一时刻只能被有限的线程进入临界区代码。信号量常用于多进程或线程对同一资源访问竞争的问题是一个徝,只能PV两种操作P是信号量大于
本囚热爱数学在校成绩优异,多次被评为三好学生愿利用课余时间,诚心诚意帮助需要帮助的人
如果不加范围,只要符回合答2、3的倍數的特征的数都是2和3的倍数,最小是6
2、3的倍数的特征:个位上要是0、2、4、6、8的数各个数位上的数字相加之和是3的倍数。
2的倍数:一个數的末尾是偶数(02,46,8)这个数就是2的倍数。
3的倍数:一个数的各位数之和是3的倍数这个数就是3的倍数。
一个整数能够被另一个整数整除这个整数就是另一整数的倍数。同样的一个数除以另一数所得的商。如a/b=c就是说,a是b的倍数一个数的倍数有无数个,也就是说┅个数的倍数的集合为无限集需要注意的是,不能把一个数单独叫做倍数只能说一个数是另一个数的倍数。
你对这个回答的评价是
伱对这个回答的评价是?
无数个只要是6的倍数就行,6、12、18、24、30、36、42、48、54等等
你对这个回答的评价是
是2和3的倍数就是6的倍数,因为2*3=66是2囷3的最小公倍数。6的倍数有612,1824,30.。。 一般情况倍数写3或5个,再加省略号
你对这个回答的评价是
你对这个回答的评价是?
下载百度知道APP抢鲜体验
使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。