腾讯面试7.23及之前

7.23及之前
(不知道是什么批次的)腾讯c++面经
1大数据求交集。
解法搜索引擎搜“bitmap 求交集”。我就是这么答的。
2 vector怎么分配内存的。
牛友们常见的题了,不赘述了。
3 epoll和select有什么区别。
同上。epoll_creat,_ctl和_wait干了啥讲了一遍。面试官问了一下select能管多少个fd,epoll能管多少个。
4 struct内部持有一个vector,拷贝struct实例时候会发生深拷贝还是浅拷贝?map呢?
5 vector容器erase时迭代器失效怎么解决?
我答的不要缓存那些用常数时间复杂度就能获取的迭代器。讲了一下vector底层迭代器实现,可以用指针distance求。
6 tcp reno拥塞控制方法。
一搜一大把。
7 内存分布。问我heap和stack中间的区域装了啥。
我说用malloc分配内存超过阈值大小的都不在堆上,用mmap分在这块上。估计他想我答的是file mapping,很有可能他还觉得我说错了。
8 手撕:只有一个号的正则匹配,而且号只出现一次。判断能不能匹配上。
dp是不可能dp的,纯属和自己过不去。写个直白的字符串处理,照样o(n)。

腾讯前端实习
一面 5/13(1.1h)

  1. 创建一个Person类,其包含公有属性 name 和私有属性 age 以及公有方法 setAge ;创建一个 Teacher 类,使其继承 Person ,并包含私有属性 studentCount 和私有方法 setStudentCount 。
  2. 实现一个遮罩弹窗
  3. 请写一个函数,计算一篇英文文章中出现次数最多的单词及出现次数。
    二面 5/26(35min)(7 天后凌晨0: 00 自动变灰)
    做过的前端性能优化有哪些(提到图片懒加载)
    图片懒加载是怎么实现的
    首屏渲染的时间怎么衡量
    加载js 、css、图片这些资源浏览器是并行加载还是串行加载
    如果资源非常多会还是全部并行吗
    从输入url 到页面呈现发生了什么(经典题)
    是每发出一个 http 请求就建立一个 tcp 连接吗
    讲一讲浏览器的重排和重绘(经典)
    引起重排的原因有哪些(经典)
    获取一个 div 的宽度会引起重排吗
    Js 是单线程的还是多线程的,单线程如何保证性能?(事件循环)
    70%的人喜欢篮球,80%的人喜欢足球,90%的人喜欢排球,同时喜欢篮球和足球的人占多少
    有一个非常大的日志文件 32G,统计里面出现次数前十的 ip 地址,怎么做
    除了腾讯还有在面试其他的公司吗
    腾讯云
    一面 6/10 (45min)(晚上八点左右变灰)
    聊聊项目中的一个前端体系结构(说了 html、css、js)
    协议方面的呢?
    性能优化方面的呢?
    安全方面的呢?
    XSS 原理,怎么预防?
    前端工程化方面的呢?
    聊聊你项目的登录是怎么做的
    为什么要用 token(防止 CSRF)
    Websocket 的链接过程?
    你拿到后端发过来的 websocket 是怎么做的?
    有没有试过沾包的情况?一次消息多条数据(没遇到过…)
    说说为什么项目为什么要用 vue
    使用 vue 给你带来的感受是什么
    数据双向绑定的原理
    除了 Object.defineProperty 还能用什么方式进行响应式?
    有没有试过多层嵌套对象的数据监听不到的现象(这里印象不深刻了,从 vue 给数据定义响应式的过程分析了一下)
    Vue 的生命周期?
    Js 传参,值传递与引用传递的不同
    实现一个函数,每次调用返回 不同的 长度为 2W 的数组,数组的每一项由 26 个英文字母中的不同四个组成(大写),同时数组的每一项也不同。(想到了结合 Math.random 生成字母,用对象存储已生成的结果保证不同 这种暴力方式)
    问能不能优化,没想出来…
    http1.0 开启 keep-alive 和不开启的区别?
    状态码 302 什么意思
    结束
    面试官说我基础还行,经验会比其他实习生要足,但是表达能力一般(给了我个面子没直接说不好),说的时候会有卡顿,给人的感官不好,一些项目中的 错误处理、工程化、部署之类的问题还没问,建议我多做项目、多实习去积累,多注重基础。
    两次面试下来,感觉腾讯面试是虽然问题能答上个七七八八,但是没亮点的话就希望就不是特别大,再加上自己的表达能力不是特别好,难呀。哎呀,加油吧。

