Summarization of Tech Interviews(技术面试总结)

手心网(2015)

Q1. 解释一下 TCP/IP 协议之滑动窗口?

滑动窗口协议的维基:https://en.wikipedia.org/wiki/Sliding_window_protocol

Q2. UDP 包大小,什么时候应该用 UDP / TCP?

UDP 包大小理论上在 8 - 65535 byte ,IPv4 协议下数据域实际大小:65507 byte。

Q3. 抽奖/秒杀/抢购系统的设计?

贾浩:利用 MySQL 特性来解决“写数据的原子性”。缺点:“原子性的写”可能是靠加锁实现,这也就大大降低了性能,因为 Unix 是分时系统。

我:应该根据用户量,酌情使用 redis 集群特性。使用 hashtable 数据结构,这样能在 O(1) 的时间复杂度内完成判断。使用“一致性 hash ”路由算法。 0~\(2^{32}\) 空间内,对用户ID进行模运算。

贾浩 A:利用 update 操作的原子性,预先设置抢购商品数量个令牌,当用户请求来时,先校验所剩的令牌数,有剩余表示该用户可以抢购。

UPDATE 抢购表 uid = $uid, token = 0 Where token = 1 and token = 1

我 A : MySQL 并发时,可以加写锁:最常用的两种引擎大概是 MyISAM 和 InnoDB,他们分别实现了表锁和行级锁。

令牌系统,不合理的请求在前端被档,不会到后端,保证了后端系统稳定。这也保证了 MySQL 写数据的原子性。A 2 : 令牌桶算法(Token Bucket)——网络流量整形、速率限制

贾浩:抢购系统原理 UPDATE 原子性 + token 预先分配

Q4. call_user_func VS. sql_autoload_register() + spl_autoload() 方案选择

贾浩:为什么不用 PHP 原生特性?

我:使用 SPL 加载类,可以保证框架的完全面向对象特性,比如使用

Input::get('name');
URL::segement(3);

如果使用 call_user_func 必须先手动加载对应文件,所以 CI 框架会有丑陋的写法:

$this->load->('input');  //都需要先load
$this->input->get('name'); $this->load->('url'); //需要先load
$this->url->segement(3);

链家网——电话面试(2015)

Q1. 十万个数,找出最小的前K个?

容量为K的最小堆,时间复杂度O(N × logK),《编程之美》之“2.5寻找最大的K个数”。

Q2. PHP 生命周期?

Q3. fpm 生命周期?

链家——现场面试(2015)

Q1. 如何改善你的“Power 8 极限算法挑战赛第六期”算法?

用 bitset 改善“Power 8 极限算法挑战赛 第六期”程序,优化程序所使用的内存。优化后,空间占用减少到3MB。程序数据将会存储在CPU cache L3 中,数据相对CPU的“距离”越近、读写速度越快。

Q2. 外部排序:利用 3MB 的内存空间对磁盘中 10G 的数进行排序,数据取值范围 0 ~ 10^7?

使用“多趟桶排序”进行排序。但技术总监面(二面时)否定了该解法。我后来反思觉得,用多趟桶排序还是能解的!(具体解法有待后续更新)

2016年6月28日更新:

利用B树也是很好的解决方式,而且很多成熟的方案(比如MySQL)都是在利用B树的变种来组织数据。首先,生成B树、然后从小到大地层序遍历,这样就相当于进行了排序。

Q3. 动态规划之以O(n)时间复杂度解决 “最大连续子数组和”问题?

int MaxSubString(int* A, int n)
{
int Start = A[n - 1];
int All = A[n - 1]; for (int i = n - 2; i >= 0; i--) //从后向前遍历,反之亦可。
{
Start = max(A[i], A[i] + Start);
All = max(Start, All);
} return All; //All[0] 中存放结果
}

参考资料:http://www.cnblogs.com/waytofall/archive/2012/04/10/2439820.html

Q4. PHP zval 的代码实现?

解:

它的实现是在 Zend/zend.h 文件中。:

