# Interview && Experience
## Tencent
1 online test, 2 screen interview, 1 hr interview
### Keen Security Lab
#### Security Development
- 1. CTF related stuff:Your contribution to your team, your expereience with CTF, thought about online vs offline CTF
- 2. Binary Analysis Stuff:The attribute and uniquness of different IR,the full LLVM architecture and how does it process compiling
- 3. If we want to encrtpy a string and decrypt it for displaying, how should we do in llvm
- 4. reverse enginerring:backtrace implememntation in gdb,how does c++ structures virtual pointer,malloc's low level detail,x86/arm calling convention, how does GOT and PLT organize in ELF(and some ELF related question)
- 5. Linux kernel attack surface, how to design a kernel fuzzer?
#### Reverse Engineer
- 1.C++多态是什么?
google
- 2.C++虚函数是什么?
就是用virtual定义的函数,基类中用virtual定义的函数在派生类中可以被重新定义使用
- 3.class和struct编译出的结果有什么不同?
- 4.got表的前三项是什么?
dynamic,linkmap,dlruntimeresolve
- 5.main函数之前执行是什么?
libc_start_main
- 6.r12到r15寄存器哪些不要恢复?
wiki请
- 7.从虚拟内存到物理内存的映射方法
- 8.malloc的具体操作
CTF wiki
- 9.具体IO_FILE的溢出利用
ctf wiki
- 10.byte alignment
内存对齐,也称字节对齐,它主要是指数据存储在内存中时,应该放置在地址是数据项大小的整数倍的内存位置上。
- 11.gdb断点实现方法
软件/硬件断点谷歌
- 12.怎么获取x86的pc指针
call然后出栈(猜的)
- 13.静态链接文件中怎么识别一些其他库的函数
制作ida signature文件,使用bindiff
- 14.逆向有没有碰到过类里面很多虚函数的情况
会有一个虚表
- 15.定义一个结构体一个char一个int占用多少
要对齐,所以是8
#### 网页开发
- 1. react和vue的区别
- 2. react probs和state的区别
- 3. go rountine 实现
- 4. 锁
- 5. 你能展示展示你的xxx项目吗
- 6. vue 里面css的scoped是怎么实现的
- 7. css的flex布局简单实现
- 8. 数据结构:大数据,多数据的快速获取,插入
## Alibaba
### Chaintin Tech
一轮面试一轮hr
#### Security
* 1. 描述 libFuzzer fuzz 一次要的流程
* 2. x86/arm 调用预定(我这次复习了233)
* 3. 访问一次百度要经过啥?(就是 network 基础)
* 4. 然后继续字符串加密。。。我当时忘了具体问题是啥了然后绕了大半圈杨博士决定跳这个问题2333
* 5. 印象最深的 CTF 题目,说说解题过程
* 6. 证书加密/密钥交换过程(我跳了,不大会密码学)
* 7. 逆向花指令(继续跳,还是不会)
* 8. 程序从编译到链接经历了啥
* 9. gdb怎么实现断点的
## Baidu
## Facebook
### Front-end Intern (LONDON)
一轮技术,两轮做题,我大概到此为止了TAT。其实题蛮简单,主要是完全复习歪了。前端别刷leetcode,完全无关。
#### Round 1
**Experience**
**What is a Closure?**
A **closure** is the combination of a function bundled together (enclosed) with references to its surrounding state (the **lexical environment**). In other words, a closure gives you access to an outer function’s scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.
To use a closure, define a function inside another function and expose it. To expose a function, return it or pass it to another function.
The inner function will have access to the variables in the outer function scope, even after the outer function has returned.
You can’t get at the data from an outside scope except through the object’s **privileged methods**.
**JavaScript**
JavaScript is a client-side language
prototype-based language
```
string, number, undefined, null, boolean, and symbol
```
** DOM **
**What is dom**
DOM is document object model and it allows the accessing of the documents like HTML and XML.
It allows a platform to be language neutral and provide an interface that allows the **dynamic usage** of the scripts and programs to access the content.
It also provides a way to update the content, structure and style of the document and a way to represent it in any language.
It is used with the language and used to create the objects that can be used as a model to allow the interface to be developed with ease.
- **Window object** − Top of the hierarchy. It is the outmost element of the object hierarchy.
- **Document object** − Each HTML document that gets loaded into a window becomes a document object. The document contains the contents of the page.
- **Form object** − Everything enclosed in the <form>...</form> tags sets the form object.
- **Form control elements** − The form object contains all the elements defined for that object such as text fields, buttons, radio buttons, and checkboxes.
Here is a simple hierarchy of a few important objects −

