华为求捞

海外25届应届毕业生,投了一个部门笔试刚好碰到很难的第三题,300/600分被筛掉了。
还有没有部门可以捞一捞的啊,完全找不着人。

背景:海外QS前十的本硕,有多项机器学习项目经历。

#捞##华为##笔试#
全部评论
牛津大学?跪了
点赞 回复 分享
发布于 03-21 16:29 安徽

相关推荐

点赞 评论 收藏
分享
昨天 11:53
已编辑
门头沟学院 C++
1. 被free回收的内存是立即返回给操作系统吗?2. sizeof和strlen的区别?3. new/delete、malloc/free的区别4. 堆快一点还是栈快一点?5. 在main执行之前和执行之后执行的代码可能是什么?6. final和override的关键字?7. 拷贝初始化和直接初始化?8. select、poll、epoll9.Reactor?10. 阻塞、非阻塞、同步、异步?11. Proactor?1. 被free回收的内存首先会被ptmalloc使用双链表保存起来,当有用户申请内存的时候,会直接从这里面找出合适的内存进行返回。这样可以避免操作系统的频繁调用,另外它还会将小内存进行合并,防止产生过多的内存碎片;2. sizeof是运算符,strlen是库函数。sizeof的参数可以是任何数据的类型或数据,strlen的参数只能是字符串的指针,且结束符为'\0'的字符;3. 前者是C++运算符,后者是C/C++库函数;new自动计算要分配的内存对象,malloc需要计算;new是类型安全的,malloc不是;调用new的给自定义对象分配内存的时候,会调用构造函数并分配相应的内存,delete的时候会释放内存并执行析构;4.  栈快一点,操作系统堆栈提供支持,有分配专门的寄存器存放栈的地址,栈的出入栈也十分简单,并且有专门的指令执行,所以栈的效率更高更快;而堆在分配的内存的时候要使用算法寻找合适大小的内存,并且在获取堆的内容的时候需要两次访问,一次指针,一直是指针保存的地址5. 初始化全局变量和静态变量,即.data段数据,将未初始化的全局变量进行赋值;全局对象初始化;将argc、argv传递给main函数;___attribute___(constructor);结束后,全局的析构函数会在main函数执行完后析构,可用一个atexit注册一个函数会在main函数之后执行;___attribute___(destructor)6. override的关键字,指定了子类的这个虚函数必须重写父类的,如果函数名不小心打错了,编译器会进行报错,不会通过;当不希望某个类被继承、或不希望虚函数被重写可以在类名和虚函数后面添加final关键字;7. 直接初始化直接调用与实参匹配的构造函数;拷贝初始化首先使用指定构造函数创建一个临时对象,然后用拷贝构造函数将那个零食对象拷贝到正在创建的对象;8. select函数将已连接的socket都放到一个文件描述符集合,然后调用select函数将文件描述符拷贝到内核中,去遍历进行检测那个套接字发生事件,将其进行标记,后续再复制到用户态,进行遍历找到标记的套接字。这其中发生了2次遍历文件描述符集合和2次拷贝文件描述符集合。poll突破文件描述符个数的限制(1024),通过一个动态数组,以链表的形式管理。其它与select还是一样的。epoll通过在内核中使用红黑树来跟踪进程所有待检测的文件描述符,把需要监控的socket通过epoll_ctl函数加入到内核中的红黑树,第二,epoll使用时间驱动的机制,内核里维护了一个链表来记录就绪事件,当某个socket事件发生时,通过回调函数内核将其加入到就绪事件列表中,当用户调用epoll_wait函数时,只会返回有事件发生的文件描述符的个数。9. reactor模型是 I/O 多路复用监听事件,收到事件后,根据事件类型分配(Dispatch)给某个进程 / 线程。单reactor单进程:reactor对象通过epoll监听事件,收到事件后通过dispatch进行分发,如果是连接建立的事件交个Acceptor对象进行处理,如果不是就交给Handle对象通过read->业务处理->send的流程来完成完整的业务流程。单reactor多线程:对于不是连接建立事件,则交由Handler对象处理,他不负责业务处理,只负责数据的接受和发送,数据会发送给线程池来进行业务处理,处理完成后将业务结果返回给handler对象,然后发送给client;多reactor多线程:主线程只负责接受新连接,子线程负责完成后续的业务处理。主线程只需要把新连接传给子线程,子线程进行业务处理后,直接可以将处理结果发送给客户端。10. 阻塞I/O:当用户执行read,线程会被阻塞,一直等到内核数据准备好[1],并把数据从内核缓冲区拷贝到应用缓冲区中[2],当拷贝完成,read才返回。非阻塞I/O:可以在数据未准备好久立即返回,然后应用程序不断轮训内核,直到数据准备好,[2]操作还是要的;异步I/O:上面的[1]和[2]的步骤都不需要等待,都交由内核完成。11. Reactor模式是基于待完成的I/O事件,而Proactor模式是基于[已完成]的I/O事件。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务