java八股
treemap和linkdedhashmap区别,实现原理
https://blog.csdn.net/shidebin/article/details/126814905
架构
操作系统与计算机原理面试题
进程通信方式
io多路复用:一个线程处理多个io流
零拷贝
python基础面试题
- list,字典,元组的优缺点
list 可存储各种类型的元素,并且长度可变,tuple长度不可变,访问速度上元祖比列表稍块,字典存储k,value类型的键值对,字典的key应为不可变对象,像元祖,字符串,int,float类型的数据。访问dict中的元素可以达到常量的时间复杂度,dict一般用于聚合统计,时间换空间的辅助结构
以下链接有关于几种数据结构更详细的解释
https://blog.csdn.net/weixin_41245276/article/details/87485867
- init函数,init.py的区别
init 函数在实例化对象时调用,用于初始化类的成员变量
https://www.syrr.cn/news/34246.html?action=onClick
init py 用于控制包的导入行为,当导入一个包使实际上是会去执行他的init文件,通过包名可以访问init中 导入的各个变量
还有一种导入包的方式from . import *,这样使用的时候就不用加包名调用了,只会导入__init__.py 中__all__ = [module1, module2] 中的模块
实际中用的比较多的还是from package import module
https://blog.csdn.net/xuzhexing/article/details/91043393
- range和xrange的区别
xrange 存在于python2,xrange是一个生成器,好处主要是省内存,不需要占用整个序列的空间。
- 迭代器和生成器的区别
迭代器:如果一个对象同时实现了__iter__()和__next()__()方法,那么它就是迭代器。for 循环遍历list,str,tuple时,首先调用iter方法,接着一次次调用next方法,当取不到元素时,会抛出stopiteration异常,for会自动捕获这种异常,循环结束
生成器:生成器用于简便创建的迭代器,只需要在函数中返回数据的地方使用yield关键字,或者还可以使用生成器推导式,spark,mapPartitions算子中处理函数需要传递一个迭代器。
- 设计模式
单例设计模式
可以通过import,装饰器,new, 元类实现装饰器
https://blog.csdn.net/weixin_43673156/article/details/124319437
2. 工厂设计模式
一个类有多个子类,可以创建一个工厂,传递一些参数,来动态决定使用哪个子类
3. 建造者模式
建造者模式用于将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
算法相关面试题汇总
阿里4月7日开发岗笔试题
题目描述:
一个仅包含小写字母的字符串,希望删除其中一个非空连续子串,使得剩下的字符串至少有k种不同字母。
问有多少种不同的删除方案?注:若删除的子串位置不同,则视为两种不同的方案。
输入描述:
第一行输入两个正整数 n 和k,代表字符串的长度以及最终字符串的字母种类最小值。
一个长度为n的只包含小写字母的字符串s。(保证至少k种字符)
1<n<200000
1 <= k <= 26
输出描述:
一个整数,代表删除子串的方案数。
答案链接 https://zhuanlan.zhihu.com/p/494770906
网络相关面试题整理
1.请说一下OSI七层网络模型
首先请参考百度百科osi七层网络模型https://baike.baidu.com/item/七层模型/1441391?fr=aladdin
七层模型通常包括,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层,在五层模型中表示层和会话层都被合并到了应用层。
在应用层通常由http,https,dns,ftp,sftp等协议
传输层通常有tcp和udp协议
网络层有ip协议
- 请说一下三次握手和四次挥手
三次握手是指建立tcp链接之前,双方需要先发送三个报文来同步一些信息,之后双方便可以正常的发送消息。
客户端和服务端开始都处于close的状态,服务器端调用socket的监听方法之后,此时服务端处于listen状态
首先由客户端发送一个seq=x的syn报文,此时客户端处于syn_send的状态。这是第一次握手。
服务器端收到这个报文之后,便发送一个 syn_ack的报文,其中ack=x+1,syn=y,
此时服务器端处于syn_rcvd 状态,这是第二次握手。
客户端收到第二个报文之后,就处于一个链接建立的状态。之后客户端会发送第三个ack报文,其中seq=x+1,ack=y+1
三次握手的目的
用于确定双方的数据可以被正常传输
用于同步自身序号
三次握手的形象解释
第一次客户端发出信息"听不听得见啊";第二次服务器端回"听得见,你能不能听得见啊",那么客户端就认为自己发出去的消息对方可以收到,对方发的消息自己也能收到,客户端就认为这个传输没有问题,客户端之后再回一个听得见,那么客户端就认为客户端就认为自己发出去的消息对方可以收到,对方发的消息自己也能收到,那么服务器端就认为这个连接就是可以被正常建立的。
基于以上的逻辑,两次握手是不够的,四次握手是多余的
https://leetcode.cn/circle/discuss/Vb3nJ1/
MySQL
MyISAM 和 InnoDB 的区别有哪些?
InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,InnoDB支持外键,而MyISAM不支持
聚簇索引和非聚簇索引
聚簇索引是按照主键构建一棵b+树,行数据存在叶子结点中
非聚簇索引叶子结点存储的是主键的值
redis
单线程redis的qps多少
10w
- 怎么统计一亿用户的日活,hyperloglog有什么缺点,bitmap不行么
https://www.cnblogs.com/crazymakercircle/p/17396091.html#方式1通过-redis-的-set-集合来实现