腾讯PCG事业部腾讯视频面经

一面

1.mysql联合索引相关

给定联合索引(a,b,c),下面的语句那些可以用索引,那些不可以:where a=1 and b=2 and c=3; # 这条语句中a b c都可以用到联合索引

where a=1 and b>2 and c=3; # 这条语句中,a b能用到,c用不到

where a=1 and b=2 and c>3; # a b c都可以用到

where b=1; # 这条语句用不到索引

where a=1 and b=2 order by c; # a b能用到,c用不到

2.了解那些存储引擎。innodb和myisam的区别。事务:InnoDB 是事务型的,可以使用 Commit 和 Rollback 语句。

并发:MyISAM 只支持表级锁,而 InnoDB 还支持行级锁。

外键:InnoDB 支持外键。

备份:InnoDB 支持在线热备份。

崩溃恢复:MyISAM 崩溃后发生损坏的概率比 InnoDB 高很多,而且恢复的速度也更慢。

其它特性:MyISAM 支持压缩表和空间数据索引。

3. redis中zset的底层数据结构,为什么不用红黑树。

zset底层用了跳跃表。跳跃表是一种多层链表,相当于对一个链表不断向上抽取索引,查询的时候从上往下查找,类似于使用索引,复杂度为log(n),n为最底层链表的节点数。红黑树的查找效率也为log(n),但是红黑树的构造比跳跃表复杂,插入元素的时候需要进行旋转等操作。

跳跃表可以参考这里

4.nio aio bio的区别

这个是唯一问到的关于java的问题,可以参考这里

5.C语言的内存划分,栈和堆里都放了什么数据

我说C语言不是很清楚,讲了一下java的内存划分,java内存划分可以参考《深入理解Java虚拟机》那本书,第一章就讲到了。

6.当一个select语句很慢时,怎么找出慢的原因。(explain)

他问这个问题的主要意图是让我答explain这个关键字,当我说我会先用explain语句分析一下查询的过程时,他就说可以了,不用再说了。

7. redis压缩列表

这个我当时没看。可以参考这里

算法题1

给定无序数组:m[1,6,5,3,5,6,5],n[3,6,5,6,5,6]和一个整数target,求一组数m[i]+n[j]=target,只要满足条件就返回。方法一:暴力解法。使用两个循环嵌套,他说这个太复杂,不考虑。

方法二:对两个数组排序,然后分别用两个指针指向两个数组,依次后移。他说排序复杂度也太高,不考虑。

方法三:使用HashSet。先遍历一遍数组m,将m元素值作为值存储到HashSet中,然后遍历一遍n,每遍历到一个数n[i],就判断HashSet中是否存在一个值为target-n[i]的数,如果找到了就返回。如果遍历完数组n还没找到,就说明没有符合要求的数。

他听了一下思路说第三种可以,最后也没让写代码。

算法题2

大规模排序问题。给定一个大文件,里面存储着很多IP地址,这个大文件内存放不下。找出这个文件中出现次数最多的10个IP。

内存中放不下的意思是不能直接将这个大文件加载进内存进行排序。这种情况一般选择使用“分治”的思想。

具体做法如下:遍历文件a,对每个ip求取hash(ip)%100(这个hash操作是他想考察的重点),然后根据所得值将ip分别存储到100个小文件(设为a0,a1,...a99)当中。然后将这些文件存在硬盘上。

依次将这些小文件读取到内存中进行排序,并依次取前10个出现最多的IP放入另一个文件中,最后在对这10 * 100个IP排序,取出出现次数最多的10个。

相似的问题还有:这里和这里

二面

先自我介绍,问了一些个人的问题,相当于聊天。

1. 从做过的项目中找一个说一下

我选了一个后台管理系统说,这是我新加到简历上的,说了一个大概的过程。

这个是一个商品的后台管理系统,使用bootstrap+thymeleaf了一个简单的前端,使用Spring boot做后台框架,mybatis做持久层框架,redis做缓存,rabbitmq做流量削峰。大概的操作过程这样的,用户从前端选择商品,点击购买之后,请求首先会被放入redis中,使用redis做缓存的主要目的是加快前端页面的反应速度,如果不加redis而直接进入数据库的话, 响应速度会比较慢,而且当请求比较多的时候会对数据库造成比较大的负担。redis中存储了该商品的编号和剩余的数量,判断剩余数量是否足够,足够的话就将数量减一,然后将更改的数量放入rabbitmq中,使用rabbitmq的主要原因是防止一瞬间大规模流量会压垮数据库,起到一个削峰的效果。然后mysql数据库作为消费者从rabbitmq中取出更新后的商品数量,插入内存中。

