面试之开发知识点总结

1.汇编指令CALL与JMP的区别

call会把他的下一条指令的地址压入堆栈,然后跳转到他调用的开始处,同时ret会自动弹出返回地址。 

JMP只是简单的跳转

call的本质相当于push+jmp  ret的本质相当于pop+jmp

2.stl容器常见时间复杂度

https://blog.csdn.net/swty3356667/article/details/84330051

3.上采样之双线性插值

https://zhuanlan.zhihu.com/p/49832048

4.虚函数表在继承之后的布局

https://www.cnblogs.com/WPF-342201/p/11479758.html

5.b+树

https://blog.csdn.net/qq_26222859/article/details/80631121

6.leetcode腾讯精华50题

7.Linux下运行时调用动态链接库.so的三种方法

https://blog.csdn.net/sniperkang/article/details/83376650

8.父子进程共享内容

https://blog.csdn.net/qq_42265158/article/details/89428145

https://blog.csdn.net/u012138828/article/details/39031823

9.http报文解析及1.0、1.1和2.0

https://blog.csdn.net/yutiab69/article/details/82869239

https://www.cnblogs.com/kageome/p/10859996.html

https://blog.csdn.net/weixin_44489066/article/details/88640088

https://www.php.cn/faq/432915.html

10.tcp滑动窗口、流量控制和拥塞避免

https://blog.csdn.net/yao5hed/article/details/81046945

https://blog.csdn.net/gengzhikui1992/article/details/89141184

11.秒杀系统设计思路

12.访问量过高的处理方法:

消息队列做流量削峰,服务器集群搞负载均衡

13.redis分布式锁如何实现

14.python segment fault如何判断出错位置

import faulthandler

faulthandler.enable()

15.重定向与转发区别

重定向是指客户端请求A,然后服务器给客户端B的地址,客户端再向服务器请求B

转发则是客户端向服务器请求A,然后服务器把地址B的内容直接给了客户端,但是地址栏还是A的

16.html form表单构成

https://www.w3school.com.cn/tags/tag_form.asp

17.mvc中controller和service的职责划分

https://www.awaimai.com/873.html

18.hashcode相等,equals不一定相等;equals相等,hashcode一定相等

19.为什么不能根据返回类型来区分重载

因为在能隐式转换的语言里,这会造成语义不清,如果一个语言中没有强制转换,那么就能够根据返回类型区分重载

20.c++强引用和弱引用

在c++中,如果shared_ptr引用了weak_ptr则为弱引用,shared_ptr中的弱计数会加1,但是强计数不会,当强计数为0时shared_ptr则会自动销毁

https://www.zhihu.com/question/20368881/answer/14918675

https://blog.csdn.net/love18792838953/article/details/78393509

21.java finalize生命流程

finalize流程:当对象变成(GC Roots)不可达时,GC会判断该对象是否覆盖了finalize方法,若未覆盖,则直接将其回收。否则,若对象未执行过finalize方法,将其放入F-Queue队列,由一低优先级线程执行该队列中对象的finalize方法。执行finalize方法完毕后,GC会再次判断该对象是否可达,若不可达,则进行回收,否则,对象“复活”。

22.java方法内的局部变量是否线程安全

如果方法内局部变量没有逃离方法作用范围,则为线程安全

如果局部变量引用了对象,并且逃离方法作用范围,则可能存在线程安全问题

23.常量池

常量池就是一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等信息

运行时常量池时*.class文件中的,当该类被加载时,它的常量池就会被放入运行时常量池,并把里面的符号地址变为真实地址

24.java串池

https://www.cnblogs.com/fangfuhai/p/5500065.html

25.java中i++是线程安全的吗

https://blog.csdn.net/zx1293406/article/details/103549037

https://www.nowcoder.com/discuss/25772

26.java cas实现原理与使用

https://blog.csdn.net/u011506543/article/details/82392338

27.C++11以后,要求编译器保证内部静态变量的线程安全性

28.  左值和右值区别

左值是存储单元内的值,即是有实际存储地址的;

右值则不是存储单元内的值,比如它可能是寄存器内的值也可能是立即数。

能放在赋值运算符左边的左值是非const左值,否则是const左值

29.友元类不具有相互性,A是B的友元,不代表B是A的友元

