二战腾讯WXG后台开发实习一面(凉经)

二战腾讯WXG后台开发实习一面

腾讯春招实习生面试,之前面试WXG后台开发凉了,被QQ安卓客户端部门捞了。捞了后面试也过了,但可能他觉得我更适合做C++开发毕竟我现在不用Java也没写安卓了,于是又把我打回WXG后台开发。。。于是我兜了一个大圈又回到了WXG后台开发一面。第二天晚上凉了……

一、基础知识

面试开始前,我先问了面试官是哪个部门的。
然后开始个人介绍,接着面试官问我的个人项目(不是软件类的纯课余生活),接下来是问基础知识,因为这次面试忘了录制下来,所以只能记得自己不太会的一些东西,加粗为我个人不会的日后强化内容。
1,多线程和多进程的区别,然后问多线程服务器和多进程服务器的优缺点。
2,数据库事务,没用过事务,只能表示自己对事务不太了解。
3,如果一个服务器某个线程卡住,怎么解决。我说用工具找出然后关闭这个线程。接着问用什么工具,我表示没用过Linux系统,这个真不清楚。每次面试都少不了Linux系统,包括但不限于如何调试、检测内存泄漏、系统相关工具等,看来要加急安排实操了。
4,因为简历有写了解设计模式,于是问了我有哪些设计模式,工厂模式用在哪,单例设计模式是否会内存泄漏。(new的要记得delete,或者用静态对象也行)
5,C++多线程相关,如何实现。。。每次面试必问,问就是不会。。。

二、算法题

算法题太狠了,一下甩了5题让我做一个小时,幸运的是难度都在middle及以下,刚好有的题平时也刷过问题不大。
其中一题是实现高效且线程安全的懒汉式单例设计模式,晕,C++线程相关的完全不会,只能写个简单的单例设计,然后给面试官介绍应该如何上锁的和这样做的好处。
还有一题矩阵(其中数字满足某种排序顺序)找第K小,如果去用最优方法一题都至少半个钟(我太菜了 ),我只好遍历一遍然后用“algorithm”头文件提供的sort函数排序找第K个元素,连快排都懒得手写。不过这题估计面试官也是找来凑数的,光速略过。

三、总结

多刷算法题显然有莫大的好处,五天三场面试下来,做代码题的越来越得心应手。但面试官们也都表示我最大的缺点就是没有相关项目经历,同时也没有Linux开发经验。咋一看我要叠一个“在Linux环境下用C++实现支持多线程的项目且掌握了相关工具进行调试”的BUFF,任重而道远。
可惜了, 最后还是败在了没有项目经历上,看来只有大牛才有机会进wxg了。

四、部分答案补充

多线程/多进程服务器优缺点:

多线程的优势:

  1. 创建与环境切换开销少
  2. 同步的开销少(进程间同步一般牵涉OS内核)
  3. 数据复制可通过共享内存

多线程的局限性:

  1. 性能损失
    (1)单处理器、“计算任务繁重”的应用程序不会从多线程中获益
    (2)高精度的锁定策略会带来高同步开销
  2. 健壮性降低
    线程之间接收到的“MMU保护”很少或没有
  3. 缺乏高精度的访问控制

两者都可以提高程序的并发度,提高程序运行效率和响应时间。
线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于各CPU之间共享内存子系统的机器上运行,而进程则可以跨机器迁移。

事务Transaction:https://blog.csdn.net/mxw2552261/article/details/93263578

原子性、一致性、隔离性、持久性此处不多介绍。

1、脏读
脏读指一个事务读取了另外一个事务未提交的数据。假设A向B转帐100元,只发生在READ UNCOMMITED读未提交的情况下。
 1.update account set money=money+100 where name='B';
 2.update account set money=money-100 where name='A';
当第1条sql执行完,第2条还没执行(A未提交时),如果此时B查询自己的帐户,就会发现自己多了100元钱。如果A等B走后再回滚,B就会损失100元。  

2、不可重复读
不可重复读取是指在某事务处理过程中对数据进行读取,由于该事务更新操作导致多次读取数据时发生了改变。不可重复读取发生在READ COMMITED读已提交及以下的级别。
例如银行想查询A帐户余额,第一次查询A帐户为200元,此时A向帐户内存了100元并提交了,银行接着又进行了一次查询,此时A帐户为300元了。银行两次查询不一致,可能就会很困惑,不知道哪次查询是准的。
不可重复读和脏读的区别是,脏读是读取前一事务未提交的脏数据;不可重复读是重新读取了前一事务已提交的数据(与之前读取的未提交数据不符合)。

3、虚读(幻读)
幻读指的是在某事物处理数据过程中对数据多次读取,由于该事务的插入/删除操作而导致在多次读取过程中读取到不存在或者消失的数据

MySQL数据库共定义了四种隔离级别:
Serializable(串行化):可避免脏读、不可重复读、虚读情况的发生。
Repeatable read(可重复读):可避免脏读、不可重复读情况的发生。
Read committed(读已提交):可避免脏读情况发生。
Read uncommitted(读未提交):最低级别,以上情况均无法保证。

mysql数据库默认的事务隔离级别是:Repeatable read(可重复读)

多线程相关(仅入门):https://blog.csdn.net/qq_29426201/article/details/106055816

全部评论
楼主请问wxg实习也有面委会吗?我投了pcg一个捞部门被wxg捞了,今天一面
点赞 回复
分享
发布于 2021-04-07 23:15

相关推荐

2 6 评论
分享
牛客网
牛客企业服务