struct _zval_struct {
zvalue_value value; /* 变量的值 */
zend_uint refcount__gc;
zend_uchar type; /* 变量当前的数据类型 */
zend_uchar is_ref__gc;
};
typedef struct _zval_struct zval; //在Zend/zend_types.h里定义的:
typedef unsigned int zend_uint;
typedef unsigned char zend_uchar;

保存变量值的value则是zvalue_value类型(PHP5),它是一个union,同样定义在了Zend/zend.h文件里:

typedef union _zvalue_value {
long lval; /* long value */
double dval; /* double value */
struct {
char *val;
int len;
} str;
HashTable *ht; /* hash table value */
zend_object_value obj;
} zvalue_value;

具体的介绍都在 https://github.com/walu/phpbook/blob/master/2.1.md 里面。

但是 PHP7 之后对 _zval 进行了改进,具体代码定义在 php7.0.3/Zend/zend_types.h 中:

typedef union _zend_value {
zend_long lval; /* long value */
double dval; /* double value */
zend_refcounted *counted;
zend_string *str;
zend_array *arr;
zend_object *obj;
zend_resource *res;
zend_reference *ref;
zend_ast_ref *ast;
zval *zv;
void *ptr;
zend_class_entry *ce;
zend_function *func;
struct {
uint32_t w1;
uint32_t w2;
} ww;
} zend_value; struct _zval_struct {
zend_value value; /* value */
union {
struct {
ZEND_ENDIAN_LOHI_4(
zend_uchar type, /* active type */
zend_uchar type_flags,
zend_uchar const_flags,
zend_uchar reserved) /* call info for EX(This) */
} v;
uint32_t type_info;
} u1;
union {
uint32_t var_flags;
uint32_t next; /* hash collision chain */
uint32_t cache_slot; /* literal cache slot */
uint32_t lineno; /* line number (for ast nodes) */
uint32_t num_args; /* arguments number for EX(This) */
uint32_t fe_pos; /* foreach position */
uint32_t fe_iter_idx; /* foreach iterator index */
} u2;
};

沈阳小公司(2015)

Q1. 设计抢购系统,分为两种策略:(1)固定中奖概率、固定人数 (2)固定中奖概率、不固定人数?

百度外卖(2016)

Q1. PHP 的 foreach 函数对于如下代码,输出的顺序将是是怎样的?

$arr[0] = 'a';
$arr[2] = 'b';
$arr[1] = 'c'; foreach($arr as $a)
echo $a;

解:

输出 abc。

Q2. 百度外卖的订单系统,怎样设计才能最大程度地拓容?——包含订单表、商户表、用户表?

Q3. 打印回形数组?

Q4. (同链家网)PHP内核 zval 实现?

Q5. 设计一个抢购/秒杀系统?

Q6. 对消息队列的认识和理解,比如 Kafka?

小肚皮(2017)

Q1. 上机写出这样的程序:

该公司有男性员工m人,女性员工n人,要求设计一种算法用来安排周一和周四两天的午餐分组安排,设每组有x人(x是正整数且是偶数),男女比例1:1(某组人数不足x的除外),周一和周四的分组安排不能相同。

HIGO(2017)

Q1. 手写算法,如何从二叉树中找出两个距离最远的节点?

解:

像拎葡萄一样,先从跟节点拎一下,找出最长的节点,记为 node1;然后再从 node1 节点拎一下,找出当前最长的节点,记为 node2。node1 和 node2 既为两个距离最远的节点。

Q2. 上机写 SQL,利用如下三个表,列出每个商店商品数量第一多的类目?列出每个商店商品数量第一多的类目?

shop

sid sname
1 s1
2 s2

category

cid cname
1 c1
2 c2

goods

gid sid cid gname
1 1 1 g1s1c1
2 1 1 g2s1s1
3 1 2 g3s1c2
4 2 1 g4s2c1
5 2 2 g5s2c2
6 2 2 g6s2c2