我觉的说这种项目的时候,把数据从前端到后端的传递过程说清楚了,就差不多把整个项目讲清楚了。

2. innodb和myisam的区别

这个问题一面面试官也问到了。

3.linux进程,创建进程的函数是什么,《unix网络编程》读过没有

这个没答上来

4.什么时候需要使用索引

在数据库查询操作变得很慢的时候,考虑加上索引。

5.redis了解多少,有什么方式实现分布式锁,zookeeper实现分布式锁的原理

分布式锁可以参考这里和这里

6. 本科的学校和专业,在之前的学校和现在的学校感觉区别最大的地方

7. 未来的职业规划

8. linux中的fork函数

这个不也不会,我给他讲了一下Java中的fork/join。fork就是“分”,join就是“合”,所以fork/join的也是分治的思想。当一个任务非常大的时候,往往会将它分为很多小任务,将每个小任务分给一个线程尽心处理,处理完之后再将结果汇总。所以fork/join可以说是分治的多线程版本。

9.如何看待加班问题

一般遇到这样的问题就得小心。我当时答的他不太满意,听完之后就很严肃了。这种问题的一般答法应该是这样的:首先,不排斥加班,加班是正常的现象。因为一个人的能力总是有限的,所以在项目中说不定什么时候就会遇到一个比较难解决的问题,而在这时候,如果计划的进度被耽误了,那么自己加加班把进度赶一下是理所应当的事,保证最后的交付不会出问题。

如何看待到期没完成工作,要拖延的问题

他当时描述的情况是:假如某个周的周一,小组定了这周五要交付任务,但是到了周五当天,忽然有人说遇到了问题耽误了进度,必须延一周,问我怎么看这种情况。

这种问题的答法一般是:首先尽量保证自己不会出这样的问题。但是作为一个实习生来说,能力是有限的,可能有时候会遇到自己解决不了的问题,当自己确实无法解决的时候,就要求助同事,或者提早进行反馈,比如周二遇到了问题,经过自己的一番努力没有解决的话,就要及时反馈,不能等到周五的时候,马上要交付的会后再说。

思考题

分金条的问题,是网上的一个题。大概描述如下:

一位地主雇佣一位工人,雇佣期为7天,报酬是一根金条。现在的情况是,工人每天都要拿七分之一根金条,而只允许地主在金条上切两刀,问怎么切能够满足情况。

一开始我以为要两刀切成等大的七块,所以就陷入了一个误区。后来明白了不一定要切成七块,只要保证工人第一天结束后手里有1/7根金条,第二天结束后手里有2/7根金条,第三天结束后手里有3/7跟金条......就行。所以应该将金条切成1,2,4。第一天给工人1,第二天给工人2,并将1要回来,第三天再将1给工人......。

腾讯貌似挺喜欢问这种智商题的,还看到一个,可以看一下这里。