PCG
一面(30min)
场景题:商品列表以及购物车的实现思路(从商品信息如何获取、添加至购物车的逻辑、保存购物车信息的方式分析)
算法题:
两个字符串的所有公共子串,说思路,
(虽然有刷过 leetcode 的最长公共子串,但是一时间这么快把思路精确说出来也说得不是很好,说完之后应该没有让面试官完全理解我的意思,面试官说觉得不好衡量)
https了解吗,介绍一下
详细聊了聊 tls 握手过程
然后被问到中间人攻击怎么办
二面
先做了两道算法题 (15min)

  1. 冒泡排序
  2. 最长公共子串
    然后视频面(30min)
    让我简短的自我介绍(我以为没什么需要介绍的就特别简短的说了一下经历,平时都会说的有关技术栈的内容都没说)
    安全方面的问题
    介绍一下 csrf 的原理
    怎么去预防
    说一说 http 缓存
    http1.1 和 http2.0 的区别(说了说队头阻塞、头部压缩、二进制帧)
    图片懒加载的原理
    Vue 的源码有看过吗
    平时写 css 是怎么写的,说一下写 css 的思路
    单独抽离文件通过网络加载的话,影响用户第一眼的体验怎么办
    (我说一些基本的样式就直接放在项目中,面试官说他们那边是一些需要用户看到的样式就通过 webpack 打包进项目里面,ps: 对对对我就是这个意思hh)
    给你一个网址,怎么判断,怎么衡量他的资源对首屏渲染影响
    优化方案有哪些
    然后就问我获奖的那个项目是什么,啥技术栈(我自我介绍的时候就该说下技术栈的…)
    有写过移动端吗
    移动端的调试抓包怎么做的
    然后就是聊项目中怎么做的一些东西,大概就是工程化那方面的
    单元测试有了解过吗
    Mock 有写过吗
    然后说了解的差不多了,问我最近有了解的比较感兴趣的前沿的技术
    说了一下 deno、vue 3.0,强行说了下比较感兴趣的虽然不是特别前沿的 typescript
    三面(30min)
    有用到的 es6 的特性
    var let const 的区别
    多个请求串行请求(for循环 + await)
    可以用 foreach 吗
    浏览器渲染原理讲一下
    构建了 dom 树之后,dom 树中的元素会全部出现在渲染树中吗
    设置元素的 display:none 之后会从哪个流程开始
    设置 visibility: hidden 之后会从哪个流程开始
    http 和 https 的区别
    http1.1 和 http2.0 的区别
    以下开始有点磕碰
    智力题:一百层楼,有两个玻璃瓶,在其中的一层楼层及以下的楼层中往下扔玻璃瓶不会碎,找到这个楼层(没想出最好的方案,只想出个二分,二分的话最坏情况也要50次)
    快排还记得吗,讲一讲
    基准元素的选择有什么更好的方案吗

作者:超越妹妹保佑我有offer
链接:https://www.nowcoder.com/discuss/456767?type=2&order=3&pos=5&page=0&channel=2002&source_id=discuss_tag
来源:牛客网
腾讯·大渝网 php工程师校招
二轮面试

  1. 是否使用过帝国CMS等框架 ;
  2. 问unix/linux 或 windows 开发平台下的 c++,cgi,jsajaxcssaspflash,java ee网站开发;
  3. java me手机开发,嵌入式,3d渲染原理,3d游戏引擎,网络分层,tcp/ip协议的原理;
  4. winsock编程,服务器集群,分布式,web服务器原理;
  5. 数据库设计,数据库压力测试,搜索引擎技术;
  6. 基于.net/c#的web开发,大并发访问网站的架构设计,软件工程,算法和数据结构。

