阿里巴巴C++研发实习生面试挂经

前言:菜就是菜 ——节选自《节选》

内推,先完善信息,没有笔试环节,接着进行评测(心理素质之类的),1个多小时后收到了电面邀请的电话(有点快),约定第二天晚上十点后进行电面。第二天提醒安装钉钉,重新约定了电面时间。

正式电面:打开阿里的在线编辑器和在线视频,都无法获取摄像头,于是改为电话面试。

上来是一道编程题,手动实现memmove()函数,主要是考察内存和指针,要注意内存重叠问题(这块儿卡了一下)。然后叙述实现思路(根据内存地址高低不同来选择正向还是反向复制)

用没用过STL,用过哪些,vector和list有什么不同,分别是如何实现的(数组,双向链表),vector内存是如何增长的(1.5或2倍,其实答一个就行),为什么是这个数字(编译器实现不同,vs是1.5,gcc是2)。map如何实现的(红黑树),查询时间复杂度(lgn)。allocator有什么用(知道是分配内存用的,但是只用过默认的,没答上来)

菱形继承问题,虚函数怎么实现(虚函数表)

继续阅读“阿里巴巴C++研发实习生面试挂经”

获取GitHub Student Pack!

0. 介绍

GitHub 针对学生推出了非常大的优惠:

https://education.github.com/

囊括了一系列看不懂的服务,包括GitHub私有仓库,和DigitalOcean 50美元优惠券

1. 如何申请

在GitHub settings里添加一个edu邮箱并验证

进入 https://education.github.com/

点击“Get the pack”

登陆GitHub账号

选择刚才的edu邮箱,输入学校、毕业年份,申请理由(差不多就行)等信息

等待5个工作日以内审核(我的一天就审核好了)

2. 收到邮件

这时GitHub账户已经自动升级了,其他厂商的优惠在https://education.github.com/pack领取

DigitalOcean的优惠券要联系客服领取

 

Have an Octotastic day!

解决WordPress下“Error establishing a database connection”问题(配置php-fpm)

0.

我站出现“Error establishing a database connection”这个问题很久了,一直也没有解决,每次重启一下就好了,一开始以为是JetPack插件的锅,因为他需要在一个网页授权什么东西,由于是wordpress出品,于是就信任了,后来不断出现这个error,推测是Jetpack的问题,遂卸载,结果症状好了一点,但还是出error,只不过频率低了。

1. Debug过程

首先Google了一下这个error,大多数都是说MySQL用户名和密码不对的,确认一遍用户名密码。

其中有一条说尝试登陆一下MySQL看一下error日志,结果登不上,继续Google MySQL登不上的问题,手动起动无效,lnmp下重启无效,尝试重启大法(整机),结果又能登陆了,可以初步确定问题出在MySQL。

后来又搜到说是不是内存不够了,键入 free -m 查看内存使用情况,发现剩余内存很多(刚重启过),暂停。

过了几天又出现error,在查看内存使用,剩余只有几十MB,当然跑不起来(但是为什么是MySQL先挂掉了而不是别的服务),搜了一招增大swap的方法缓解内存不足,实践后没什么明显效果,见上一篇文章 。

继续探索,这次使用了 top 命令查看资源使用情况,跟Windows下的任务管理器差不多,按 shift+P 按CPU使用排序,按 shift+M 按内存使用排序,如图:

其中:

PID:进程的ID
USER:进程所有者
PR:进程的优先级别,越小越优先被执行
NInice:值
VIRT:进程占用的虚拟内存
RES:进程占用的物理内存
SHR:进程使用的共享内存
S:进程的状态。S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进 程优先值为负数
%CPU:进程占用CPU的使用率
%MEM:进程使用的物理内存和总内存的百分比
TIME+:该进程启动后占用的总的CPU时间,即占用CPU使用时间的累加值。
COMMAND:进程启动命令名称

终于破案了!可以看到世界上最好的语言的14个进程吃掉了70%+的内存!

可能世界上最好的语言只有世界上最好的服务器才配得上吧

2. 配置优化

既然定位到了问题就好办了,Google一下,修改配置文件php-fpm.conf,把 pm = dynamic 改为 pm = ondemand ,然后重启php就好了,重新看一下内存使用情况:

剩余内存从42MB增到了633MB,立竿见影~


参考:https://segmentfault.com/a/1190000010413463

Ubuntu增大swap(虚拟内存)大小

近期我站总是遇到“Error establishing a database connection”错误,重启后又可以重启访问,这个错误的具体分析会在另一篇文章中讲,尝试增大swap来解决问题。

1.查看内存使用情况

使用  free -m  命令:

可以看到swap只有255M

2.创建swap文件

我是在根目录下创建的swap,方便管理也好记

可以看到Linode的IO性能还是很不错的,能到438MB/S

把生成的文件转换成 Swap 文件:

sudo mkswap -f swap

把生成的swap 文件加入到系统中:

sudo swapon swap

查看分配情况:

free -m

成功增加了 1G ~


参考:http://blog.csdn.net/Demon_xiaochunjie/article/details/51441271

解决git push时每次都要输入Github用户名和密码的问题

0. 分析

在执行 git push 时,有时候会要求验证用户名密码,如下:

明明添加了SSH key了,还是要验证,很不方便

出现这种问题的原因是使用https的方式添加的远程仓库,而不是SSH的方式

1. 解决

确认你在Github中添加了SSH key,关于如何在Github中添加SSH key,请参考:Connecting to GitHub with SSH,或自行搜索,在此不再赘述。

使用 git remote -v 查看对应的克隆地址

可以看到确实是以https方式clone的

删除并重新添加:

SSH的链接可以直接在项目页复制

重新查看clone地址 git remote -v

已经改为SSH的方式了

push一下

 

此方法只针对当前项目,其他项目要重新走一遍这个流程


参考:https://segmentfault.com/q/1010000004596130