【面经】2024春招-云计算后台研发工程师2(三大行 & TW等)
文章目录
- 岗位与面经
- 基础1:数据库 & 网络
- 基础2:系统 & 网络编程
- 模板3:算法 & 行测
岗位与面经
1、银行面经(重点)
银行笔试:
国有四大行只有农行没有发笔面(听说被学历卡了).....所以我决定以后都改称为三大行(雾
如果真的要评四大的话,那么我推荐招商银行(嗯)。
入围中国工商银行2024年度春季校园招聘笔试!岗位为浙江杭州分行-科技菁英
入围中国建设银行2024年度春季校园招聘笔试环节,您已获得浙江省分行笔试资格
诚挚邀请您参加招商银行2024春季校园招聘第三批笔试。
广大和邮储也给我发了广告,然而好像并没有技术岗,嗯多投了一个广发。
2024中国银行上海市分行-信息科技岗
只有一面,地点在外滩中国银行大楼,没有问技术。
1.自我介绍
2.即兴演讲
3.有没有其他offer,为什么选中行,为什么不去互联网,为什么不考研,为什么不回浙江。
4.实习,做什么内容,加不加班,有没有加班费,什么技术栈,对生活方式的看法。
5.愿不愿意调剂,轮岗。
2023年中国银行上海分行信息科技岗春招面试经验 2023.5.22
中国银行上海分行信息科技岗
1.一分钟自我介绍。
2.抓阄,三道题抽一道题,给一分钟看题时间,然后进行一分钟即兴演讲。
3.接着问有没有考研
4.有没有其他offer,
5.家庭情况啥的。
6.为什么不选择互联网企业
7.有没有实习。
8.会什么语言,
9.毕业设计做的什么。
10.一年的轮岗能不能接受。
11.有可能会加班,对这个问题怎么看。
中国银行上海分行
1、自我介绍
2、结合简历,提问工作经验、工作的收获、工作中学到了什么?
3、大学的学生干部经历
4、兴趣爱好
5、你的父母做什么的
6、你的同学都找什么工作
7、读研期间你的收获是什么
8、你对银行有了解吗?
9、你对你申请的岗位了解吗?如果轮岗你能接受几年?你期望的薪资是多少?
即兴演讲(2分钟看题目准备,讲1分钟)
针对手机银行、微银行等软件系统,如何优化用户体验?
金融科技,AI人工智能,金融第三方接口,金融科技,数字银行,数字经济,垄断,延迟退休,数字化,硅谷银行。
剩下的就是类似hr面的聊天
2、外企,TW面经(重点)
- presentation+文化,注意是pre英文
presentation主题:人工智能,自动驾驶,元宇宙。
我们希望在面试交流过程中看到你的:
● 你的英文能力
● 你的应变能力
● 收集信息、分析问题的能力
● 对不同的意⻅或思维方式是否持开放态度
● 接纳学习新事物的能力
● 你的沟通表达的能力
一开始先让我自我介绍,因为目前还是全中文介绍,所以我这部分是用中文介绍的。
PRE环节,英文演说。结束后面试官夸奖我准备了很多资料,英语也不错,不过跳过了Pre询问环节,直接开始问其他问题。
比如留学了多久,有没有什么长期目标,说说一个自己写过的技术含量高点的项目之类的。
之后问我什么时候可以入职,我回答最近就可以,于是开始向我介绍一些入职后的培训环节和公司的一些分工机制。
后就是反问环节,问了点公司机制,时间到了就结束了。
二面氛围也很好,就是两个人像聊天一样
流程 :
面试官自我介绍
面试者自我介绍
面试官聊天式的问问题
面试者讲一段英文(自己想说什么说什么)
结束
总计 : 半小时左右
面试问题 :
1. 你是怎么了解到thoughtworks公司的。
答 : 先挑了所有的外企,然后thoughtworks的包容,定期分享,公益活动吸引了我。
2. 你说你做公益了,讲一下
答 : 讲了自己的公益精力
3. 如果现在有个需要受助的群体,你要怎么帮他们
答 : 先自己或者号召社会帮他们,再找他们的优点,让他们自助,构建一个良性循环。
4. 你从身边人学到了那些特性。随便说一个
答:具体示例,我说了学到了换位思考能力。
5. 最近周围的人都是怎么评价你的,如果有不好的评价,你能接受吗?
答 : 肯定可以接受
6. 比如说你室友打呼噜,你怎么办?
答 : 会直接说的,我们都是很open的,面试官也想要这个答案
7. 说一段英文吧,30s考虑,说一分钟就行,随便想说什么说什么。
答 :巴拉巴拉巴拉巴拉
大概就是一些hr面的问题,了解你整个人的大概情况,在thoughtworks,我感觉主要是了解你这个人的思想,理念,和公司文化搭不搭。
最有成就感的事,最有挫败感的事。
科技如何促进公平?
怎么看待文化,性别,科技多元?
介不介意做运维开发?(可以的,接触更多技术栈学更多技术吧,不过我理解贵司应该是很多项目的吧)
什么时候可以入职?(等我毕业)
哪些表现可以改进的?(很自信非常好,有不懂的可以直接反问我就行)
后序有哪些流程!!(艹,没有问这个,都第三轮了, 果然还是终面太少没经验 )
怎么知道我们的,有没有其他offer?(感觉没表达好,没有表现出很想去的意愿,寄。。。boc你误我,赶紧出结果啊,,,,不然感觉再拖下去真的就很难找了,说真的TW)
bilibili/read/cv11257797
3、面试八股
1、复习的时候可以念出来,这样背的时候也会熟练一些。
2、末班车找工作压力大还是挺正常的,自己学会调节一下吧
3、松弛感还是挺重要的,这个还是很羡慕有些人
基础1:数据库 & 网络
TCP:
- 1、TCP三次握手,四次挥手,参考
第一次握手
:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力、服务端的接收能力是正常的。第二次握手
:服务端发包,客户端收到了。这样客户端就能得出结论:服务端的接收、发送能力,客户端的接收、发送能力是正常的。 从客户端的视角来看,我接到了服务端发送过来的响应数据包,说明服务端接收到了我在第一次握手时发送的网络包,并且成功发送了响应数据包,这就说明,服务端的接收、发送能力正常。而另一方面,我收到了服务端的响应数据包,说明我第一次发送的网络包成功到达服务端,这样,我自己的发送和接收能力也是正常的。第三次握手
:客户端发包,服务端收到了。这样服务端就能得出结论:客户端的接收、发送能力,服务端的发送、接收能力是正常的。 第一、二次握手后,服务端并不知道客户端的接收能力以及自己的发送能力是否正常。而在第三次握手时,服务端收到了客户端对第二次握手作的回应。从服务端的角度,我在第二次握手时的响应数据发送出去了,客户端接收到了。所以,我的发送能力是正常的。而客户端的接收能力也是正常的。- 传输过程:A和B,路由器隔开,发包,过程是什么样的。直接A发给路由器,路由器发给B。
- 2、TCP和UDP的区别(可靠性,应用场景,2点)
- 1、可靠性:不用建连接,尽最大努力交付,不保证可靠交付数据,只管发。即使网络非常拥堵了,也不会影响 UDP 的发送速率。可能丢包和乱序。 支持一对一、一对多、多对多。UDP有消息保护边界,不会发生粘包拆包问题(TCP需要将每个包封装成固定长度)
- 2、应用场景:TCP用于文件传输FTP,HTTP等。 UDP用于DNS,视频通话,电话会议等。因为实时性要求很高,掉帧也不影响。当然UDP可以保证可靠
- 3、TCP如何保证传输可靠
- 超时重传 具体来说,超时重传主要有两种场景:数据包丢失:在指定时间后,若发送端仍未收到确认应答,就会启动超时重传,向接收端重新发送数据包。确认包丢失:当接收端收到重复数据(通过序列号进行识别)时将其丢弃,并重新回传ACK报文。
- 流量控制 接收端处理数据的速度是有限的,如果发送方发送数据的速度过快,就会导致接收端的缓冲区溢出,进而导致丢包……为了避免上述情况的发生,TCP支持根据接收端的处理能力,来决定发送端的发送速度。这就是流量控制。流量控制是通过在TCP报文段首部维护一个滑动窗口来实现的。
- 拥塞控制 拥塞控制就是当网络拥堵严重时,发送端减少数据发送。拥塞控制是通过发送端维护一个拥塞窗口来实现的。可以得出,发送端的发送速度,受限于滑动窗口和拥塞窗口中的最小值。
- 利用滑动窗口控制提高速度:TCP 以1个段为单位,如果每发送一个段进行一次确认应答,才能进行下一次通信,那这样的传输方式有一个缺点,就是包的往返时间(RTT)越长通信性能就越低。这种方式有点类似于数据库不能并发请求,只能一个挨一个的处理。确认应答不是以每个分段来确认,而是以更大的单位进行确认,转发时间将会被大幅地缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。 参考 服务端会告诉客户端他下一个需要的报文是什么,可能1001不停地发,然后下一个到1007(因为中间的都收到了已经),这就是累计确认。
HTTP
-
1、说一说 HTTP 请求的过程, 参考
- 浏览器地址栏输入 URL,浏览器解析 URL,从而生成发送给 web 服务器的请求信息。
- 浏览器查看浏览器缓存系统缓存路由缓存, 如有存在缓存, 就直接显示。 如果没有, 接着第3步。
- 域名解析(DNS)获取相应的 IP。(先找本地,再根域名,再顶级域名com,再二级microsoft等等)
- 浏览器向服务器发起 tcp 连接, 与浏览器建立 tcp 三次握手。
- 握手成功, 浏览器向服务器发送 http 请求, 请求数据包。
- 服务器请求数据, 将数据返回到浏览器。
- 浏览器接收响应, 读取页面内容, 解析 html 源码, 生成 Dom 树。
- 解析 css 样式、 浏览器渲染, js交互。
-
2、HTTP/HTTPS 什么区别,安全?
-
安全问题:使用明文进行通信,内容可能会被窃听;不验证通信方的身份,通信方的身份有可能遭遇伪装;无法证明报文的完整性,报文有可能遭篡改。
-
客户端向服务器发送 HTTPS 请求。服务器将公钥证书发送给客户端。客户端验证服务器的证书。如果验证通过,客户端生成一个用于会话的对称密钥。
客户端使用服务器的公钥对对称密钥进行加密,并将加密后的密钥发送给服务器。
服务器使用私钥对客户端发送的加密密钥进行解密,得到对称密钥。服务器和客户端使用对称密钥进行加密和解密数据传输。 介绍
-
数字证书认证机构(CA)是客户端与服务器双方都可信赖的第三方机构。
服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。
-
非对称密钥加密
- 公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。
- 非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。
-
和RPC的区别,效率
-
-
3、GET 和 POST 区别
- GET 方法是安全的,而 POST 却不是,因为 POST 的目的是传送实体主体内容,这个内容可能是用户上传的表单数据,上传成功之后,服务器可能把这个数据存储到数据库中,因此状态也就发生了改变。不安全的方法除了 POST 之外还有 PUT、DELETE。但是注意,DELETE是幂等的!
- 幂等的 HTTP 方法,同样的请求被执行一次与连续执行多次的效果是一样的,服务器的状态也是一样的。在正确实现的条件下,GET,HEAD,PUT 和 DELETE 等方法都是幂等的,而 POST 方法不是。
- 请求报文的 HTTP 方法本身是可缓存的,包括 GET 和 HEAD,但是 PUT 和 DELETE 不可缓存,POST 在多数情况下不可缓存的。
- HTTP 状态码分为 5 大类:1XX:表示消息状态码;2XX:表示成功状态码;3XX:表示重定向状态码;4XX:表示客户端错误状态码;5XX:表示服务端错误状态码。
MySQL
-
1、事务的特性,有哪些隔离级别,分别解决什么问题?底层怎么实现的
-
ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
- 持久性是通过 redo log (重做日志)来保证的;
- 原子性是通过 undo log(回滚日志) 来保证的;
- 隔离性最重要,为什么需要呢,因为并发事物会出问题。通过MVCC保证。
-
并发处理多个事务的时候会出现的问题?(脏读、不可重复读、幻读)
- 脏读:读到其他事务未提交的数据;
- 不可重复读:前后读取的数据不一致;
- 幻读:前后读取的记录数量不一致。
- 提出了四种隔离级别来规避这些现象,隔离级别越高,性能效率就越低。
-
**哪些隔离级别? **
读未提交(read uncommitted),指一个事务还没提交时,它做的变更就能被其他事务看到;
读已提交(read committed),指一个事务提交之后,它做的变更才能被其他事务看到;(不会脏读)
可重复读(repeatable read),指一个事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,MySQL InnoDB 引擎的默认隔离级别;(不会不可重复读)
串行化(serializable );会对记录加上读写锁,在多个事务对这条记录进行读写操作时,如果发生了读写冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行;
-
隔离级别的原理, MVCC 的原理:
-
Undo Log 保存了历史快照,ReadView可见性规则帮助判断当前版本的数据是否可见。
-
就比如说遇到A和B两个事务,一个提交了就会导致另一个错误。通过MVCC实现快照读,就不会出现这个问题。
-
针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。
-
针对当前读(select … for update 等语句),是通过 next-key lock(记录锁+间隙锁)方式解决了幻读,因为当执行 select … for update 语句的时候,会加上 next-key lock,如果有其他事务在 next-key lock 锁范围内插入了一条记录,那么这个插入语句就会被阻塞,无法成功插入,所以就很好了避免幻读问题。
-
-
-
2、有哪些索引? 什么时候有效,什么时候无效,底层是什么?
-
聚集索引 (主键索引) 和非聚集索引 (辅助索引/普通索引) 的区别
-
怎么去做索引优化,联合索引的最左匹配原则
-
B/B+ 树原理与区别,什么是红黑树?红黑树与平衡二叉树
因为B+树的内部节点只是作为索引使用,而不像B树那样每个节点都需要存储硬盘指针。
B+树空间利用率更高,可减少I/O次数
增删文件(节点)时,效率更高。
B+树的查询效率更加稳定。
-
-
3、有哪些日志? 在怎么做主备,容灾。
-
在发生回滚时,就读取 undo log 里的数据,然后做原先相反操作。比如当 delete 一条记录时,undo log 中会把记录中的内容都记下来,然后执行回滚操作的时候,就读取 undo log 里的数据,然后进行 insert 操作。
一条记录的每一次更新操作产生的 undo log 格式都有一个 roll_pointer 指针和一个 trx_id 事务id:
- 通过 trx_id 可以知道该记录是被哪个事务修改的;
- 通过 roll_pointer 指针可以将这些 undo log 串成一个链表,这个链表就被称为版本链
-
如果不满足可见行,就会顺着 undo log 版本链里找到满足其可见性的记录,从而控制并发事务访问同一个记录时的行为,这就叫 MVCC(多版本并发控制)。
-
binlog (归档日志):是 Server 层生成的日志**,主要用于数据备份和主从复制**。
binlog 是追加写,写满一个文件,就创建一个新的文件继续写,不会覆盖以前的日志,保存的是全量的日志。
-
redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复;MySQL 的写操作并不是立刻写到磁盘上,而是先写日志,然后在合适的时间再写到磁盘上。redo log 是物理日志,记录了某个数据页做了什么修改,比如对 XXX 表空间中的 YYY 数据页 ZZZ 偏移量的地方做了AAA 更新,每当执行一个事务就会产生这样的一条或者多条物理日志。
因为 redo log 文件是循环写,是会边写边擦除日志的,只记录未被刷入磁盘的数据的物理日志,已经刷入磁盘的数据都会从 redo log 文件里擦除。
-
Redis:
-
1、缓存的设计与使用 ?
- 过期策略:惰性删除+定期删除
- 数据持久化:
AOF 日志:每执行一条写操作命令,就把该命令以追加的方式写入到一个文件里;
RDB 快照:将某一时刻的内存数据,以二进制的方式写入磁盘; - 缓存雪崩:那么,当大量缓存数据在同一时间过期(失效)时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃,这就是缓存雪崩的问题。将缓存失效时间随机打散。设置缓存不过期。
- 如何避免缓存击穿?我们的业务通常会有几个数据会被频繁地访问,比如秒杀活动,这类被频地访问的数据被称为热点数据。如果缓存中的某个热点数据过期了,此时大量的请求访问了该热点数据,就无法从缓存中读取,直接访问数据库,数据库很容易就被高并发的请求冲垮,这就是缓存击穿的问题。互斥锁方案(Redis 中使用 setNX 方法设置一个状态位,表示这是一种锁定状态),保证同一时间只有一个业务线程请求缓存。不给热点数据设置过期时间,由后台异步更新缓存。
- 缓存穿透的发生一般有这两种情况:
业务误操作,缓存中的数据和数据库中的数据都被误删除了,所以导致缓存和数据库中都没有数据;
黑客恶意攻击,故意大量访问某些读取不存在数据的业务。非法请求的限制:设置空值或者默认值:
-
2、有哪些数据结构?ZSet 的原理
-
常见的有五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)、Zset(有序集合)
-
String 类型的应用场景:缓存对象、常规计数、分布式锁、共享 session 信息等。
List 类型的应用场景:**消息队列(但是有两个问题:1. 生产者需要自行实现全局唯一 ID;2. 不能以消费组形式消费数据)**等。
Hash 类型:缓存对象、购物车等。
Set 类型:聚合计算(并集、交集、差集)场景,比如点赞、共同关注、抽奖活动等。
Zset 类型:排序场景,比如排行榜、电话和姓名排序等。
-
Zset 类型的底层数据结构是由压缩列表或跳表实现的:
如果有序集合的元素个数小于 128 个,并且每个元素的值小于 64 字节时,Redis 会使用压缩列表作为 Zset 类型的底层数据结构;如果有序集合的元素不满足上面的条件,Redis 会使用跳表作为 Zset 类型的底层数据结构
-
Set 类型:小于 512整数集合,否则哈希表。
-
Hash表:小于512时压缩列表。
-
-
3、怎么做分布式和容灾?
- redis主从复制:主从复制共有三种模式:全量复制、基于长连接的命令传播、增量复制。
- redis并发竞争与分布式锁:虽然Redis是一个单线程的系统,但是它仍然可以支持分布式锁的实现。这是因为分布式锁的目的不是为了实现并发执行,而是为了在分布式环境下实现资源的互斥访问。
- 高性能的原因
基础2:系统 & 网络编程
进程管理
- 1、线程和进程的区别? 有了进程为什么需要线程。
- 1.进程是对运行时程序的封装,是系统进行资源调度和分配的的基本单位,实现了操作系统的并发;
- 2.线程是进程的子任务,是CPU 调度和分派的基本单位, 用于保证程序的实时性,实现进程内部的并发;
- 3.线程是操作系统可识别的最小执行和调度单位。每个线程都独自占用一个虚拟处理器:独自的寄存器组,指令计数器和处理器状态。 每个线程完成不同的任务,但是共享同一地址空间(也就是同样的动态内存,映射文件,目标代码等等),打开的文件队列和其他内核资源。
- 2、进程,线程间的通信方式? 进程上下文切换? 如何创建线程池?
- 进程间通信的方式:
进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。
- 进程间通信的方式:
- 3、线程冲突怎么办? 什么是死锁,乐观锁,悲观锁?
网络管理
-
1、**什么是IO模型?**IO 模型了解哪些
-
磁盘可以说是计算机系统最慢的硬件之一,读写速度相差内存 10 倍以上,所以针对优化磁盘的技术非常的多,比如零拷贝、直接 I/O、异步 I/O 等等,这些优化的目的就是为了提高系统的吞吐量。
-
阻塞I/O:应用程序发起I/O操作后,被阻塞直到操作完成。
非阻塞I/O:应用程序发起I/O操作后,可以立即返回,但需要通过轮询或其他方式来检查操作是否完成。
I/O复用(select/poll/epoll):应用程序通过将多个文件。
-
-
2、如何实现IO多路复用, select/poll/epoll 分别讲讲
-
I/O 多路复用接口最大的优势在于,用户可以在一个线程内同时处理多个 socket 的 IO 请求。
-
最基础的 TCP 的 Socket 编程,它是阻塞 I/O 模型,基本上只能一对一通信,那为了服务更多的客户端,我们需要改进网络 I/O 模型。比较传统的方式是使用多进程/线程模型,每来一个客户端连接,就分配一个进程/线程,然后后续的读写都在对应的进程/线程,这种方式处理 100 个客户端没问题,但是当客户端增大到 10000 个时,10000 个进程/线程的调度、上下文切换以及它们占用的内存,都会成为瓶颈。 为了解决上面这个问题,就出现了 I/O 的多路复用,可以只在一个进程里处理多个文件的 I/O,Linux 下有三种提供 I/O 多路复用的 API,分别是:select、poll、epoll。
-
select 和 poll 并没有本质区别,它们内部都是**使用「线性结构」**来存储进程关注的 Socket 集合。
在使用的时候,首先需要把关注的 Socket 集合通过 select/poll 系统调用从用户态拷贝到内核态,然后由内核检测事件,当有网络事件产生时,内核需要遍历进程关注 Socket 集合,找到对应的 Socket,并设置其状态为可读/可写,然后把整个 Socket 集合从内核态拷贝到用户态,用户态还要继续遍历整个 Socket 集合找到可读/可写的 Socket,然后对其处理。
很明显发现,select 和 poll 的缺陷在于,当客户端越多,也就是 Socket 集合越大,Socket 集合的遍历和拷贝会带来很大的开销,因此也很难应对 C10K。
-
epoll 是解决 C10K 问题的利器,通过两个方面解决了 select/poll 的问题。
- epoll 在内核里使用「红黑树」来关注进程所有待检测的 Socket,红黑树是个高效的数据结构,增删改一般时间复杂度是 O(logn),通过对这棵黑红树的管理,不需要像 select/poll 在每次操作时都传入整个 Socket 集合,减少了内核和用户空间大量的数据拷贝和内存分配。
- epoll 使用事件驱动的机制,内核里维护了一个「链表」来记录就绪事件,只将有事件发生的 Socket 集合传递给应用程序,不需要像 select/poll 那样轮询扫描整个集合(包含有和无事件的 Socket ),大大提高了检测的效率。
而且,epoll 支持边缘触发和水平触发的方式,而 select/poll 只支持水平触发,一般而言,边缘触发的方式会比水平触发的效率高。
-
-
3、高性能网络 Reactor 和 Proactor 的实现
- 常见的开源软件很多都采用了这个方案,比如 Redis、Nginx、Netty 等等。
- Reactor 可以理解为「来了事件操作系统通知应用进程,让应用进程来处理」,而 Proactor 可以理解为「来了事件操作系统来处理,处理完再通知应用进程」。
- 不过,无论是 Reactor,还是 Proactor,都是一种基于「事件分发」的网络编程模式,区别在于 Reactor 模式是基于「待完成」的 I/O 事件,而 Proactor 模式则是基于「已完成」的 I/O 事件。
网络编程
-
学习资料:1, 2,3,4,5
-
C++ 后台开发基本是离不开网络编程的,其实甚至整个后台开发也可以看做是在做网络编程。
只不过别人的框架帮我们做了协议解析、网络数据传输、解封包这些底层操作。
比如 SpringBoot 这种保姆级框架,基本上属于将一个框架能干的事都干完了,以至于我们开发业务只需要定义接收和返回包的数据格式,然后做逻辑处理就完了。
像序列化、解封包、IO 处理这种网络编程必备的脏活业务开发根本不会接触到。 -
Linux 下网络编程核心的包括系统编程和网络 IO 两个部分:
进程间通信方式: 信号量、管道、共享内存、socket 等
多线程编程:互斥锁、条件变量、读写锁、线程池等
五大 IO 模型:同步、异步、阻塞、非阻塞、信号驱动
高性能 IO 两种模式:Reactor 和 Proactor( 但是 Linux 下由于缺少异步 IO 支持,基本没有 Proactor
IO 复用机制:epoll、select、poll(破解 C10K 问题的利器) -
线程池是什么样的,项目里有没有考虑多线程,高并发?
线程池是一种线程管理机制,用于管理和复用线程,以提高多线程应用程序的性能和资源利用率。线程池包含了一组预先创建的线程,这些线程在需要时可以被重复利用来执行任务。线程池的基本结构通常包括以下组件:
1、线程池管理器(ThreadPool Manager):负责线程的创建、销毁和管理,包括线程的数量控制、任务分配等。
2、工作队列(Work Queue):用于存放待执行的任务。当有任务需要执行时,线程池会从工作队列中获取任务并分配给空闲线程执行。
3、线程池(Thread Pool):由一组预先创建的线程组成,这些线程可以被重复利用来执行多个任务。 -
阻塞,非阻塞,同步,异步?
阻塞(Blocking):当一个线程在执行一个操作时,如果该操作不能完成,线程就会被挂起,等待操作完成后再继续执行,期间线程处于阻塞状态。在网络编程中,如果一个套接字(socket)执行了阻塞式的I/O操作,那么当没有数据可读或者无法立即发送数据时,套接字就会被阻塞。
非阻塞(Non-blocking):与阻塞相反,当一个线程执行一个非阻塞操作时,如果操作不能立即完成,线程会立即返回而不会被挂起,继续执行其他任务。在网络编程中,如果一个套接字设置为非阻塞模式,那么当没有数据可读或者无法立即发送数据时,套接字的I/O操作会立即返回,不会阻塞线程。
同步(Synchronous):指的是程序的执行顺序依赖于外部事件的发生,一个操作完成后再执行下一个操作。在网络编程中,同步I/O操作会导致调用线程阻塞,直到操作完成。
异步(Asynchronous):指的是程序的执行不依赖于外部事件的发生,一个操作的完成不需要等待,可以同时进行其他操作。在网络编程中,异步I/O操作不会阻塞调用线程,当操作完成后会通过回调或者轮询等方式通知应用程序。 -
IO,线程,操作系统?
在网络编程中,I/O指的是数据在计算机系统中的输入和输出操作,通常涉及到网络套接字(socket)和文件操作等。
网络编程中的I/O操作可以分为阻塞式和非阻塞式。阻塞式I/O会导致调用线程被挂起,直到操作完成;而非阻塞式I/O则允许线程在等待操作完成时继续执行其他任务。
异步I/O允许程序在等待I/O操作完成时执行其他任务,并在操作完成后得到通知。这种方式通常需要操作系统或者编程框架提供支持。
————————
在网络编程中,线程用于实现并发处理,允许程序同时执行多个任务,提高系统的响应速度和资源利用率。
多线程编程能够更有效地处理并发连接请求,同时处理多个客户端的数据传输。
在使用多线程时需要注意线程安全性,避免多个线程同时访问共享资源导致数据不一致或者竞争条件等问题。
————————
操作系统在网络编程中扮演着重要的角色,负责管理计算机的硬件资源和提供必要的系统调用接口。
操作系统提供了网络套接字接口(如BSD Socket接口),使程序能够通过网络进行数据传输和通信。
操作系统提供了进程管理、线程调度、I/O调度等功能,为网络编程提供了基础设施和支持。
网络编程是指利用计算机网络进行数据传输和通信的编程技术。它使得不同计算机之间可以相互通信、交换数据,并共享资源。网络编程涉及到多种协议、技术和编程模型,其中最常见的是使用TCP/IP协议栈进行网络通信。
网络编程的主要内容包括以下几个方面:
-
套接字(Socket)编程:
- 套接字是实现网络通信的基础,它提供了一种通用的接口,使得应用程序可以通过网络进行数据传输和通信。
- 在套接字编程中,应用程序可以创建套接字并指定通信协议(如TCP或UDP),然后通过套接字进行数据的发送和接收。
-
TCP/IP协议栈:
- TCP/IP协议栈是互联网通信的基础,它包括了TCP(传输控制协议)和IP(Internet协议)等多个协议。
- TCP协议提供了可靠的、面向连接的数据传输服务,适用于需要数据完整性和顺序性的应用场景;而UDP协议则提供了无连接的数据传输服务,适用于实时性要求较高的应用场景。
-
客户端-服务器模型:
- 客户端-服务器模型是网络编程中常见的一种架构,它将应用程序分为客户端和服务器两个角色,客户端发送请求,服务器响应并处理请求。
- 在客户端-服务器模型中,服务器通常在固定的IP地址和端口上监听客户端的连接请求,一旦收到请求就会建立连接并处理客户端的请求。
-
并发和多线程编程:
- 在网络编程中,往往需要处理多个客户端的连接请求和数据传输,这就需要采用并发和多线程编程技术来实现。
- 多线程编程可以使得服务器能够同时处理多个客户端的请求,提高系统的并发处理能力和性能。
-
网络协议和数据格式:
- 网络编程涉及到多种网络协议和数据格式,如HTTP、FTP、SMTP等协议,以及JSON、XML、Protocol Buffers等数据格式。
- 理解并熟悉不同协议和数据格式对于实现特定的网络应用程序至关重要。
网络编程是计算机科学领域中的重要技术之一,它被广泛应用于互联网、分布式系统、网络通信等领域,为人们的日常生活和工作提供了便利和支持。
模板3:算法 & 行测
银行笔试记录
招行
英语,行测,认知,还有两个性格问卷
认知部分有点过于抽象了,尤其是第一部分那个找相同图片的,我看着倒计时快结束了,我才做了几张,后面还有几十张。。。
他那个题量,感觉本来就是做不完的。反正我每个环节都来不及。然后基本做到后面就开始ccc了。。。。
统计 32 位有符号整型二进制表示中 1 的数目,2
行测:
-
行测满分100分。从2015年开始,国考省级和地市级行测试卷分开命题。省级为135道题,地市级为130道题。
-
行测题型分为常识判断、言语理解与表达、数量关系、判断推理、资料分析五大专项。
1、常识判断分值分布:考查政治、经济、法律、历史、地理、自然、科技等常识,总共20道题,每题分值在0.5至0.7分左右。
2、言语理解分值分布:选词填空20道题,片段阅读20道题,总共40道题。每题分数在0.6至0.8分左右。
3、判断推理分值分布:定义判断10道题,图形推理10道题,类比推理10道题,逻辑判断10道题,总共40道题。每题分数在0.6至0.8分左右。
4、数学运算分值分布:总共15道题【副省级15题,地市级10题】。每题分值在1分左右。
5、资料分析分值分布:资料分析20题,每题分值在1分左右。
-
言语理解小技巧
-
行测复习与题型!!!
刷题可以刷一刷粉笔
-
重点关注