http://c.biancheng.net/view/169.html

30.typeid介绍

http://c.biancheng.net/view/2301.html

31.type_info实际上并不一定存放在虚函数表中的第一项

https://blog.csdn.net/CoderJeff/article/details/46544171?utm_source=blogxgwz9&utm_medium=distribute.wap_relevant_bbs_down.none-task-blog-baidujs-1.nonecase&depth_1-utm_source=distribute.wap_relevant_bbs_down.none-task-blog-baidujs-1.nonecase

https://bbs.csdn.net/topics/350039666

https://blog.csdn.net/sttony/article/details/1673089

32.type_info介绍

https://blog.csdn.net/weixin_40539125/article/details/103000291

33.MVC介绍

https://www.awaimai.com/873.html

34.数据库范式要解决的数据冗余问题

冗余存储、更新异常、插入异常、删除异常

35.文件系统大致逻辑架构:进程task_struct中的文件结构找到文件打开表,文件打开表中存在inode

https://blog.csdn.net/ai2000ai/article/details/79738422 结合linux内核实现看

36.TCP差错恢复属于哪种机制

https://blog.csdn.net/cobracanary/article/details/102148951

TCP 的差错恢复机制也许最好被分类为GBN协议(回退N步) 与SR协议(接收方设置缓冲区,为每个报文段设置计时器,如果某个报文段没有被正确接收但是后面的报文段被正确接收了,那么就只需要重发这一个报文段) 的混合体。
37.  用户态和内核态

用户态与内核态是对CPU来讲的,是指CPU运行在用户态(特权级)还是内核态(特权级),很多人误以为是对用户进程来讲的。用户进程陷入内核态是指 由于内部或外部中断发生,当前进程被暂时终止执行,其上下文被内核的中断程序保存起来后,开始执行一段内核的代码。是内核的代码,不是用户程序在内核的代码,用户代码怎么可能在内核中存在,所以“用户态与内核态”是对 CPU 来说的

38. 中断上下文保存

中断上下文保存可以由CPU通过TSS保存,也可以自己写代码手动保存上下文

39.外中断的5个步骤

关中断;保留现场(还有的说还要保存断点的,断点即程序计数器这些东西);转中断服务程序;恢复现场;开中断

https://blog.csdn.net/caoyang_he/article/details/80869373

40.逻辑地址和线性地址的区别

https://blog.csdn.net/asdfsadfasdfsa/article/details/98223811

41.printf输出内容与类型不一致

https://blog.csdn.net/u011497904/article/details/42454483

42.c++内存泄漏

https://blog.csdn.net/qq_18824491/article/details/78902636

https://www.cnblogs.com/zzdbullet/p/10478744.html

43.stl sort底层实现(不仅仅是快速排序)

https://blog.csdn.net/qq_35440678/article/details/80147601

44.计数排序

https://www.cnblogs.com/xiaochuan94/p/11198610.html

45.基数排序 (leetcode 164可以用基数排序来做) 

https://www.cnblogs.com/Braveliu/archive/2013/01/21/2870201.html

https://www.yuque.com/zhaoshimowa/mcnxe0/gn48tn

https://blog.csdn.net/qq_26268527/article/details/58608390

46.c++可不可以没有构造函数

https://bbs.csdn.net/topics/210005872

47.get和post的区别

https://www.cnblogs.com/logsharing/p/8448446.html

48.迭代器失效的情况

https://blog.csdn.net/qq_37964547/article/details/81160505

https://www.cnblogs.com/wxquare/p/4699429.html

49.聚簇索引和非聚簇索引的区别

https://zhuanlan.zhihu.com/p/62018452

那么为何要使用非聚簇索引呢:

因为unique内容是随机产生的,不是按大小顺序生产,而聚集索引是按照大小的次序写入到磁盘中。
而插入一个unique内容,使用聚集索引,那么表中的所有记录就得重新排序并重新写入磁盘中,所以慢,而非聚集索引只是将索引存储在一个表中,只需要更新这个索引表就OK了。

1)由于行数据和聚簇索引的叶子节点存储在一起,同一页中会有多条行数据,访问同一数据页不同行记录时,已经把页加载到了Buffer中(缓存器),再次访问时,会在内存中完成访问,不必访问磁盘。这样主键和行数据是一起被载入内存的,找到叶子节点就可以立刻将行数据返回了,如果按照主键Id来组织数据,获得数据更快。

