面试(架构,网络)

java八股

treemap和linkdedhashmap区别,实现原理
https://blog.csdn.net/shidebin/article/details/126814905

架构

  1. https://www.cnblogs.com/crazymakercircle/p/17197091.htmlhttps://www.cnblogs.com/crazymakercircle/p/17197091.html

  2. 羊了个羊https://www.cnblogs.com/crazymakercircle/p/17059585.html

操作系统与计算机原理面试题

进程通信方式

io多路复用:一个线程处理多个io流

零拷贝

python基础面试题

  1. list,字典,元组的优缺点
    list 可存储各种类型的元素,并且长度可变,tuple长度不可变,访问速度上元祖比列表稍块,字典存储k,value类型的键值对,字典的key应为不可变对象,像元祖,字符串,int,float类型的数据。访问dict中的元素可以达到常量的时间复杂度,dict一般用于聚合统计,时间换空间的辅助结构

以下链接有关于几种数据结构更详细的解释

https://blog.csdn.net/weixin_41245276/article/details/87485867
2. 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

  1. range和xrange的区别

xrange 存在于python2,xrange是一个生成器,好处主要是省内存,不需要占用整个序列的空间。

  1. 迭代器和生成器的区别

迭代器:如果一个对象同时实现了__iter__()和__next()__()方法,那么它就是迭代器。for 循环遍历list,str,tuple时,首先调用iter方法,接着一次次调用next方法,当取不到元素时,会抛出stopiteration异常,for会自动捕获这种异常,循环结束

生成器:生成器用于简便创建的迭代器,只需要在函数中返回数据的地方使用yield关键字,或者还可以使用生成器推导式,spark,mapPartitions算子中处理函数需要传递一个迭代器。

  1. 设计模式
    单例设计模式
    可以通过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/%E4%B8%83%E5%B1%82%E6%A8%A1%E5%9E%8B/1441391?fr=aladdin

  七层模型通常包括,应用层,表示层,会话层,传输层,网络层,数据链路层,物理层,在五层模型中表示层和会话层都被合并到了应用层。

在应用层通常由http,https,dns,ftp,sftp等协议

传输层通常有tcp和udp协议

网络层有ip协议

  1. 请说一下三次握手和四次挥手
    面试(架构,网络)_第1张图片
    三次握手是指建立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

三次握手的目的

用于确定双方的数据可以被正常传输

用于同步自身序号

三次握手的形象解释

第一次客户端发出信息“听不听得见啊”;第二次服务器端回“听得见,你能不能听得见啊”,那么客户端就认为自己发出去的消息对方可以收到,对方发的消息自己也能收到,客户端就认为这个传输没有问题,客户端之后再回一个听得见,那么客户端就认为客户端就认为自己发出去的消息对方可以收到,对方发的消息自己也能收到,那么服务器端就认为这个连接就是可以被正常建立的。

基于以上的逻辑,两次握手是不够的,四次握手是多余的

面试(架构,网络)_第2张图片
https://leetcode.cn/circle/discuss/Vb3nJ1/

MySQL

MyISAM 和 InnoDB 的区别有哪些?

InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,InnoDB支持外键,而MyISAM不支持

  聚簇索引和非聚簇索引

聚簇索引是按照主键构建一棵b+树,行数据存在叶子结点中

非聚簇索引叶子结点存储的是主键的值

redis

单线程redis的qps多少

10w

  1. 怎么统计一亿用户的日活,hyperloglog有什么缺点,bitmap不行么

https://www.cnblogs.com/crazymakercircle/p/17396091.html#%E6%96%B9%E5%BC%8F1%E9%80%9A%E8%BF%87-redis-%E7%9A%84-set-%E9%9B%86%E5%90%88%E6%9D%A5%E5%AE%9E%E7%8E%B0

你可能感兴趣的:(面试,架构,网络)