- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
IT面试核心题库及实战答案
一、基础技术类(适用于初级开发/运维)
1.问题:HTTP1.1和HTTP2.0的核心区别是什么?实际项目中怎么选择?
答案:核心区别有三点:一是传输方式,1.1是串行明文传输,同一域名下默认6个并发连接;2.0用二进制帧多路复用,一个连接能并发传输多个请求,不用排队。二是头部压缩,2.0对HTTP头做了HPACK压缩,减少重复头部的带宽浪费,比如接口频繁传相同的Cookie、User-Agent时,2.0能省不少流量。三是服务端推送,2.0支持服务端主动推送静态资源,比如请求HTML时,提前把CSS、JS推给客户端,减少请求次数。
实际选择看场景:如果是老系统改造,依赖大量第三方插件且预算有限,1.1足够;如果是高并发接口(比如电商列表页、APP首页),用户量大、静态资源多,选2.0能明显提升加载速度;但要注意,2.0需要HTTPS支持,还要服务器(Nginx/Apache)和客户端都兼容,不然没法生效。
2.问题:MySQL中InnoDB和MyISAM存储引擎的区别?什么时候用InnoDB?
答案:最核心的区别是事务和锁机制。InnoDB支持ACID事务、行级锁,还有外键约束,崩溃后能恢复;MyISAM不支持事务,是表级锁,崩溃后可能丢数据,但查询速度在小数据量下略快,还支持全文索引。
实际用InnoDB的场景:几乎所有业务系统的核心表都该用,比如用户表、订单表、支付表——这些表需要保证数据一致性(比如下单扣库存不能出错),还要支持高并发读写(行级锁不会因为一个更新锁住整张表)。只有那种纯查询的静态表(比如地区字典表、配置表),数据很少修改,才考虑MyISAM,不过现在MySQL8.0已经默认弃用MyISAM了,一般优先选InnoDB。
3.问题:什么是跨域?怎么解决实际开发中的跨域问题?
答案:跨域就是浏览器的同源策略限制——协议、域名、端口有一个不一样,就属于跨域,比如前端localhost:8080请求后端:8081的接口,浏览器会拦截响应。
实际开发中常用3种解决方式:
后端CORS配置:最常用,在服务器端设置响应头Access-Control-Allow-Origin,指定允许的前端域名(比如*允许所有,生产环境要写具体域名),再加上Access-Control-Allow-Methods(GET/POST等)、Access-Control-Allow-Credentials(是否允许带Cookie),后端用SpringBoot的话,写个配置类或者加@CrossOrigin注解就行。
前端代理:开发环境用,比如Vue的vue.config.js里配置devSxy,把/api开头的请求代理到后端地址,这样浏览器认为是同源请求,不会拦截,生产环境要靠Nginx反向代理。
Nginx反向代理:生产环境用,把前端和后端接口配置在同一个域名下,比如前端,后端接口/api,Nginx收到/api的请求就转发到真实后端地址,相当于绕过了跨域限制。
二、进阶技术类(适用于中级开发/架构师助理)
1.问题:Redis有哪些数据结构?实际项目中用Redis做过什么?怎么解决缓存穿透、缓存击穿、缓存雪崩?
答案:Redis核心数据结构有5种:String(字符串,存用户Token、计数器)、Hash(哈希,存用户信息、商品详情)、List(列表,存消息队列、最新评论)、Set(集合,存好友关系、去重)、SortedSet(有序集合,存排行榜、延时任务)。
实际项目中用Redis的场景:比如电商项目里,商品详情页缓存(Hash存商品信息,过期时间1小时)、用户登录Token缓存(String,过期时间7天)、秒杀活动的库存计数器(incr/decr原子操作)、首页热门商品排行榜(SortedSet按点击量排序)。
三个缓存问题的解决:
缓存穿透:查询不存在的数据(比如查id=-1的商品),缓存和数据库都查不到,导致请求全打数据库。解决:①缓存空值,比如查不到就缓存一个空字符串,过期时间设5分钟;②布隆过滤器,提前把所有存在的商品id存到布隆过滤器,不存在的id直接拦截。
缓存击穿:热点key突然过期(比如秒杀商品的缓存过期),大量请求打数据库。解决:①热点key永不过期,或者定时后台更新缓存;②互斥锁,比如用Redis的setnx,第一个请求获取锁去查数据库,其他请求等待重试。
缓存雪崩:大量key同时过期(比如凌晨3点批量更新缓存),
原创力文档


文档评论(0)