• 《秋招日记》阿里一面


    阿里一面

    面试官:(先介绍了一下自己, 然后让我介绍一下自己)

    我:巴拉巴拉吧拉, 个人信息说完后,问面试官,要不我先介绍一下项目

    面试官:好的,可以的

    我:我的项目是一个网络聊天室的项目,实现的功能是用户间的私聊和同一组用户间的群聊,用户可以实现注册登陆的功能...

    面试官:为什么不直接用socket呢,为什么要用epoll?

    我:socket需要对应一个客户端创建一个线程,当客户很多的时候cpu会负载过大..

    面试官:你自己测试过吗?

    我:没有诶

    面试官:这个其实用户很多也是很快的哈,那这个用户登陆状态的保留为什么要用redis呢,用mysql不行吗

    我:emmmm,用mysql也可以,其实记录一下登陆的cookie和时间就可以了

    面试官:对呀,那为什么还要用redis呢

    我:大概是就是为了学习一下redis的使用吧。。。

    面试官:那我们来看看下一个项目吧,这个虚拟机调度,你知道现实的虚拟机调度需要考虑哪些因素吗?

    我:我想一想,价格肯定是要考虑的,购买服务器的价格和服务器每天运行的维护费用之类的,然后,虚拟机的迁移?

    面试官:虚拟机的迁移是怎么实现的呢,比如我现在cpu或者内存不够用了,我要怎么扩容呢?

    我:难道是等他停止服务了把虚拟机迁移到另一个CPU和内存更大的服务器上去?

    面试官:这个一般租用虚拟机的人他都不会关机的,因为业务它是不会停的嘛

    我:这个,,我也不是很清楚

    面试官:这个你可以之后去了解一下,mysql了解吗?

    我:了解吧

    面试官:mysql的事务,事务执行一半会怎么样?

    我:噢,我知道事务是原子的,事务执行一半会回滚

    面试官:那这个原子性是怎么保证的呢?

    我:用日志实现的

    面试官:日志怎么保证可靠性的

    我:...(我记不太清说了什么了)

    面试官:来问一下C++基础吧,new和malloc的区别?

    我:new是对malloc的封装,new是类型安全的,malloc是库函数,new是运算符

    面试官:em,对内存池有了解吗?有用过内存库之类的吗?gdbc?

    我:没有了解

    面试官:好吧,可以去了解一下 那我们来做个题吧,多线程平时编程的时候会用到吗

    我:会用到

    面试官:现在让你写一个多线程的程序你能写的出来吗

    我:可能需要查一下函数怎么用,,

    面试官:那这样吧,写一个循环队列可以吗

    我:(噼里啪啦霹雳啪啦)写好了,面试官你看一下

    面试官:这是单个线程访问循环队列,如果有多个线程访问循环队列的话,就得加锁是吧,你都知道哪些实现锁的方式?

    我:互斥锁,自旋锁,也可以用信号量

    面试官:那有没有不用锁来实现,比如写一个无锁队列?听说过吗?

    我:(面试官让我写完发他邮箱)

    我写了两天,觉得好难啊,呜呜呜,第一天在百度上找,标准库里面找,还找到了一篇论文,原理大概都了解了但是写起来真的好难,然后链表的实现方式比较简单,但循环队列的方式会出现各种各样的bug,其中ABA问题是最难解决的,我在网上看到了DoubleCAS的做法,可是看不懂,最后写了一个带有bug的版本发过去了,,希望人没事

  • 相关阅读:
    php stdClass转数组
    PHP 获取1970年前的时间戳,且为负
    springboot响应格式Resullt封装
    php使用elasticsearch
    day0620211207
    day0820211209
    day022021121
    day0520211206
    day0720211208
    day0320211202
  • 原文地址:https://www.cnblogs.com/Dancing-Fairy/p/15181303.html
Copyright © 2020-2023  润新知