项目Redis缓存优化知识点拷打
技术点拆解:Redis缓存优化(菜品缓存 + 内存优化)以下是对该技术点的详细拆解,帮助你应对面试中的深度追问:
1. 核心实现原理技术要点:• 缓存目的:减少高并发下对数据库的频繁查询(如菜品信息读多写少)。• 缓存策略: • 缓存穿透:查询不存在的数据 → 缓存空值(NULL)+ 短过期时间。 • 缓存雪崩:大量缓存同时过期 → 随机过期时间(基础时间 + 随机偏移)。 • 缓存击穿:热点Key过期后突发请求 → 互斥锁(Redis分布式锁)重建缓存。• 数据结构优化: • Hash vs String: ◦ String存储:SET user:1 '{"name":"Alice","age":25}' → 内存占用高,修改需反序列化整个对象。 ◦ Hash存储:HSET user:1 name Alice age 25 → 支持单字段读写,内存更省(ziplist编码优化)。
2. 高频面试问题与回答示例Q1:如何保证缓存与数据库的一致性?回答示例:
...
项目Redis+Lua知识点拷打
技术点拆解:分布式锁(Redis + Lua)以下是对该技术点的详细拆解,帮助你应对面试中的深度追问:
1. 核心实现原理技术要点:• 分布式锁目的:在分布式系统中保证同一时刻只有一个客户端能执行关键操作(如扣减库存)。• Redis实现方案: • Lua脚本保证原子性:将SETNX(设置锁)、EXPIRE(设置过期时间)合并为一个原子操作。 • 锁标识唯一性:使用UUID作为锁的Value,防止误删其他客户端的锁。 • 过期时间:根据业务预估最大执行时间设置(如10秒),避免死锁。
代码示例:
-- Lua脚本:获取锁(原子操作)local key = KEYS[1]local value = ARGV[1]local expire = ARGV[2]local result = redis.call('SET', key, value, 'NX', 'PX', expire)return result
2. 高频面试问题与回答示例Q1:为什么用Lua脚本?直接用SETNX+EXPIRE不行吗?回答示例: ...
项目JWT知识点拷打
技术点拆解:登录与身份验证(JWT + ThreadLocal)
1. 核心实现原理技术要点:• JWT结构: • Header(算法类型,如HS256)、Payload(用户信息+过期时间)、Signature(签名=HMACSHA256(base64UrlEncode(header) + “.” + base64UrlEncode(payload), secret))。 • 示例:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c• ThreadLocal作用: • 在拦截器中解析Token,将用户信息存入ThreadLocal,后续业务层直接通过ThreadLocal.get()获取用户上下文,避免频繁传参。
2. 高频面试问题与回答示例Q1:为什么选择JWT而不是传统的Session-Cookie方案 ...
项目详细拷打
一、项目概述回答模板:
“我负责的是基于Spring Boot的校园点餐系统,分为客户端(微信小程序)和商家端(Web管理后台)。核心功能包括在线点餐、订单管理、高并发库存控制、实时通知等。我重点解决了分布式锁防超卖、JWT无状态认证、Redis缓存优化、WebSocket实时通信等技术难点。”
二、技术点拆解与追问预测1. 登录与身份验证(JWT + ThreadLocal)引导问题:• 为什么选择JWT而不是Session?• 如何保证Token的安全性?• ThreadLocal可能有什么风险?
技术要点:• JWT结构:Header(算法)、Payload(用户数据)、Signature(签名防篡改)。• 无状态优势:适合分布式系统,减少服务端存储压力。• 安全问题: • Token泄露风险 → 结合HTTPS、设置较短过期时间。 • 主动失效困难 → 用Redis维护黑名单(如用户注销时记录未过期的Token)。• ThreadLocal内存泄漏: • 原因:Tomcat线程池复用线程,未remove()导致用户信息残留。 • 解决:拦截器销毁前调用T ...
简历知识点
一、技术基础1. Java核心 • 集合:HashMap底层结构(数组+链表/红黑树)、ConcurrentHashMap分段锁机制、ArrayList vs LinkedList • 并发:synchronized锁升级过程、ReentrantLock的AQS实现、线程池参数(核心/最大线程数、队列类型) • JVM:内存分区(堆、栈、方法区)、GC算法(CMS/G1区别)、OOM排查工具(jstat、MAT)
2. 数据库 • 事务:ACID特性、脏读/不可重复读/幻读场景、MVCC实现原理 • 索引:B+树结构、最左前缀原则、覆盖索引优化、索引失效场景(如LIKE “%xx”) • 锁:行锁 vs 表锁、死锁检测(SHOW ENGINE INNODB STATUS)
3. Spring框架 • IOC:Bean生命周期、依赖注入方式(构造器 vs @Autowired) • AOP:动态代理(JDK/CGLIB)、切面执行顺序(@Order)、事务传播机制
4. Redis • 缓存 ...
苍穹外卖技术要点1
1. 登录及身份验证(JWT + ThreadLocal + 拦截器)实现步骤:
引入依赖:在pom.xml中引入JWT和Spring Security相关依赖:
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency>
生成JWT Token:在用户登录成功后,生成JWT Token并返回给客户端:
public String generateToken(User user ...
tplink笔试第一次
笔试题目:题目 1有如下代码:
typedef struct __foobar{ char foo1; int foo2;}FOOBAR;
在32位处理器上,sizeof(FOOBAR)的值为()。
选项:
• 4
• 5
• 6
• 8
题目 2在C语言中,关于关键字static的说法,以下错误的是()。
选项:
在函数内,一个被声明为静态的变量,该变量在该函数第二次调用开始时值,等于该函数第一次调用结束时的值(仅考虑单线程调用)。
在一个C文件内(但在函数体外),一个被声明为静态的变量可以被该C文件内所用函数访问,但不能被该C文件外其它函数访问。
在一个C文件中,一个被声明为静态的函数只可被这一C文件的函数调用。
函数内定义的static变量,在函数第一次执行时被初始化。
题目 3请仔细阅读以下关于计算机网络和网络协议的描述,选择所有正确的选项。(多选)
选项:
在TCP/IP协议族中,TCP协议通过三次握手建立连接,确保数据的可靠传输,并且使用序列号和确认机制来实现这一功能。
IP协议是无连接的,它负责在网络中路由数据包 ...
感悟(1)
关于延迟满足、海岛、音乐的思考与感悟延迟满足延迟自我观察,我有两个很明显的“不延迟”行为,一是打游戏,二是手冲,三是刷信息。首先是打游戏,细数下来,我用心沉浸进去的游戏并不多,我有特别仔细研究过打法的游戏吗?我有特别想了解剧情的游戏吗?我有获得超多感悟引发人生思考的游戏吗?想起来并不多,甚至可以说是没有。这感觉就是无意识的消磨时光,除了消磨时光,仿佛没有任何意义,但是,这段时光消磨过去了,我又在期待什么吗?会有突如其来的改变吗?会有恍若隔世的转变吗?会有某一个时间点突然的剧变吗?都没有。
特别是cs2、英雄联盟这类游戏,一局一局不断重复又略有不同和随机性的游戏,是浪费我光阴最多的游戏。它们的成瘾性体现在数百个小时,上千小时。我走进这段时光,出来仍是那个想要走进去的人,没有任何改变。对于这类游戏,我认为应该在我的人生中,对他们判处死刑。对于另一类剧情类的游戏,我认为当下的阶段,我无法心安理得的欣赏它们的剧情,可以暂时放在一边,等待他日机缘巧合再来判断。对于休闲收集类的游戏,比如少前2,我认为只要在可控制的时间范围内,是可以接受的。
对于手冲,这大概不是适合在这里提及的话题,毕竟我没有打算 ...
方向
a9e30c21626359e888f88c58ad1760c419577100e57008cc3bd100da4c983bda76aec791cddcd67acb5583797a1dce557fd3309fd3526aec9db18dd738602b406a3de2d0d2437746f6122f2864081f2d515d2c1e458eff8d01c52718a200bea1d4994e6e893e6f60c479033f02690453826dba5444b2e85dc550714762b17a56c7eb87c1ff9e63b34611b21db658a0a54de3e93da6dca63293088c99fe56a54076ca48e38d7f6d4150bf8418747c82b33888c65ea76995b4f54781e9ca9639a049ff36c60a42819915f1c3af8867f6b5279acfdc59c25763f17d1b80fcb5bfbe4a2f0bcf7ca472619e657124aadf0ec9f96392b6521c7b2cc ...
自我思考(五)
1.三思而后行(对抗无意识)今天回顾自己的问题的时候,发现遭受的很多内耗和困难,实际上来源于自己的冲动,有一种激素控制身体,而这具身体不属于“我”的感觉。往小了说,比如手冲、贪玩、食欲等等,在那一瞬间我真的很想去做这事吗?
我意识到,我应该在决定做一件事之前,问问自己这究竟是我想做这件事还是激素想做这件事。这件事情的利弊要分析清楚。
(ps:我在想这件事的时候,意识到了自己的另一个不好的习惯,也就是觉得“三思而后行”会不会显得太教条,太死板。这种奇怪的思维跳跃,我感觉来自以往看的一些作品,受其中一些人物的影响,实际上那些人物只是另一个极端罢了,我是冲动的极端,那些人是犹豫的极端,而我还没开始改变,还没有实施三思而后行,我的大脑就自动开始排斥,我觉得可能是觉得这是耗能的行为,也就是说,这思维跳跃本质上也是一种激素控制,根本就不是我在想,而是大脑觉得这么做会累就自动产生激素企图控制我不要实施这个思维进步,我讨厌我这一点。这激素感觉与我为敌一般,我承认习惯和下意识行为可以避免一些危险,但目前的情况来看,是我的行为逻辑大部分充满了无意识,缺乏理智的判断,已经是利大于弊,我必须意识到这一点) ...