Summarization of Tech Interviews的更多相关文章

  1. interview material

    Articles Recommended: Steve Yegge – Get That Job at Google [web] Carlos Bueno – Get That Job at Face ...

  2. think

    https://github.com/crossoverJie/Java-Interview Java-Interview https://github.com/aalansehaiyang/tech ...

  3. (麻省理工免费课程)C语言内存管理和C++面向对象编程

    此课程有全部讲义和习题. 课程描述实在得令人发指.翻译如下: 您是否由于自己的Python程序比同僚们的C程序慢而垂头丧气?你是否想不用JAVA实现面向对象?加入我们,学习C和C++吧!我们带您从简单 ...

  4. amazon interview

    I'll be sitting for an Amazon interview in 3 months. Which website should I use to practice: SPOJ, H ...

  5. 25 highest paying companies: Which tech co outranks Google, Facebook and Microsoft?

    Tech companies dominate Glassdoor’s ranking of the highest paying companies in the U.S., snagging 20 ...

  6. 转 Microsoft's Objective-C tech started on BlackBerryOS, Tizen

    今天看到了这个  Microsoft's Objective-C tech started on BlackBerryOS, Tizen 见原文 http://www.osnews.com/story ...

  7. Atitit 编程语言知识点tech tree v2 attilax大总结

    Atitit 编程语言知识点tech tree v2 attilax大总结 大分类中分类小分类知识点原理与规范具体实现(javac#里面的实现phpjsdsl(自己实现其他语言实现 类与对象实现对象实 ...

  8. CIFAR-10 Competition Winners: Interviews with Dr. Ben Graham, Phil Culliton, & Zygmunt Zając

    CIFAR-10 Competition Winners: Interviews with Dr. Ben Graham, Phil Culliton, & Zygmunt Zając Dr. ...

  9. Tech Stuff - Mobile Browser ID (User-Agent) Strings

    Tech Stuff - Mobile Browser ID (User-Agent) Strings The non-mobile stuff is here (hint: you get jerk ...

随机推荐

  1. ida脚本函数

    #打印光标所在位置函数中地址和汇编代码 startaddr=GetFunctionAttr(ea, FUNCATTR_START) items = idautils.FuncItems(startad ...

  2. Selenium基础知识(四)表单切换

    在测试过程中,经常会碰到frame和iframe,嵌套等情况 这种情况下直接通过id,name等等是无法定位到的 好在selenium替我们想到了这个问题switch_to方法解决问题 switch_ ...

  3. 数据加密之MD5加密

    MD5是一个安全的散列算法,有两个特点:1.输入两个不同的明文(一段原始的数字信息)不会得到相同的输出值2.根据输出值,不能得到原始的明文,即过程不可逆所以要解密MD5没有现成的算法,只能用穷举法,把 ...

  4. 用URLRewriter重写url

    用url重新一般都是使用URLRewriter库,基本上都是一些配置,在webconfig中 首先配置configuration节点 <configSections> <sectio ...

  5. Nginx性能调优

    [调优]Nginx性能调优   一.Nginx优化配置 1.主配置文件优化:# vi /usr/local/nginx/conf/nginx.conf------------------------- ...

  6. 关于kingoroot这款软件

    弃了饱受诟病的kingroot系列的软件,又出现了一款名为kingoroot的软件. 大约一年之前用过kingoroot的apk版,成功为我的手机root了,而且其行为也并不是那么流氓,所以当时对其很 ...

  7. 域名重新绑定ip时访问地址NotFount404

    情形描述:部署在A服务器IIS上的asp.net程序,搬迁到B服务器上,重新绑定域名和ip后.再访问网址时有些电脑能正常访问,而有些电脑报404 not found错误. 经分析发现是个人电脑网络设置 ...

  8. idea上传项目到github出现"remote with selected name already exists"情况的解决

    1. 2. 3.

  9. NetSpeed

    NetSpeed公司提供的NOC包括三部分,可以通过NocStudio进行配置生成. 1)NetSpeed Orion,面向快速SoC design的可综合平台. 2)Linley NetSpeed ...

  10. How to compute f1 score for each epoch in Keras

    https://medium.com/@thongonary/how-to-compute-f1-score-for-each-epoch-in-keras-a1acd17715a2 https:// ...