腾讯PCG android工程师校招面经(OC)
一面:(电话面试)
Android部分
1.handler机制(非常详细,必须对源码很了解)
2.Android动画,属性动画流程
3.Binder机制
4.除了Binder还有什么可以用来通信
5.内存泄漏问题(Android内存泄漏和Java内存泄漏)
6.View的绘制流程,draw和onDraw的区别
7.项目里的并发编程是怎么实现的
8。讲讲AIDL
Java部分:
1.经典HashMap(扩容,方法,大小,线程安全等)
2.currentHashMap(扩容,方法,如何保证的线程安全,1.7和1.8的区别)
3.接口和抽象类
4.volatile底层原理(中间提到了JMM,然后又问JMM的问题)
5.JMM(刨根问底)
6.JVM内存回收,新生代又是以什么比例分的
操作系统:
(他看我简历里面学了操作系统,所以问的)
1.进程和线程区别(经典)
2.进程间通信
3.为什么android不用传统的进程通信方式而使用binder呢?区别是什么?
4.如何调用操作系统方法?
5.如何陷入操作系统内核态?
6.换页算法

二面:(被虐的一塌糊涂,不知道一面面试官跟他说了啥,就是过来虐我的。。。)
数组向右移动k步,O(n)时间写完了,然后被告知要一次循环搞定。。。。
自我介绍(问了我在QQ阅读的flutter项目)
接下来问到我怀疑人生。。
1.你觉得一面面完你有哪些不足呢?
2.一面面试官说你看过handler源码,那我问一下为什么next()阻塞调用的是native的方法而不是wait呢?
3.那native的阻塞是怎么实现的呢?你看过这部分源码吗?(。。。。。。只记得采用了linux的epoll)
4.不让你调用,你怎么实现阻塞的效果
5.除了handler你还有什么方法实现通信?(我说了asyncTask,他说换一个)
(最后他说了广播,我心思广播不也是基于handler嘛。。)
接下来就跟简历相关了
6.你有看过flutter源码吗?为什么flutter在某些方面运行效果更好?
7.flutter的底层原理是什么?(接这虐。。)
8.你是怎么实现flutter与原生通信的?原理是什么?

9.如何在不使用任何工具的情况下,找出内存泄漏的原因?(KO。。。)

真的能看出来,大厂的面试官很喜欢问为什么,很多底层的机制问题。

三面(突然打来电话三面):

tcp三次握手,四次挥手,为什么?
tcp拥塞控制,流量控制
tcp滑动窗口
什么情况下会造成内存泄露?(问三遍……)
如何实现一个延迟发送接口?
一亿个数,有重复,返回最大的10个

2020腾讯暑期实习——游戏客户端
作者:东大21应届_虚幻4游戏开发
链接:https://www.nowcoder.com/discuss/450472?type=2&order=3&pos=18&page=0&channel=2002&source_id=discuss_tag
来源:牛客网
一面
C++和C的区别
联合体、结构体、类的区别
说一说多态
虚函数的用法
const用法(重点问成员函数三个位置的区别)
static的用法
用过STL嘛?
map的实现原理
什么叫红黑树
介绍一下快排
渲染管线
深度测试
为什么要用虚幻4引擎
什么叫骨骼蒙皮
法线贴图
做过什么项目?
会不会做动画?
C++怎么切换版本?
玩过什么游戏?
实习地点有没有什么要求?
反问
我有什么不足需要改进?
项目经历丰富,但基础不够扎实,建议不要太过注重美术方面的内容,加强代码能力,毕竟我们是程序员。
(答主const用法说错一处、不会切换版本、渲染管线和深度测试都没复习)

