最后
面试一面会问很多基础问题,而这些基础问题基本上在网上搜索,面试题都会很多很多。最好把准备一下常见的面试问题,毕竟面试也相当与一次考试,所以找工作面试的准备千万别偷懒。面试就跟考试一样的,时间长了不复习,现场表现肯定不会太好。表现的不好面试官不可能说,我猜他没发挥好,我录用他吧。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
96道前端面试题:
常用算法面试题:
前端基础面试题:
内容主要包括HTML,CSS,JavaScript,浏览器,性能优化
一、问题背景
业务场景是主要是查询或者导出某家分销商一个月内产生的退票退款订单数据。由于涉及到机密数据,因此不便展示效果图。只记录一下遇到的两个经典的问题以及解决思路以供参考。
1.出现的问题:
因为测试环境测试不出生产环境的问题,生产环境订单量较大,我看了一下订单加在一起有三千多万条,因此部署到生产环境之后导出功能出现了两个问题,一个是内存溢出,另一个是导出超时。
二、解决步骤
1.思路:
因为导出的数据格式和查询的数据格式相同,因此开发时,导出的逻辑是在线程池中分页查询每一页数据然后组装完成Excel,因此我优化导出功能时其实是包含着优化查询功能,查询的逻辑是线程池按时间分段查询数据。
2.解决步骤:
(1)第一阶段
上生产之后报内存溢出(OutOfMemory:Heap Space)我首先检查了一下代码,主要考虑堆溢出的原因,发现了一些没有必要的或者肉眼可见的问题进行了第一次优化,具体内容如下:
- 数据库方面:从查询sql字段由“*”减少到只查询需要展示的几个字段,提高查询速度,降低内存容量。
- Excel生成工具:因为Excel生成工具我用的是HSSFWorkbook,这个生成的数据流是往内存中写的,当数据量过大时,肯定会超出内存承受能力。从HSSFWorkbook改成SXSSFWorkbook,SXSSFWorkbook是专门用于大数据量时使用,SXSSFWorkbook是streaming版本的XSSFWorkbook,它只会保存最新的rows在内存里供查看,在此之前的rows都会被写入到硬盘里,因此可以降低内存的消耗(解决堆溢出问题)。
- 减少创建对象的数量:在每页生成Excel行数时,每个SXSSFCell我都创建了一个cell对象来设置换行样式和数据信息,因为是堆溢出,说明对象创建的太多了。而且我生成Excel数据流时使用的是线程池,需要内存同时存放多个线程的cell对象,这样太费内存了,因此我去掉了用对象接收cell,而是直接createCell,然后设置有样式使用getCell。降低了内存的压力。
- 使用Redis缓存:针对用户相同的查询条件,将查询条件和查询结果缓存到Redis中,这样,下次用户进行分页查询时就不需要再去访问数据库重新组装数据了,降低数据库访问压力。
最后
四轮技术面+一轮hr面结束,学习到了不少,面试也是一个学习检测自己的过程,面试前大概复习了 一周的时间,把以前的代码看了一下,字节跳动比较注重算法,面试前刷了下leetcode和剑指offer, 也刷了些在牛客网上的面经。大概就说这些了,写代码去了~
祝大家都能收获大厂offer~
篇幅有限,仅展示部分内容
tps://img-blog.csdnimg.cn/img_convert/f5c18f4b2878302f1f53a8c393e7eb0d.png)