c语言编写面条排序算法,腾讯PCG事业部腾讯视频面经相关推荐

  1. 用c语言编写插入排序算法,C语言实现常用排序算法——插入排序

    插入排序是最基础的排序算法,原理: 首先1个元素肯定是有序的,所以插入排序从第二个元素开始遍历: 内循环首先请求一个空间保存待插入元素,从当前元素向数组起始位置反向遍历: 当发现有大于待插入元素的元素 ...

  2. 高光谱图像分类python语言编写 改进lstm算法

    高光谱图像分类python语言编写 改进lstm算法 改进的思想是高光谱图像存在同物易谱和异物同谱现象,导致原始的光谱信息在反映地物类别上不够准确,因此通过结合像元的类别信息,定义一个误差损失函数,求 ...

  3. c语言排序算法实际案例,[C语言] 部分经典排序算法详解(有图解)

    目录 1.内容概括 2.主要算法 3.技术的具体应用 4.算法实际应用 5.总结 0.前言 在上一篇文章<[C语言] 数组的实际应用三则>中我们提到了数组的一些基础知识,并通过三个实际例子 ...

  4. c语言sort_C语言十大排序算法,让老师对你刮目相看的技巧

    排序算法作为数据结构的重要部分,系统地学习一下是很有必要的. 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时 ...

  5. c语言实现各种排序,c语言实现各种排序算法

    以下是我用c语言实现的各种排序算法#pragma once; #define MAXSIZE 20000 typedef int KeyType; typedef char Infomation; t ...

  6. c语言的八大排序算法,程序员的内功:C语言八大排序算法

    四 一.冒泡排序 冒泡排序算法的运作如下: ●比较相邻的元素.如果第一个比第二个大,就交换他们两个. ●对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. ...

  7. C语言三种常见排序算法

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105112802 三 ...

  8. 比较排序算法的时间复杂度 c语言,c语言四种排序算法时间复杂度比较(10页)-原创力文档...

    1.方案设计: 我这次实验通过随机生成30000个随机数,把随机数存到数组中,用这同一组随机数据分别进行四种排序,直接插入排序.直接选择排序.冒泡排序和快速排序.还通过了调用txt文件把运算所需时间导 ...

  9. 【C语言】八大排序算法

    文章目录 1.排序的概念及其应用 1.1排序的概念 1.2排序的应用 1.3常见的排序算法 1.4时间性能的测试(测试排序算法的好坏) 2.常见排序算法的实现 2.1直接插入排序 2.2希尔排序 2. ...

  10. python算法描述_数据结构(Python语言描述)- 排序算法

    目录 1.基本排序算法 1.1 选择排序 1.2 冒泡排序 1.3 插入排序 2. 更快排序算法 2.1 快速排序 2.2 归并排序(合并排序) 1.基本排序算法 计算机科学家设计了很多巧妙的策略对列 ...

最新文章

  1. a卡显存检测软件_科普小课堂,A卡玩家如何轻松超频?
  2. 为什么socket接收大数据的时候接收不完全,出现丢包?
  3. Matlab:绘制简单能量的接收机工作特性曲线(Energy_detection_simulation_ok)
  4. html格式文档结构保存数据库6,freeCAD文档结构
  5. 看美国如何实现农业大数据的建设
  6. Hibernate之二级缓存
  7. 【Python3网络爬虫开发实战】1.5.2-PyMongo的安装
  8. Python面试基础
  9. python中的thread_深入理解Python中的ThreadLocal变量(上)
  10. php注册后面有对号错号,网络编程jQuery Ajax显示对号和错号用于验证输入验证码是否正确...
  11. PS2022安装教程(附个人详细安装教程)
  12. 【economic】程序员外包平台
  13. Windows挂起进程
  14. Mikrotik RouterOS路由器和华为交换机链路聚合+VRRP+单线多拨
  15. PLY文件读取与显示
  16. 并查集+字符排序-困兽之斗(乐视题)
  17. 不盲追大模型与堆算力!沈向洋、曹颖与马毅提出理解 AI 的两个基本原理:简约性与自一致性...
  18. C语言新手入门|初始C语言
  19. 020 MySQL概述及基本操作
  20. virtual和override作用和使用场景及理解

热门文章

  1. java list 过滤数据库_jdk8对list的各种处理实例详解,包括去重,排序,过滤,分组,统计...
  2. 公众号开发 单独 给某个用户 推送消息_校区学生会微信公众平台征稿启事
  3. python 日历热力图_Python如何绘制日历图和热力图
  4. a4b5笔记本大小对比_【玩码】全新升级MX350独显 小米笔记本Pro 15 2020款为创造力而生...
  5. 【UVA11168】Airport(凸包+点到直线距离(一般式))
  6. hdoj1087:Super Jumping! Jumping! Jumping!(dp基础题-最大上升子序列和(可不连续))
  7. (转)Dinkelbach算法(01二分规划更优解法)
  8. 增删改查oracle sql,oracle sql增删改查
  9. mysql5.5 mysqldump_mysql5.5mysqldump原文翻译_MySQL
  10. 计算机课程新讨论话题,信息技术组内主题讨论-.DOC