用时20mins,本以为一面凉了,没想到第二天显示进了复试,感谢面试官抬我一手。
二面
extern “C”,为什么会用C语言的方式编译
指针和数组的区别
虚函数、虚表、虚指针
析构函数可不可以是虚函数,为什么
构造函数呢
构造函数和析构函数的调用顺序
用过STL么
vector实现原理、扩容
和list比较
DFS和BFS
快排原理(又是快排!)
时间复杂度,稳定么
new和malloc区别
内存五大区
栈和堆区别
栈内存增长顺序
线程和进程的区别
线程间的通讯方式
进程间的通讯方式
UDP和TCP区别
射击游戏应该用什么
稳定的UDP有么
听说你自己做过游戏,讲一下
你刚才说了行为树,介绍一下行为树都有哪些节点(UE4)
反问
我有什么不足需要改进?
还可以,等我们进一步综合考量,再通知你。
(答主复习了好几天数据结构与算法、计算机图形学、计算机网络、计算机系统基础)
时间也是20mins,答主自己用UE4做过VR游戏、安卓FPS游戏、ACT游戏 和 RPG游戏,当然都是简单实现了部分功能而已,很简单的那种。我介绍完项目面试官只问了行为树问题,就没了。一小时后变为HR面。目前一直等待中。

腾讯蓝房网php工程师校招
测试+一轮面试:
测试:一些关于php基础以及数据库优化的试题(限时30分钟);
面试:面试官是技术部经理;
l 问用过ZendFramework框架没有,描述之前的项目经验,跟据项目经验提问问题;
l 问会不会用SMARTY模板? 做过什么作品?
l 问服务器,数据库,和一个算法问题,好像是关于遍历二叉树的问题;
l 问排序算法的时间复杂度?如何优化?

腾讯运营开发一面总结(80分钟)
答的不怎么好的
项目刚上线还没有缓存就有高并发场景怎么办
o使用消息队列限流
垃圾收集器(G1,CMS)
JVM哪些参数可以查看当前新生代的大小
spring ioc bean初始化过程
spring判断非空和参数校验的注解
springmvc启动过程
Springboot自动装配(太久没看,答的乱七八糟的)
mysiam和innodb的区别
o支不支持外键、支不支持事务,一个是表锁,一个是行锁,占用空间,查询速度等
事务隔离级别是怎么实现的
Spring全局异常处理
NIO和linux的交互,java调用了哪些linux方法
oJDK在Linux已经默认使用epoll方式,但是JDK的epoll采用的是水平触发,而Netty重新实现了epoll机制,采用边缘触发方式,netty epoll transport 暴露了更多的nio没有的配置参数,如 TCP_CORK, SO_REUSEADDR等等;另外像Nginx也采用边缘触发。
如果threadlocal说出现异步操作怎么办(不懂这个问题的关键在哪)
从库挂了怎么办,怎么保证良好的用户体验
RSA加密流程(裂开)
HTTPS
java序列化
答的还可以的
ConcurrentHashMap(产生哈希冲突怎么办)
mysql主从复制,读写分离
线程安全
spring有哪些注解
布隆过滤器
redis过期时间设置
JVM内存模型
单例模式
覆盖索引
腾讯运营开发二面总结(20分钟)
问了问项目
mysql主从复制原理,主从延迟怎么处理
腾讯运营开发三面总结(20分钟)
docker实现隔离的原理
mysql配置文件在哪,怎么改

腾讯PCG前端
3. http状态码
4.介绍http有什么字段
5.cookie
6. localstorage sessionstorage
7. http2.0
8.tcp 拥塞控制
9.tcp握手
10. tcp与udp区别
11. 详细说一下数据链路层
12.常见网络攻击方式及解决(腾讯必考)
13.AJAX原理 readystate码的含义
14.性能优化(我说了有好长时间 最后舌头都打卷了)
15. vue 生命周期
16.虚拟dom算法
17.图片相关的优化方式 base64 懒加载 延迟加载
18.又没用过单测
19. 快排和归并的思想
20. 堆排序

腾讯提前批

2.项目(H264,H265,ES等问题 问的很底层)
3.快排原理,稳定性,设计稳定快排,为什么需要稳定的排序
4.设计LRU
5.innodb如何实现事务
6.系统中断,Linux读取一个文件,并写入一个字符,描述过程
7.http如何保持长连接
8.jvm组成,调优,回收机制

