CAP理论
搜索文档
被金山的薪资打动了
猿大侠· 2025-09-30 12:15
好的,我将按照您的要求,以资深研究分析师的身份对提供的公众号文章进行总结。文章内容主要涉及金山办公的校招信息和相关的技术面试题,以下是我的总结: 金山办公校招信息 - 金山办公的校招流程通常在国庆节后启动,约面到发放录用offer的周期约为2-3周,谈薪环节在10月底进行[3] - 公司为开发岗位提供的薪资范围大致在18k-22k之间,例如有案例显示武汉地区的offer为18k[5] - 公司在北京、珠海、武汉设有研发中心,为二线城市求职者提供了获得较高薪资的机会,工作制度为965,工作节奏相对舒适[5] - 主要的招聘开发岗位包括C++开发、服务端开发和前端开发,其中C++和服务端开发岗位较为注重计算机基础的考察[6] - 具体的在招职位显示,服务端开发、C++开发及前端开发工程师岗位在北京、广州、武汉、珠海等地均有全职职位开放[7] 服务端开发面试技术要点 - 面试重点考察计算机网络和操作系统知识,其次是Redis和MySQL原理,最后包含算法题[7] 网络模型 - OSI七层模型包含应用层、表示层、会话层、传输层、网络层、数据链路层和物理层,每一层承担不同的职能[11][13] - TCP/IP四层模型是更实用的实现方案,分为应用层、传输层、网络层和网络接口层,Linux系统按此模型实现网络协议栈[14][15] 网站访问过程 - 访问网站的过程包括解析URL、判断各级缓存、进行DNS解析以获取IP地址、以及通过ARP协议获取MAC地址[20][21] TCP连接管理 - TCP通过三次握手建立连接,第三次握手可以携带数据,而前两次不行[22][26][27][28][30] - 断开连接需要通过四次挥手,这是因为被动关闭方在收到FIN报文后,可能需要等待应用程序处理完剩余数据才能发送自己的FIN报文[33][34] 网络问题处理 - 系统中出现大量TIME_WAIT连接的可能场景包括HTTP未使用长连接、HTTP长连接超时、以及HTTP长连接的请求数量达到上限(例如nginx的keepalive_requests参数默认值为100)[36][38][45][49][50] - 应对SYN泛洪攻击的方法包括调大netdev_max_backlog参数、增大TCP半连接队列、开启tcp_syncookies功能,以及减少SYN+ACK重传次数(默认5次)[54][55][56][60][61] 数据库与缓存 - Redis布隆过滤器使用位图数组和多个哈希函数来标记数据是否存在,具有高效查找的特点但可能存在误判[61][63][64][67] - 保证Redis与数据库数据最终一致性的策略包括旁路缓存读取、更新数据库后删除缓存,以及通过消息队列重试机制或订阅MySQL binlog(例如使用Canal中间件)来处理删除缓存失败的情况[68][71][77][79] - MySQL InnoDB选择B+树而非B树作为索引结构,原因在于B+树非叶子节点仅存储索引能容纳更多键值、存在冗余节点使得增删效率更高,且叶子节点通过链表连接有利于范围查询[93][96] 系统I/O与分布式理论 - 网络I/O模型包括阻塞I/O、非阻塞I/O、I/O复用(如select、poll、epoll)、信号驱动I/O和异步I/O,其中epoll通过红黑树和事件驱动机制高效处理大量连接,适用于C10K问题[82][85][89][90][92] - CAP定理指出分布式系统中一致性、可用性和分区容错性不可兼得[96][98]
字节跳动偏爱高校 TOP 榜
猿大侠· 2025-09-18 12:15
字节跳动招聘偏好分析 - 字节跳动对学历要求相对灵活,存在双非一本甚至二本背景毕业生成功入职的案例 [2] - 公司对高校毕业生有偏好名单,分为四档,第一档以985高校为主,但西电和北邮两所211高校也因行业高认可度位列其中 [4] - 名单中包含多所双非院校,如广东工业大学、杭州电子科技大学等,这些学校在计算机、电子领域实力强劲,属于行业内认可度高的强一本 [4] - 硕士院校为211及以上学历的候选人,即使本科背景普通,字节跳动大多愿意给面试机会,不会单纯因本科学历卡简历 [5] - 2024年秋招流程效率极高,从笔试到3轮技术面再到HR面,部分候选人不到3周即可完成并收到offer [6] 秋招技术面试趋势 - 当前秋招高峰期,考生普遍使用AI面试工具进行高强度模拟练习,单次练习时长在30分钟至80分钟不等 [8] - AI面试工具因考察方向完全对标大厂难度,能帮助考生查漏补缺并消除紧张感,受到广泛使用 [10][11] - 字节跳动秋招Java一面典型考察范围包括Java并发、Redis、MySQL事务三大模块,风格为重基础、挖原理 [11] Java并发编程核心技术 - 线程安全指多线程并发访问下程序仍能正确运行,主要通过加锁、原子类或并发安全数据结构来保证原子性、可见性和有序性 [12][16] - 保证线程安全的具体手段包括synchronized关键字、ReentrantLock显式锁、AtomicInteger等原子类以及ConcurrentHashMap等并发集合 [16][18][19][23] - 线程池核心目的是复用线程、降低开销、控制并发数,通过ThreadPoolExecutor的七大参数进行配置 [21][26][27] - 线程池拒绝策略包括CallerRunsPolicy、AbortPolicy、DiscardPolicy、DiscardOldestPolicy四种预置策略 [28][31] Redis高性能与数据结构 - Redis采用单线程模型,官方基准测试显示其吞吐量可达10万次/秒,高性能源于内存操作、高效数据结构、避免线程竞争及I/O多路复用机制 [29][36] - Zset类型底层由压缩列表或跳表实现,当元素个数小于128个且每个元素值小于64字节时使用压缩列表,否则使用跳表 [32][36] - 跳表通过构建多层有序链表实现快速定位,查找复杂度为O(logN),节点层数由随机数决定,每增加一层概率不超过25%,层高最大限制为64 [33][37][44][45] - 内存达到maxmemory上限后,Redis根据淘汰策略处理写请求,提供包括noeviction、allkeys-lru、volatile-ttl等8种策略 [46][48] 数据库与缓存一致性解决方案 - 保证Redis与MySQL数据一致性的常见策略是更新数据库后删除缓存,属于最终一致性方案 [52][54] - 针对删除缓存异常的情况,可通过消息队列重试机制或订阅MySQL binlog(如使用Canal中间件)两种方案来保证操作执行 [56][60][61][63] - 先写数据库再删缓存期间出现缓存击穿时,可采用分布式单飞方案确保同一key只有一个请求回源重建,或使用逻辑过期+后台刷新方案让并发请求短窗内返回旧值 [67][68][70][72] - 缓存需设置合理的过期时间,太短会使请求过多落库,太长则会导致脏数据长时间存在浪费内存 [54][55] MySQL事务特性与实现机制 - 事务ACID特性通过不同技术保证:原子性由undo log实现,隔离性由MVCC或锁机制实现,持久性由redo log实现,一致性则由前三者共同保证 [74] - MVCC在读提交和可重复读隔离级别下的区别在于Read View创建时机不同,读提交级别每次语句执行前重新生成,可重复读级别在事务启动时生成 [75]
手握华为 25 万股票,想躺平了。。
猿大侠· 2025-05-28 11:35
华为员工持股与分红 - 根据2024年华为员工持股计划分红方案,每股价格为7.85元,每股分红1.41元,税前收益率为18% [2] - 一名员工持有25万股华为股票,每年可获得约35.25万元(25万 x 1.41元)的税前分红收入 [2] - 历史数据显示,华为每股分红从2020年的1.86元(收益率23.70%)逐步降至2024年的1.41元,但收益率始终保持在18%以上 [2] 华为OD技术面试内容 - 技术一面主要考察设计模式、JavaSE、Java并发、Redis和算法知识 [4] - 面试问题难度被评价为适中 [5] 设计模式考察要点 - 单例模式的核心是确保一个类全局只有一个实例,并提供统一的访问点,适用于数据库连接池、线程池、日志管理器等场景 [7][8] - 线程安全的单例模式实现包括双重检查锁定和枚举实现,其中双重检查锁定使用`volatile`关键字防止指令重排 [9][10][13] - 工厂模式用于根据不同条件创建对象,代理模式用于控制对象访问,装饰器模式用于动态添加职责,策略模式用于封装可替换的算法 [8] Java核心技术考察要点 - Java面向对象的三大特性是封装、继承和多态 [15][16] - HashMap在元素数量超过总容量75%(负载因子0.75)时触发扩容,扩容时容量变为原来的2倍 [15][17] - 扩容时元素的新位置要么在原位,要么在原位置移动2次幂的距离,此设计避免了重新计算哈希值,并能均匀分散冲突节点 [15][18][20] Java并发与锁机制 - Java锁机制主要包括内置锁(synchronized)、ReentrantLock、读写锁(ReadWriteLock)、乐观/悲观锁、自旋锁等 [19][21][22][25] - synchronized锁的升级过程为:无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁 [23][24][27] - 偏向锁在无竞争时通过比较线程ID获取锁,轻量级锁通过CAS操作实现,重量级锁在线程竞争激烈时使用操作系统调度 [25][27] Redis缓存策略 - 读数据采用旁路缓存策略,若缓存未命中则从数据库加载数据到缓存 [28] - 写数据采用先更新数据库,再删除缓存的策略 [29] - 为保证最终一致性,可引入消息队列进行删除缓存的重试,或通过订阅MySQL binlog(如使用Canal)来删除缓存 [32][33][36][37]