wudangwangye level
获赞
144
粉丝
98
关注
1
看过 TA
778
齐鲁工业大学
2026
Java
IP属地:山东
暂未填写个人简介
私信
关注
04-17 14:19
已编辑
齐鲁工业大学 Java
线程池:线程池的目的是为了避免线程重复创建和销毁,线程池可以设置最大线程池和阻塞队列任务数。同时当任务进来阻塞队列时候,看那个核心线程有空,去拿出来任务。当线程都在工作,任务会放在队列内排队。若队列也满了,这时候新来任务,会创建临时线程。临时线程等于最大线程数-核心线程。所以说可能出现后来先执行的情况。当临时线程也满了此时源码写着false然后是拒绝创建。线程存活时间:超出的临时线程的空闲存活时间。线程过期要看,线程一定时间没有从工作队列中获取新任务,线程会被标记且回收,此时可用线程数加一。拒绝策略:任务无法被线程池执行的处理策略线程淘汰策略:先进先出(FIFO, First In First Out)描述:最先创建的线程最先被淘汰。优点:实现简单。缺点:不考虑线程的使用频率或重要性,可能导致频繁使用的线程被淘汰。 #牛客AI配图神器#最近最少使用(LRU, Least Recently Used)描述:淘汰最近最少被使用的线程。优点:相对公平,能够保留最近使用频繁的线程。缺点:需要维护每个线程的使用时间戳,增加了开销。 最不经常使用(LFU, Least Frequently Used)描述:淘汰使用频率最低的线程。优点:适合处理长期不使用的线程。缺点:可能会保留一些短期内频繁使用但长期不再使用的线程。随机淘汰(Random Eviction)描述:随机选择一个线程进行淘汰。优点:实现简单,开销低。缺点:无法保证淘汰的合理性,可能会淘汰重要线程。原子性就是一次执行全部执行,一次拒绝全部拒绝,无法在分割了。可见性:线程在修改过程中,其他线程能看见。jmm内存模型:主内存和线程的工作内存,线程基本上都是修改工作内存,如果工作内存和主内存没有同步就会失去可见性,如果加锁了,这会工作内存就能看得见了。CAS:compaer and swap,先看是不是目标值,不是就替换。内存位置,预期值,新值,内存值与预期值匹配,则内存位置的值更新为新值,否则操作失败。同时旧值存到寄存器中,一般是内存值和寄存器互换值。自旋锁:线程在获取锁时候,如果背其他获取了,不断判断能不能获取,知道锁被获取才退出循环。ABA问题:就在上述问题中间,看似没变化,实际上发生了修改。锁升级问题:这里太底层了,想去大厂的兄弟们可以看下,比较难以理解其实,JVM中的锁升级是一个逐步优化的过程,具体步骤如下:无锁状态当一个对象刚被创建时,它处于无锁状态。 此时没有任何线程持有该对象的锁。偏向锁(Biased Locking)只有一个线程访问对象时。JVM会将线程ID记录在对象头中,后续该线程可以直接获取锁,无需同步操作。减少了锁的开销,适合单线程重复访问的场景。当另一个线程尝试获取锁时,偏向锁会被撤销,升级为轻量级锁。轻量级锁(Lightweight Locking)多个线程交替访问对象,但没有激烈的竞争。JVM会在当前线程的栈帧中创建一个锁记录(Lock Record),然后通过CAS操作将对象头中的锁指针指向该锁记录。避免了线程阻塞,减少了上下文切换的开销。当CAS操作失败(即锁竞争激烈)时,轻量级锁会升级为重量级锁。重量级锁(Heavyweight Locking)多个线程激烈竞争锁。JVM会将锁交给操作系统管理,线程会进入阻塞状态,等待锁的释放。适合高并发场景,确保线程安全。增加了上下文切换和线程调度的开销。Reentrantlock公平锁与非公平锁:公平锁(Fair Lock)多个线程按照申请锁的顺序依次获取锁,即先到先得。避免了线程饥饿问题,所有线程都有机会获取锁。性能较低,因为需要维护一个队列来记录线程的申请顺序。非公平锁(Non-Fair Lock)多个线程获取锁的顺序不一定是先到先得,允许插队。性能较高,因为减少了线程切换的开销。可能导致线程饥饿,某些线程可能长时间无法获取锁。排他锁与非排他锁(互斥锁和非互斥锁):排他锁和非排他锁的区别在于锁是否可以被多个线程共享排他锁(Exclusive Lock)也称为互斥锁(Mutex Lock),同一时刻只能被一个线程持有。写操作通常需要排他锁,以确保数据的一致性。其他线程必须等待锁释放后才能获取锁。 非排他锁(Non-Exclusive Lock)也称为共享锁(Shared Lock),同一时刻可以被多个线程持有。读操作通常使用非排他锁,以提高并发性能。多个线程可以同时获取锁,但写操作仍然需要排他锁。AQS是什么:可用构建锁和其他同步器,AQS用一个FIFO队列管理等待锁的线程,同时提供独占模式和共享模式的同步机制。#牛客激励计划#
葬爱~冷少:武当王,校友诶
0 点赞 评论 收藏
分享
看到这么一句话,说那些很懒的人,过的很舒服;那些很勤快的人,过的很满足;焦虑的人无非是夹在二者之间的做仰卧起坐的人。仰卧起坐嘛,站不起来,躺不下去,累你的腰腹部,很多人其实也是这样,受不得清闲,忙的烦恼。按我个人而言的,有这么一句话说焦虑本质上是你的欲望和你的能力不匹配,我是忙碌过的,也是清闲过的,可我依旧焦虑,为何?我身边真实的案例,就是隔壁姐姐在外地打工然后家里小时候对她很好的老人过世了,她很难过,但她没有办法,难过是因为没花更多时间陪她,烦恼是要挣钱养家里人,鲁迅说:很多人在家中长辈生病时候不照顾陪伴,在快死了时候火急火燎的赶到家中,买些人参灌些汤药希望能多活几日,大体原因也是因为这个。我自己的话还是听以前人说的,父母在,不远游,愿意多花时间陪陪父母,我知道自己后面会很忙,我知道自己愿意做那满足之人,我这一生追求热烈而浪漫,我始终觉得不要温和的走进那个良夜。去追求自己所热爱追求自己所期望的才算是活着。人生不过了了几十载。求学已经耗费掉我1/3的时光,将来再花1/3去工作也许我没那时间和精力再去旅行。按照这方面而言也许我是清楚知道自己想要什么的,牛客上,b站,抖音大部分社媒基本上还是负面内卷较多,但是你上大学的目的是什么,你考研的目的是什么,考公的目的是什么,很多人没有自己的想法。或者说他被完全的训化而丧失了去追求的能力,或者说是勇气。我自己个人而言我读书就是为了挣钱。只要能挣钱,不犯法,和计算机一样辛苦但是钱多,我是愿意去干的,我身上没有那件长衫,或许说我从来就没穿上,很多人想读研,原因是身份,还是待遇,还是那什么什么,不重要,其实和考公一样的,都是围城,你喜欢就去做,最烦恼的人无非是那犹犹豫豫的人,总怕一脚踏空,实际上当你不得不前行的时候你问问自己,是我真想要前行吗?我真想读这个研?或者是我真想干这个活?是被逼迫还是自己强烈的意愿,也就是类似主观能动性。想做就做,事缓则圆。最差无非就是找不到工作,或者是没考上研,想读就再来一年。你人生只有这么点时间,多花点时间去打游戏去看书,去取悦接纳自己。我写这些不是让你摆烂或者让你躺平,我希望有人看了这篇理不通逻辑的文章之后能够去热烈的追求,能够去真实的活着,去做那个人生精彩的人。
0 点赞 评论 收藏
分享
03-14 09:48
已编辑
齐鲁工业大学 Java
Redis的主要特点:高性能,持久化,原子操作,高可用性。Redis基本数据类型:字符串(String):缓存,计数器,这里面可以存字符串,整数,浮点数,哈希(Hash):存储对象,HSET存,HGET获取列表(List):消息队列,栈,队列:LPUSH,RPUSH,栈:LPOP,RPOP集合(Set):标签,好友关系,无序,有序集合(Sorted Set):排行榜,优先级队列,有序,集合都是每个元素关联一个数。Bitmaps:可用与位操作,适合存布尔值,HyperLogLog:可用于估算适合统计唯一值Redis的线程问题:他是单线程的,为了避免上下文切换和锁竞争。持久化问题,还有具体好处:RDB:快照,恢复速度快,可能丢失最后一次的数据,RDB触发条件:手写SAVE,BGSAVE,或者自动触发。AOF:写时复制,数据安全性高,文件体积大,恢复太慢。AOF重写机制:AOF通过创建一个AOF文件且包含当前数据集的最小操作集。Redis事务如何实现,支持回滚吗?Redis用MULTI,EXEC,DISCARD和WATCH命令支持事务且按顺序执行,不能回滚。发布/订阅模式:常用命令:SUBSCRIBE,PUBLISH,UNSUBSCRIBE,就是订阅,发布,un订阅,(取关,怎么好记怎么来)Redis的高可用和分布式问题:Redis Sentinel 是什么?哨兵模式,监控健康状态,自动转移故障同时更新主节点,主从复制需要replicaof命令。Redis Cluster 是什么?这个节点通信机制了解吗?这是集群模式,分布式解决方案,支持数据分片和自动故障转移同时选举出新的主节点。而且使用Gossip协议进行节点通信。Redis的性能问题:缓存穿透:这里放布隆过滤器。缓存雪崩:设置永远不过期,重启时候或者访问量少的时候备份,缓存击穿:这里放互斥锁,和永不过期。过期策略:定时删除,惰性删除,用EXPIRE命令设置过期时间。怎么用Redis实现分布式锁:一般使用SETNX命令实现分布式锁。Redis过期淘汰策略,内存不足淘汰策略:定时删除,和惰性删除。可用淘汰策略删除键,可用设置。Redis如何实现会话存储:一般使用字符串和哈希结构存。常用的命令:SET,GET,HSET,HGET,LPUSH,RPUSH,LPOP,RPOP,ZADD,SADD内存碎片:就是你内存分配和释放过程产生的碎片,可以用MEMORY PURGE清理。Redis数据倾斜:就是你数据不均匀,可以用CLUSTER REBALACE平衡数据。差不多,后面找到新的会重新加进去,看这篇就对了,小手点点赞,你也开心我也开心,很多时候可能说期望与现实落差很大,你可能从一个说了出来没人听过的小县城出来,一腔热血不远千里出门到省城去读书,家里人很高兴,因为你是小镇上唯二考上大学的人,但是当你见过社会的真实之后也许你会感叹,池塘的骄傲无非不过是海洋的边角料所以你得过且过,有那么一天突然想起来,哦,如果说我去做了会怎么样,有些东西还是去试一下的,就算周围人不理解你,就算他们被传统思维所囚禁,就算你觉得很难和他们沟通,这些也不重要,你这般年轻,为何不去做?加油啊,陌生人,但行好事,莫去焦虑了。#牛客AI配图神器#
0 点赞 评论 收藏
分享
03-06 15:10
已编辑
齐鲁工业大学 Java
这下知道该干什么了吧,准备 Java 暑期实习的八股文(即常见面试题)时,需要重点掌握 Java 基础知识、数据结构与算法、数据库、框架(如 Spring)、以及系统设计等内容。以下是详细的准备指南:## 1. **Java 基础知识**### **1.1 Java 核心概念**- **面向对象编程(OOP)**:  - 封装、继承、多态。  - 抽象类与接口的区别。- **Java 数据类型**:  - 基本数据类型(如 int、double)和引用数据类型(如 String、数组)。  - 自动装箱与拆箱。- **异常处理**:  - 异常的分类(Checked Exception 和 Unchecked Exception)。  - try-catch-finally 的使用。- **集合框架**:  - ArrayList、LinkedList、HashMap 的实现原理。  - ConcurrentHashMap 的线程安全机制。- **多线程**:  - 线程的创建方式(继承 Thread、实现 Runnable、实现 Callable)。  - 线程池的使用(ThreadPoolExecutor)。  - synchronized 和 ReentrantLock 的区别。### **1.2 JVM 相关**- **内存模型**:  - 堆、栈、方法区的区别。  - 垃圾回收算法(如标记-清除、标记-整理、分代收集)。- **类加载机制**:  - 类加载的过程(加载、验证、准备、解析、初始化)。  - 双亲委派模型。---## 2. **数据结构与算法**### **2.1 常见数据结构**- **数组与链表**:  - 数组的随机访问特性。  - 链表的插入与删除操作。- **栈与队列**:  - 栈的应用(如括号匹配)。  - 队列的应用(如 BFS)。- **树与图**:  - 二叉树的前序、中序、后序遍历。  - 图的 DFS 和 BFS。### **2.2 常见算法**- **排序算法**:  - 快速排序、归并排序、堆排序的实现与复杂度。- **查找算法**:  - 二分查找的实现与适用条件。- **动态规划**:  - 背包问题、最长公共子序列(LCS)。- **贪心算法**:  - 最小生成树(Prim、Kruskal)。## 3. **数据库**### **3.1 SQL 基础**- **常用 SQL 语句**:  - SELECT、INSERT、UPDATE、DELETE。  - JOIN(INNER JOIN、LEFT JOIN、RIGHT JOIN)。- **索引**:  - 索引的作用与类型(B+ 树索引、哈希索引)。  - 索引的优缺点。### **3.2 数据库优化**- **事务**:  - ACID 特性。  - 事务隔离级别(读未提交、读已提交、可重复读、串行化)。- **锁机制**:  - 行锁、表锁、乐观锁、悲观锁。## 4. **框架(Spring)**### **4.1 Spring 核心**- **IOC 与 AOP**:  - IOC 的实现原理(依赖注入)。  - AOP 的实现原理(动态代理)。- **Bean 的生命周期**:  - Bean 的创建、初始化、销毁过程。- **Spring MVC**:  - 请求处理流程(DispatcherServlet、HandlerMapping、Controller)。### **4.2 Spring Boot**- **自动配置**:  - Spring Boot 的自动配置原理。- **常用注解**:  - @RestController、@Service、@Repository、@Autowired。---## 5. **系统设计**### **5.1 设计模式**- **单例模式**:  - 饿汉式、懒汉式、双重检查锁。- **工厂模式**:  - 简单工厂、工厂方法、抽象工厂。- **观察者模式**:  - 事件监听与通知机制。### **5.2 分布式系统**- **CAP 理论**:  - 一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)。- **分布式锁**:  - 基于 Redis 的分布式锁实现。## 6. **项目经验**- **项目描述**:  - 准备一个自己参与的项目,能够清晰描述项目的背景、技术栈、解决的问题。- **难点与解决方案**:  - 描述项目中遇到的难点,以及如何解决。- **技术亮点**:  - 突出项目中使用的技术亮点(如高并发处理、性能优化)。---## 7. **行为面试**- **自我介绍**:  - 简洁明了,突出技术能力和项目经验。- **职业规划**:  - 表达对技术的热情和长期发展的目标。- **团队合作**:  - 描述在团队中如何协作解决问题。## 8. **刷题与模拟面试**- **刷题平台**:  - LeetCode、牛客网、Codeforces。- **高频题目**:  - 两数之和、反转链表、二叉树遍历、LRU 缓存。- **模拟面试**:  - 找同学或朋友进行模拟面试,练习表达和应变能力。## 9. **简历与投递**- **简历优化**:  - 突出技术栈和项目经验。  - 使用 STAR 法则(Situation、Task、Action、Result)描述项目。- **投递策略**:  - 提前关注目标公司的招聘信息。  - 多投递,增加面试机会。## 10. **面试技巧**- **沟通技巧**:  - 清晰表达思路,遇到不会的问题可以尝试分析。- **代码书写**:  - 写代码时注意命名规范、边界条件、异常处理。- **提问环节**:  - 准备一些有深度的问题(如团队技术栈、项目挑战)。最后,丢掉幻想,准备斗争!
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客企业服务