七天速刷面试-day01

发布时间:2026/7/4 19:24:38

七天速刷面试-day01 目录1场景篇开篇2海量QQ号去重问题:40亿个QQ号如何去重?(仅1GB内存)总结:3百万级别数据的 Excel 如何快速导入到数据库中4从mysql千万条数据中搜索到指定数据总结:5为什么复杂的架构一定需要做分层设计6:什么是网络四元组7SpringBoot自动装配原理8如何在2G大小的文件中,找出高频top100的单词问题:具体代码9Redis缓存击穿问题及解决方案10a.解释算法的空间复杂度和时间复杂度分别是什么。并举例如何计算。b. 线程和进程的关系哪个是资源分配的基本单位哪个是cpu调度的基本单位c. 说10个常用的sql关键字11总结:1场景篇开篇2海量QQ号去重问题:40亿个QQ号如何去重?(仅1GB内存)正常存储的话,一个整形是4个字节大小,那么40亿个qq号就是160亿字节,也就是15GB左右的大小,这时我们可以用位图去解决,就是每一位代表一个数字,那一个字节8位,一个整形就是32位,那么这时候只需要内存15/32差不多0.5GB左右内存即可总结:一个亿就是 1×10的8次方, 另外单位换算 GB MB KB B一个整数占据4个字节40亿个整数占用 40×4×10的8次方字节1.6×10的10、次方≈16GB(1024当成1000来算)使用位图的话 一个字节有8位可以表示8个(位图就是表示当前位有没有数)所以就是16/32 0.5GB内存就可3百万级别数据的 Excel 如何快速导入到数据库中首先,我们应该考虑到从excel中读取数据并插入到数据库中可能遇到的问题1数据正确性问题读取和插入的过程有各种潜在的问题,我们在插入数据前应进行格式检查,当第一次插入失败时,我们可以进行二次插入,当二次插入也失败时,我们可以进行日志记录,方便后续修补,其次还需要注意数据重复性问题,我们可以使用唯一性约束的方式来解决2内存溢出问题然后我们应该考虑到当百万级别数据一次性加载到内存中可能导致内存溢出问题,我们可以使用Apache 中时间模型来处理excel,这个模型适合处理大文件因为它不会将整个文件加载到内存中,而是按行进行读取和解析3还有就是性能瓶颈问题这么大的数据单线程肯定不行,所以需要使用多线程,其次在读取和插入数据的过程中都使用多线程,在数据路中我们也可以使用批量插入数据的功能,insert values (),(),()4从mysql千万条数据中搜索到指定数据1使用列名代替*号,这样让数据库引擎省去列名转换这一步骤,提高查询效率2使用限定id的方式,使用索引进行范围查询3只查询业务需求列,减少数据传输量4注意索引的有效性,尽量避免在where后使用函数操作,这样会导致索引失效,而让数据库引擎进行全表扫描总结:因为*号会引起全表扫描5为什么复杂的架构一定需要做分层设计分层思想在软件工程中是一种常见的设计方式,它将一个整体系统拆分为N个层次,每个层次既独立又相互协同实现整体的功能,软件架构整体上被分为3层:UI层,业务逻辑层,数据访问层UI层进行数据的展示以及用户的交互业务逻辑层就是实现业务的具体逻辑实现功能,在业务逻辑层,可能调用多个数据访问层,做综合数据处理数据访问层:主要是和数据库进行通信分层设计的好处是:1职能分离,隔离关注点:每人人只需要关注自己所在的业务层即可2解耦合,方便系统功能拓展:每层只会与自己相邻的层进行数据交互,不会进行跨层通信,这样就解耦了同时也方便业务的拓展6:什么是网络四元组网络四元组是TCP协议中用于唯一标识一个连接的核心概念.有源IP目的IP源端口目的端口组成源IP发起连接的客户端的IP地址源端口客户端随机分配的端口号目的ip服务端的ip地址目的端口服务端固定的端口号核心作用:就是用于唯一标识一个连接和进行全双工通信通过四元组区分同一服务端上不同客户端连接工作原理:就是三次握手客户端要先确定自己的源IP和源端口,也要确定目标服务器的目的IP和目的端口,然后进行三次握手建立连接首先客户端向服务端发送syn,通过四元组进行简历连接然后服务端向客户端发送syn和ack确认连接,这时候的源和目的要反过来最后客户端发送ack建立连接7SpringBoot自动装配原理自动装配是SpringBoot的核心特征,其核心目标是约定大于配置,自动将组建注册到IOC容器中,开发者无需手动编写xml文件和配置类传统开发开发人员-手动编写bean定义-注册到IOC容器中自动装配流程引入starter-SpringBoot-EnabeAuotConfiguration-加载spring.Factories-条件筛选-动态注册到IOC容器自动装配的核心机制是三大组件EnableAutoConfiguration,Spring.Factories文件,条件注解(Conditional);EnableAutoConfiguration包含在SpringBootApplication中,触发自动装配流程Spring.factoris经过Spring.FactoriesLoders加载其中所有的配置类在META-INF目录下定义自动配置类的全限定名称条件注解根据当前环境(类路径,已有Bean配置属性)筛选有效配置类8如何在2G大小的文件中,找出高频top100的单词1分块读取-2局部统计-3全局合并-4堆排序筛选1分块读取可以采用4MB大小的单位进行文件读取,使用BufferedReader逐行读取数据,避免内存溢出,也可以采用动态调整分块大小2局部统计使用线程池处理每个分块,每个线程独立统计局部词频合并结果使用ConCurrentHashMap保证线程安全3全局合并使用Map.Merge进行原子累加操作,同步代码块保证并发安全4Top k筛选(小根堆优化)维护大小为100的最小堆,最终排序输出结果具体操作就是当遍历到的词出现的次数大于堆顶上次出现的次数,那么可以用新出现的词替代堆顶的词,并重新调整这个堆为小根堆问题:具体代码微信上缪斯有9Redis缓存击穿问题及解决方案Redis缓存击穿是分布式系统中常见的高并发问题,其核心特点是某个热点key在缓存失效的瞬间,大量并发请求直接击穿缓存层冲击数据库缓存击穿有以下几个原因:1热点key特性:例如明星绯闻,秒杀商品等高频访问数据2缓存过期机制:key设置了固定过期时间,到期后缓存失效3高并发请求:缓存失效瞬间,大量请求同时到达数据库解决方法有1互斥锁:通过分布式锁,让第一个请求访问数据库重建缓存,其他请求等待public static String getData(String key){ String valueredis.get(key); if(valuenull){ if(redis.setnx(key:mutex,1,60)){ valuedb.query(key); redis.set(key,value,3600); redis.del(key:mutex); }else{ Thread.sleep(1000); } } }2逻辑永不过期:value中存储逻辑过期时间,异步更新,其余先返回旧数据public static String getDta(String key){ Data value redis.get(key); if(value null){ return db.query(key); } if(System.currentTimeMillis()value.time){ String valdb.query(key); executor.submit(()-{ redis.set(key, new Data(val,System.currentTimeMillis()36000)) }); } return value.data; }3缓存预热:在项目刚启动或低谷期提前加载热点数据到缓存,监控历史访问数据,预测热点key并缓存10a.解释算法的空间复杂度和时间复杂度分别是什么。并举例如何计算。时间复杂度是指执行这个算法所需要的计算工作量而空间复杂度是指执行这个算法所需要的内存空间。时间复杂度的计算:⑴ 找出算法中的基本语句算法中执行次数最多的那条语句就是基本语句通常是最内层循环的循环体。⑵ 计算基本语句的执行次数的数量级只需计算基本语句执行次数的数量级这就意味着只要保证基本语句执行次数的函数中的最高次幂正确即可可以忽略所有低次幂和最高次幂的系数。这样能够简化算法分析并且使注意力 集中在最重要的一点上增长率。⑶ 用大Ο记号表示算法的时间性能。空间复杂度的计算:通常来说只要算法不涉及到动态分配的空间以及递归、栈所需的空间空间复杂度通常为0(1)只需要辅助变量所占的空间就可以计算空间复杂度b. 线程和进程的关系哪个是资源分配的基本单位哪个是cpu调度的基本单位一个进程 可能包含多个线程,线程不能脱离进程独立存在;进程是资源分配的基本单位线程是CPU 调度的基本单位。c. 说10个常用的sql关键字SELECT查询数据FROM指定查询的表WHERE筛选行数据的条件INSERT插入数据UPDATE更新数据DELETE删除数据GROUP BY按字段分组统计ORDER BY按字段排序ASC/DESCJOIN多表关联INNER JOIN/LEFT JOIN 等LIMIT限制查询结果行数分页常用。11总结:本文摘要 本文涵盖多个计算机领域的技术问题及解决方案1)使用位图法在1GB内存下去重40亿QQ号2)百万级Excel数据导入数据库的优化方法3)MySQL千万数据查询优化策略4)分层架构设计的优势5)网络四元组概念及TCP连接原理6)SpringBoot自动装配机制7)2G文件中查找Top100高频词的分治算法8)Redis缓存击穿解决方案9)算法复杂度分析10)进程与线程的区别及常用SQL关键字。文章以实际工程问题为导向提供了内存优化、性能提升、架构设计等实用技术方案。

相关新闻