腾讯游戏 算法工程师 校招
项目 n-gram
项目的意义(为了做作业...

逻辑回归...
交叉熵和最大似然 损失函数的区别
LR可以处理非线性问题吗

你用了Bi-LSTM 讲讲LSTM吧
你说可以缓解RNN的梯度消失和梯度爆炸,讲一下梯度消失和梯度爆炸
有什么其他方法可以解决
Relu函数

SVM讲一下
SVM可以处理非线性问题吗

讲一下决策树怎么选择分裂点
讲一下GBDT

腾讯后端Java岗社招
一面:
1、redis有没有用过,常用的数据结构以及在业务中使用的场景,redis的hash怎么实现的?rehash过程讲一下;
2、JavaHashMap的rehash有什么区别?
3、redis cluster有没有了解过,怎么做到高可用的?
4、redis的持久化机制,为什么不能用redis做专门的持久化数据库存储?
5、了不了解tcp/udp,说下两者的定义;
6、tcp为什么要三次握手和四次挥手?
7、tcp怎么保证有序传输的?讲下tcp的快速重传和拥塞机制;
8、知不知道time_wait状态,这个状态出现在什么地方,有什么用?(参考quic)
9、知道udp是不可靠的传输,如果你来设计一个基于udp差不多可靠的算法,怎么设计?
10、http与https有啥区别?说下https解决了什么问题,怎么解决的?说下https的握手过程。
11、看你项目里面用了etcd,讲解下etcd干什么用的,怎么保证高可用和一致性?
12、既然你提到了raft算法,讲下raft算法的基本流程?raft算法里面如果出现脑裂怎么处理?
13、有没有了解过paxos和zookeeper的zab算法,他们之前有啥区别?
14、你们后端用什么数据库做持久化的?有没有用到分库分表,怎么做的?
15、索引的常见实现方式有哪些,有哪些区别?
16、MySQL的存储引擎有哪些,有哪些区别?
17、InnoDB使用的是什么方式实现索引,怎么实现的?
18、说下聚簇索引和非聚簇索引的区别;
19、有没有了解过协程?说下协程和线程的区别?
20、算法题:数组中的重复数字

二面:
1、主要针对自己最熟悉的项目,画出项目的架构图,主要的数据表结构,项目中使用到的技术点,项目的总峰值qps,时延,以及有没有分析过时延出现的耗时分别出现在什么地方,项目有什么可以改进的地方吗?
2、如果请求出现问题没有响应,如何定位问题,说下思路?
3、tcp 粘包问题怎么处理?
4、问了下缓存更新的模式,以及会出现的问题和应对思路?
5、除了公司项目之外,业务有没有研究过知名项目或做出过贡献?

三面:
1、go程和线程有什么区别?
答:起一个go程大概只需要4kb的内存,起一个Java线程需要1.5MB的内存;go程的调度在用户态非常轻量,Java线程的切换成本比较高。
2、接着问为什么成本比较高?
答:因为Java线程的调度需要在用户态和内核态切换所以成本高
3、为什么在用户态和内核态之间切换调度成本比较高?
答:简单说了下内核态和用户态的定义
4、项目过程中遇到的最大的挑战,以及时怎么解决的?
5、服务器CPU 100%怎么定位?
6、最后问了一个系统设计题目(朋友圈的设计),白板上面画出系统的架构图,主要的表结构和讲解主要的业务流程,如果用户变多流量变大,架构将怎么扩展,怎样应对?

微信暑期实习后台开发
一面(6.24,2h30min,体验很好)
问:你这个项目是用多线程的,那你觉得多进程和多线程各自优缺点有哪些
答:1.多线程切换比多进程快 2.多线程共享资源方便,进程则需要进程间通信 3.(他提醒了我才想起来)多进程地址空间独立,一个崩溃了其他的不受影响,多线程则会全崩溃
问:我看你的项目里面提到eventloop,它一般是用epoll实现的,你知道epoll的两种模式吗
答:知道,有边缘触发和水平触发。比如监听可读事件时,边缘触发是缓冲区由空到非空,水平触发是……(大家自行谷歌吧)
问:那你的项目中使用的是哪一个模式,为什么
答:使用的是水平触发,因为边缘触发的情况如果不读完则不再触发,而水平触发就算不读完也会再次触发,这样不容易漏掉数据。
问:但是其实是边缘触发的性能更好
答:是不是水平触发触发会比较多系统调用次数,那其实也可以一次读完,而不是多次触发(他不置可否。。。想说什么又没说)
问:那你除了epoll,知道select和poll吗,说说它们底层有什么不同
答:select……,poll……,epoll底层有一个红黑树,因为它要支持频繁的增删改,有事件到来时将就绪事件放入队列,然后再拷贝到用户态
问:那为什么是用红黑树而不是用平衡二叉树呢
答:(自行谷歌)
问:高并发的场景容易产生内存碎片过多的问题,你知道原因以及怎么解决吗
答:(这题我真不太懂,就扯了操作系统中的内存分配机制,但是明显不是他想听的。 唉,这个内存碎片这块确实答得不好)
问:你说的是系统级的,我想问应用层面怎么做,emm,或者你知道STL里面的内存模型吗?
答:比如说vector? 他就是当目前可用内存不够的时候去重新申请原来的两倍的内存,你是想说一次拿比较多的连续内存吗
问:嗯,这就是预分配技术,那你知道内存池技术吗
答:听过但是没用过,(开始瞎编)它应该和线程池有类似的地方吧,就是资源重用,用完的内存放回池中,下次就可以直接使用而不用重新申请
问:这是一方面吧,(接下来他科普了几句内存池,不过我记不大清了)
问:你平常用哪版C++(答c++11),c++中内存的释放是个棘手的问题,所以在c++11里面提供了智能指针,你说说这几种智能指针的作用还有怎么实现的吧
答:(常见问题,还是自行谷歌吧,不过实现方面我也就share_ptr说的比较好)
问:你刚刚说share_ptr是在析构函数中判断引用计数,决定要不要释放,那我问你我们一般把析构函数写成虚函数是为什么
答:动态绑定时如果基类指针如果指向派生类对象,不是虚函数的话只会调用基类析构,而是虚函数的话就能正确调用派生类的析构
问:网络里面tcp是比udp可靠的一个模式,你说说tcp的哪些机制使得它可靠
答:1. 基于连接,需要有三次握手 2.握手时交换了初始序号,而序号是保证有序的方式 3.超时重传机制 4.滑动窗口保证不会发送超过对方负荷的数据 5.拥塞控制,有慢启动有拥塞避免
问:数据库的话mysql比较熟是吧,那你知道数据库的索引一般用哪种数据结构吗?
答:(先说了B树,再说了B+树,资料很多自行谷歌吧)
(做题时间, 50分钟,做的不大好)
1.代码题。设计并实现整数转字符串函数 char * itoa ( int value, char * str, int base ); base表示转换的进制,如17进制
2.代码题。给定uint32_t A[n] (1<n),求max(A[i] & A[j]),其中i != j
3.思路题。超过100亿的无序可重复的unsigned int,给定4G的内存,如果找到中位数?
4.思路题。给定n个样本文件(每个文件从书籍、报刊等提取),平均长度为k个字节。根据给定的样本,给出判断一个输入的数据串是否为随机串的算法。
1.其实我也就第一题做的比较完美。
2.第二题在最后五分钟才想出O(n* bitsof(uint32))的算法,不过虽然没写完代码但是和他讲了我的思路他也表示可以。
3.第三题没想出来,说了个计数排序,搞个map用于value到次数的映射。但是我知道内存并不允许,后来在他的诱导下想出来了(他一直强调,想想怎么限制key的个数)
4.这题我大概说了一下统计样本中字符概率,以及a字符在b字符后面的概率,他说你这个思路算是有的,有没有听说过马尔可夫模型,我说知道但没有学,他说这题就可以用马尔可夫
二面(7.7,1h30min,体验极差,已凉凉)
先吐槽一下,二面和一面的面试官完全两种风格,二面面试官在我答题过程中基本不给反馈,导致有些回答就算答对了我也是心慌慌,总之特高冷,几乎没得交流。另外我也是憨憨,之前看过微信的面经,可是却没有认真去搞懂每个题目,导致我这次面试很被动。
问:项目介绍,遇到什么问题,reactor线程怎么做到不会阻塞,线程之间相互唤醒怎么做等等
答:这部分略吧,感觉答得还行
问:是在linux开发的吗
答:我编写代码的话是在windows上用clion配置了远程编译器的形式写的
问:那linux是不会吗
答:(大哥,我真的没有这意思啊大哥)不是啊,虽然不敢说很会,但是至少基础的还行吧,我去年实习也做过linux相关的工作,而且这次做这个项目也又学了挺多
问:脚本会写吗,a...(好像是a开头的某个单词)有些过吗
答:会写简单的shell吧,复杂的可以用python写一写,不过你说的这个我倒没写过
问:数组名和指针区别
答:sizeof区别,传参时数组名退化成指针(然后我就不知道从哪些层面考虑了,面试官一声不吭,留我自己在那瞎着急)
问:c++里面的复制构造函数什么情况下调用
答:直接显示调用复制构造函数;按值传递参数时,会触发复制;按值返回时,也会触发复制; (面试官没反应啊,咱只能继续想) 还有比如vector调用push_back添加一个对象时也会复制的吧 (面试官还是没反应啊,真就心慌慌,又过了会才说下一题)
问:2个广告位,5个广告,每次刷新时返回两个广告,给定5个广告的概率,问如何按给定概率返回2个广告
答:(我一开始可能紧张没听清楚以为是五个广告平等概率,说了随机或者拿到所有C(2,5)组合,他终于给点反馈了,说这样能符合给定概率吗并且每次随机两次的话可能两个广告是一样的,我才反应过来有给定概率)
后来我一直在想怎么组合,先按概率从小到大排序,概率小的和下一个概率大的组合,但是始终有漏洞会有两个广告可能是同一个的漏洞。就这样想了挺久,直到他说下一题
(到这里已经有点心态不好了,不仅因为没想出来还因为这题我之前见过,当时却没有认真思考)
问:给一个不规则封闭曲线上的所有坐标,判断输入的坐标在不在封闭曲线内部
答:(我大概记得做直线的方式)想了会想到一个不严谨的算法,可以往一个方向做条射线,和边的交点数奇数则在内部,偶数则在内部。这里不严谨是没有考虑相切,于是我不敢回答,又想了挺久不知道怎么解决相切情况,实在没办法才讲了这个不严谨算法
他果然高冷的画了一条线,说这种情况(相切)就不对。
于是我又想了几分钟,到这里已经心态爆炸,面红耳赤,几近崩溃,大脑空白了,于是我自己放弃了
(做题时间)
三题按顺序写,写完一题发一题,尽量快
我的解题就先不写了,我总共花了40分钟,感觉有点慢了
1.实现大小写无关的C字符串比较
int strcasecmp(const char * s1, const char * s2);
说明:同strcmp的返回值 , 相等 返回 0,s1大返回1,s2大返回-1
2.给定一个递增循环整数数组,从里面找出最小的元素,使用的算法越快越好。特别地,最小的元素可能出现在数组中间。比如:50, 52, 63, 90, 3, 8, 15, 44。
int findmin( int array[], int count );
说明:递增循环整数数组指如果首尾成环,在环的某一个点开始是递增的。
3.已知一棵二叉树,结节类型如下,val每节点不同。
struct Node{
struct Node left,right;
int val;
} ;
给出三个存在于二叉树中,且互不相同的整数,求该三个整数对应的二叉树节点的最小公共祖先。
Node * getAncestors(Node* root, int a, int b, int c)
{
}
说明:1.这是一棵普通的二叉树,没有排序;
2.三个数均在二叉树中,不用考虑不在的情况;
3.二叉树中每个节点的值不同,不用考虑有相同值的情况

全部评论

相关推荐

2 8 评论
分享
牛客网
牛客企业服务