2)辅助索引的叶子节点,存储主键值,而不是数据的存放地址。好处是当行数据放生变化时,索引树的节点也需要分裂变化;或者是我们需要查找的数据,在上一次IO读写的缓存中没有,需要发生一次新的IO操作时,可以避免对辅助索引的维护工作,只需要维护聚簇索引树就好了。另一个好处是,因为辅助索引存放的是主键值,减少了辅助索引占用的存储空间大小。

注:我们知道一次io读写,可以获取到16K大小的资源,我们称之为读取到的数据区域为Page。而我们的B树,B+树的索引结构,叶子节点上存放好多个关键字(索引值)和对应的数据,都会在一次IO操作中被读取到缓存中,所以在访问同一个页中的不同记录时,会在内存里操作,而不用再次进行IO操作了。除非发生了页的分裂,即要查询的行数据不在上次IO操作的换村里,才会触发新的IO操作。

3)因为MyISAM的主索引并非聚簇索引,那么他的数据的物理地址必然是凌乱的,拿到这些物理地址,按照合适的算法进行I/O读取,于是开始不停的寻道不停的旋转。聚簇索引则只需一次I/O。(强烈的对比)

4)不过,如果涉及到大数据量的排序、全表扫描、count之类的操作的话,还是MyISAM占优势些,因为索引所占空间小,这些操作是需要在内存中完成的

50.redis rehas过程

https://www.cnblogs.com/jaycekon/p/6227442.html

51.消息队列和管道的区别

(1) 匿名管道是跟随进程的而消息队列是跟随内核的

(2) 命名管道是设备文件(匿名管道在内存中但不可见,而且只能亲属间通信),存放在磁盘上,消息队列存放在内存中

(3) 管道是数据流式存取,消息队列是数据块式存取

53.innodb和myisam的区别

1. InnoDB 支持事务,MyISAM 不支持事务。这是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

2. InnoDB 支持外键,而 MyISAM 不支持。对一个包含外键的 InnoDB 表转为 MYISAM 会失败;

3. InnoDB 是聚集索引,MyISAM 是非聚集索引。聚簇索引的文件存放在主键索引的叶子节点上,因此 InnoDB 必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而 MyISAM 是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。

4. InnoDB 不保存表的具体行数,执行 select count(*) from table 时需要全表扫描。而MyISAM 用一个变量保存了整个表的行数,执行上述语句时只需要读出该变量即可,速度很快;

5. InnoDB 最小的锁粒度是行锁,MyISAM 最小的锁粒度是表锁。一个更新语句会锁住整张表,导致其他查询和更新都会被阻塞,因此并发访问受限。这也是 MySQL 将默认存储引擎从 MyISAM 变成 InnoDB 的重要原因之一;

54.c++构造函数为何不能为虚函数

1.虚函数调用是在部分信息下完成工作的机制,允许我们只知道接口而不知道对象的确切类型。 要创建一个对象,你需要知道对象的完整信息。 特别是,你需要知道你想要创建的确切类型。 因此,构造函数不应该被定义为虚函数。

2.虚函数相应一个指向vtable虚函数表的指针,但是这个指向vtable的指针事实上是存储在对象的内存空间的。假设构造函数是虚的,就须要通过 vtable来调用,但是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。

55.数据库设置外键的好处

外键用于与另一张表的关联。是能确定另一张表记录的字段,用于保持数据的一致性

https://blog.csdn.net/weixin_42103026/article/details/89703427

https://blog.csdn.net/yaochongchong/article/details/44308659

56.数据库高并发解决方案

https://blog.csdn.net/xidiancyp/article/details/51519755

https://blog.csdn.net/weixin_30845171/article/details/98964953

57.mysql随机io和顺序io

接下来就是查询的时候,为什么要使用聚集索引,因为B+树的叶子都是数据。如果数据的基本是连续的,那么基本需要顺序i/o即可。如果底层存的是指针,那么就会走随机i/o性能查了一大截

58.c++之浅拷贝和深拷贝的区别(主要是多次析构导致内存泄漏)

https://blog.csdn.net/caoshangpa/article/details/79226270

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值