**Class**
A JavaScript class is a type of function.
A **constructor function** is initialized with a number of parameters, which would be assigned as properties of `this`, referring to the function itself.
**Var Let Const**
**`var` variables can be re-declared and updated**
**`let` is block scoped**
**`let` can be updated but not re-declared.**
let don't allow same variable to be declared in different scopes
**`const` declarations are block scoped**
**`const` cannot be updated or re-declared**
**Apply and Calls**
The difference is that `apply` lets you invoke the function with `arguments` as an array; `call` requires the parameters be listed explicitly.
use `apply` if you don't know the number of arguments you will be passing
**Queue & Stack**
what is queue and stack?
what is the easiest implementation of queue and a stack?
**How to know whether a image is loaded?**
#### Round 2
1. clearAllTimeOut() A function that can clear all functions that were set timeout before
2. subscriber design pattern
```
var emitter = new Emitter();
var sub1 = emitter.subscribe(evet1, callback);
var sub2 = emitter.subscribe(evet2, callback);
emitter.emit(event1, arg1, arg2)
emitter.emit(event2, arg1, arg2, agr3)
sub1.release()
```
### Software Engineering Intern (LONDON)
#### Round 1
- 1. Verify the two strings are equivalent
Example: aaaabbbcdaaa and a4b3cda3
- 2. Compressed Trie Tree
## Google
## Microsoft
## Jane Street
### SDE
AFAIK, two online two on-site
Jane Street question is less leetcode but more tricky and focused on **BUG-FREE**.
The questions so far I knew:
- implement a quick sort
- implement a Tetris
### Quant
Statistics and mental arithmetic
## Optiver
## IMC
### Sydney Office
#### Hardware Engineering Intern
##### Online Video Interview
- 1. A level-to-pulse converter is used to produce a single cycle pulse every time the input signal goes high. Please describe (in words) the logic required.
- 2. A source module can write 80 words per 100 clocks into a FIFO and a sink module can read 8 words per 10 clocks from it. Describe a method to calculate the depth of the FIFO so that no data is dropped.
- 3. Consider a doubly linked list containing sorted integers. Describe the steps required to add a new integer to the list where it will remain sorted. Assume the new integer will end up somewhere in the middle.
- 4. What critical advice you have received from the others (professor, team member, supervisor)? What did you do?
- 5. What do you want to do as a hardware engineer at IMC?
## 网易互娱
### 前端开发工程师
#### 笔试 (四题编程)过了
- 1. 九进制float加法 数据范围超int
- 2. 一条数学题:有n个人和n个任务,每个任务有t的要求,只有人的能力>=t才能做这项任务,问一共有多少解
- 3. 游戏匹配系统:n个职业 每个职业m个人 每队要有各种职业有且只有一个 玩家名称为a-zA-Z(最多52个) 然后有一些人有特殊要求比如A一定要和B在一起,不和j在一起之类的。需求输入无序,最后输出唯一解。
- 4. dp 大盒子里套小盒子 不翻转 求最多能套多少个盒子
第3题输入很复杂 最后也没搞出来 ac 3题 收到面试通知
#### 一面 (Queenie)挂
- 1. vue 数据之间传递的方法有哪些:我说了父到子 子到父 vuex 他还继续问我还有呢 我也不知道了
- 2. vue 数据双向绑定原理
- 3. js有哪些基本类
- 4. 浏览器缓存
- 5. js里的sort是哪种算法
- 6. vue2.0到3.0有哪些更新
- 7. 如何做一个精准的倒数器 我说setInterval(count, 1000ms) 他说这个会准确吗
- 8. js运行逻辑是什么样的:stack和heap那些
- 9. 项目中有遇到过跨域问题吗,是如何解决的
- 10. infinity scroll down怎么处理数据太多的问题呢?我说了可以用个queue,多的去除加入新的。他说可以用一个虚拟的滚动条
- 11. 项目中图片上传的组建是自己写的吗?有了解过其中的原理吗?这我就老实说了就是直接用的material ui的组件,既然有很多好用的轮子了我也没自己造过。以后会去了解一下的
- 12. 爬虫有多少了解
- 13. 如何使得网页加载速度更快,用户体验更加顺滑?我讲了按需加载,讲了图片的处理:尽量使用svg,也可以用一些thumbnail图片。讲了vue-if和vue-show的使用。还扯了什么我也不记得了
- 14. 最后我又和他讨论了一下倒数器的问题,为什么会不准确,他跟我说了一下同步异步的问题,我说那可以对着实际时间校准这样呢,他说这样会比较好,然后具体说了一下怎么实现。
- 15. 因为我完全不知道浏览器缓存的知识所以也问了他一下,他说这个是个很大的一块让我多去学学。
- 16. 最后问了一下还有几次面试他说最少三次吧。。我。。。问他面试形式会有变化吗,他说主要看面试官。不排除手写代码的情况QAQ
总体是一次比较愉快的面试,问js内部逻辑实现和网页应用优化比较多,纯的html,css这些很前端的知识都没有问。面试官还挺好的,一开始看出来我比较紧张让我慢慢想不着急。
#### 一面(Tina)
- 1. get和post请求的区别
- 2. Ajax是什么
- 3. vue比原生js有什么优点
- 4. 原生js中对dom元素的操作有哪些
- 5. 事件冒泡是什么?什么时候会用?
## ByteDance
### 客户端开发(校招提前批)已拿招聘意向书,九月十月开正式offer
#### 一面
- 1. 自我介绍
- 2. 线程和进程的区别
- 3. 你说进程之间不共享变量,那进程之间是如何通信的?
- 4. 锁了解吗,死锁是什么?
- 5. 如何避免死锁?
- 6. Hashmap的实现原理?
- 7. Hashmap为什么高效?(我说不需要线程安全,然后超过多少会转化为红黑树,他说逻辑不对,不需要线程安全不能保证快,应该是答用位运算那个。无数次提示之后我后来说出来了)
- 8. 了解TCP吗?为什么要三次握手?(可能问了tcp和udp区别?我也不记得了,比较基础)
- 9. 为什么四次挥手?为什么不是6次?
- 10. HTTP3.0有什么新的feature知道吗?
- 11. (我说不知道,没学过3.0)那1.0和2.0呢?
- 12. 滑动窗口了解吗,这是干什么的?
- 13. 流量控制和拥塞控制了解吗?
- 14. 写题:连续最大子序列和
可能有遗漏或者记混了的……面完让我在线上等一下,过了几分钟二面面试官来了。
#### 二面
- 1. 自我介绍
- 2. TCP三次握手 然后他发现上一面问过了就没继续
- 3. 说说对JAVA的了解 (然后我就提到啥他问问这样)
- 4. 为什么选择客户端开发
- 5. 前端有什么经验
- 6. hashmap concurrentHashmap之间关系
- 7. JVM的结构(没答出来)
- 8. 强引用若引用之间关系
- 9. 会用命令行吗,会用git吗,常用命令哪些?了解git branch原理吗?(我其实不太清楚git branch原理,我直说了不是很确定,但我觉得应该是balabala,后来发现好像他们蛮喜欢这种?就是不一定要全都会,但是有自己思考的)
- 10. 今后的规划是什么
- 11. 写题:第一题写二叉树的高度,第二题是水平面上两个机器人,他们不知道彼此的存在但是知道这块地有没有被对方经过,只能往左,右走,或者jump到任意位置。共用同一套命令,然后设计一套命令让他们相遇。(我说一开始都往右走,记录走的步数n,发现脚下的地被走过了就往右跳n步。他说跳转不能规定位置 我就懵了。但是他说思路没问题,就问我有没有别的问题。然后问我过半个小时有没有时间,我说我有课 但他还是让我在线上等一下)
- 12. 你说你在自学安卓开发,你是怎么学习的?
一面二面会有一些重复,问的都不算难。但也没完全答上来。觉得问我今后规划的时候答得最差(捂脸)。
#### 三面
- 没问我自我介绍,直接说我看到你简历上有一个垃圾分类的项目,是对图像处理的,了解图片格式的区别吗?(我说了png,jpg和svg以及在自己的项目中怎么选择应用的)
- 知道xxx图片格式吗(我真的没听过,他说是比较新的一种,压缩率比较高)
- java垃圾回收机制了解吗(其实我不了解,我就拿二面问的强引用弱引用之类的扯了一下,顺便说了说C的指针,这边稍微聊了一些。主管纠正了我一些内容)
- JVM结构?(聪明的我二面结束看了一眼 这回答出来了)
- 设计模式有了解吗,知道哪些?我说我有学过,但是时间有点久,说了几个。
- 平时项目里有用过吗?(如实回答)
- 怎么快速自学,完成开发需求的?(如实回答)
- 写题:
- 1. 一堆数字,没有任何数据结构,拿走一个怎么找出。(异或,这个很搞笑,我当时突然就忘了异或叫什么,拼命给面试官比划那个符号。)
- 2. 写个线程安全的单例吧。(一直在拼命回忆但是还是没写出来。唉。最意难平的点)
- 3. 一个数组,长度n,其中有个数字出现了超过n/2次。找出这个数。我没想出只遍历一次的写法)
- 最近在看什么书
- 职业规划
- 为什么选择安卓开发
- 考虑读研吗(我说不考虑,比较想工作。澳洲研究生比较的水。现在突然意识到这是不是陷阱啊,如果我说我要读是不是就凉了。)
- 有什么问题想问(我问了怎么在开发中使用design pattern。有时候感觉不是很会用。也知道项目设计架构有问题,但是不是很会改。
- 以及最后那题到底怎么写orz)
三面结束之后就让我早点休息了,也没说多久有结果。。我觉得自己凉了。等了半周内推我的学长说好像有了。然后又等了快一周hr才联系我告诉我前面通过了,他们最后审核一下。然后过了一个周末跟我要了身份证号,邮件发了意向书。