Insta 360 校园/社会招聘,填写内推二维码

影石创新科技股份有限公司社招内推码: H9UR6F9 
投递链接: https://arashivision.jobs.feishu.cn/s/iPvdrhkH #校招#  #内推#
全部评论

相关推荐

📍 笔试公司:浩鲸科技💻 笔试岗位:数据库开发📚 笔试问题:1. java jvm内存模型的3个组件?    堆(Heap):存放对象实例和数组。    方法区(Method Area):存储类信息、常量、静态变量等。    栈(Stack):每个线程私有的,管理方法调用和局部变量。2. java Object通过哪2个函数实现多进程通信?    wait():使当前线程等待,直到另一个线程调用notify()或notifyAll()方法。    notify()/notifyAll():唤醒一个或所有在对象上等待的线程。3. java synchronized是什么?有什么用?    synchronized是一个关键字,用于给代码块或方法加锁,确保同一时间只有一个线程可以执行被保护的代码段,防止多个线程同时访问共享资源导致的数据不一致问题。4. 事务是什么?有哪些特性?    事务是一组要么全部成功提交,要么全部失败回滚的操作集合。其特性为ACID:    Atomicity(原子性):事务是不可分割的工作单位,要么全做,要么全不做。    Consistency(一致性):事务必须使数据库从一个一致性状态变到另一个一致性状态。    Isolation(隔离性):各事务之间相互隔离,互不影响。    Durability(持久性):一旦事务提交,它对数据库的改变就是永久性的。#软件开发笔面经#
查看4道真题和解析 投递浩鲸科技等公司7个岗位 软件开发笔面经
点赞 评论 收藏
分享
线程池:线程池的目的是为了避免线程重复创建和销毁,线程池可以设置最大线程池和阻塞队列任务数。同时当任务进来阻塞队列时候,看那个核心线程有空,去拿出来任务。当线程都在工作,任务会放在队列内排队。若队列也满了,这时候新来任务,会创建临时线程。临时线程等于最大线程数-核心线程。所以说可能出现后来先执行的情况。当临时线程也满了此时源码写着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队列管理等待锁的线程,同时提供独占模式和共享模式的同步机制。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务