终结第一次面试(漫威科技)

2023-12-08 19:10

本文主要是介绍终结第一次面试(漫威科技),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一次面试,初面被PASS掉了

总结原因:

  1. 准备不充分很多东西都没反应过来

  2. 自身技术水平有待提高,业务代码写再多也没用

  3. 需要再努力准备

将面试题都记录一下,一定有一天可以找到合心意工作

  1. String.value of 和to String 区别
    答:String.valueof 是String提供的静态方法 .to String 是Object 的方法
    String.valueof 点击去源码
    public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString(); }
    当object是null时 会输出"null" 这里开发时要注意的,之后就是.toString的引用

2.线程安全关键词 synchronized实现原理
答案:当一个方法或者一个代码块被标记为synchronized,则同一时间只能有一个线程能够进入执行这个方法或代码块
Java内部使用monitor(也称monitor lock或intrinsic lock)机制实现synchronized同步机制,线程运行同步方法或者代码块,必须先获取相应的monitor锁(对象监视器)
monitorenter monitorexit
Synchronized 原理
实现原理: JVM 是通过进入、退出 对象监视器(Monitor) 来实现对方法、同步块的同步的,而对象监视器的本质依赖于底层操作系统的 互斥锁(Mutex Lock) 实现。

具体实现是在编译之后在同步方法调用前加入一个monitor.enter指令,在退出方法和异常处插入monitor.exit的指令。

对于没有获取到锁的线程将会阻塞到方法入口处,直到获取锁的线程monitor.exit之后才能尝试继续获取锁。

流程图如下:
在这里插入图片描述
在这里插入图片描述

  1. Synchronized与ThreadLocal的区别:
    synchronized关键字主要解决多线程共享数据同步问题 。
    ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题 。

ThreadLocal和Synchonized都用于解决多线程并发访问 。但是ThreadLocal与synchronized有本质的区别:

synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问 。而ThreadLocal为每一个线程都提供了变量的副本,使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享 。而Synchronized却正好相反,它用于在多个线程间通信时能够获得数据共享。

Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。当然ThreadLocal并不能替代synchronized,它们处理不同的问题域。Synchronized用于实现同步机制,比ThreadLocal更加复杂。

ThreadLocal是如何做到为每一个线程维护变量的副本的呢?其实实现的思路很简单,在ThreadLocal类中有一个Map,用于存储每一个线程的变量的副本。
概括起来说,对于多线程资源共享的问题,同步机制采用了“以时间换空间”的方式,而ThreadLocal采用了“以空间换时间”的方式。前者仅提供一份变量,让不同的线程排队访问,而后者为每一个线程都提供了一份变量,因此可以同时访问而互不影响。

  1. jdk 1.8concurrentHashMap实现原理
    答: 在jdk1.6中ConcurrentHashMap使用锁分段技术提高并发访问效率。首先将数据分成一段一段地存储,然后给每一段数据配一个锁,当一个线程占用锁访问其中一段数据时,其他段的数据也能被其他线程访问。然而在jdk1.8中的实现已经抛弃了Segment分段锁机制,利用CAS+Synchronized来保证并发更新的安全,底层依然采用数组+链表+红黑树的存储结构。

改进一:取消segments字段,直接采用transient volatile HashEntry<K,V> table保存数据,采用table数组元素作为锁,从而实现了对每一行数据进行加锁,进一步减少并发冲突的概率。

改进二:将原先table数组+单向链表的数据结构,变更为table数组+单向链表+红黑树的结构。对于hash表来说,最核心的能力在于将key hash之后能均匀的分布在数组中。如果hash之后散列的很均匀,那么table数组中的每个队列长度主要为0或者1。但实际情况并非总是如此理想,虽然ConcurrentHashMap类默认的加载因子为0.75,但是在数据量过大或者运气不佳的情况下,还是会存在一些队列长度过长的情况,如果还是采用单向列表方式,那么查询某个节点的时间复杂度为O(n);因此,对于个数超过8(默认值)的列表,jdk1.8中采用了红黑树的结构,那么查询的时间复杂度可以降低到O(logN),可以改进性能。

  1. 数据库索引: 1、普通索引 2、唯一索引 3、主键索引 4、组合索引 5、全文索引
  2. 缓存分布式锁咋实现的:
  3. 工作流:
  4. 代理和装饰有啥区别:
  5. String bean生命周期 ,三种注入方式的区别:
  6. 还有枚举为啥是单例的 原理:
  7. 反射和代理有啥区别 设计思想是什么:
  8. ThreadLockMap实现原理:
  9. 反射,过滤器,拦截器的区别:
  10. 单例如何防止反射攻击:
  11. GC算法在什么时候回收对象,GC算法分哪几种:
  12. 分布式缓存秒杀场景:
  13. 还问到了一种锁没听过,记不太得了
  14. String,StringBuild,StringBuff区别 ,== 和equals区别
  15. String s = “ab”; String s1 = “a” + “b” ;s和s1 == equeals
  16. 为什么链表超过8个就会转红黑树呢
  17. tpc 粘包 半包看看
  18. 红黑树的插入过程?要用到旋转和变色,维持树的特性
  19. tcp 三次握手 五次挥手

这篇关于终结第一次面试(漫威科技)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/471015

相关文章

Java面试八股之怎么通过Java程序判断JVM是32位还是64位

怎么通过Java程序判断JVM是32位还是64位 可以通过Java程序内部检查系统属性来判断当前运行的JVM是32位还是64位。以下是一个简单的方法: public class JvmBitCheck {public static void main(String[] args) {String arch = System.getProperty("os.arch");String dataM

C++面试八股文:std::deque用过吗?

100编程书屋_孔夫子旧书网 某日二师兄参加XXX科技公司的C++工程师开发岗位第26面: 面试官:deque用过吗? 二师兄:说实话,很少用,基本没用过。 面试官:为什么? 二师兄:因为使用它的场景很少,大部分需要性能、且需要自动扩容的时候使用vector,需要随机插入和删除的时候可以使用list。 面试官:那你知道STL中的stack是如何实现的吗? 二师兄:默认情况下,stack使

Java面试八股之JVM参数-XX:+UseCompressedOops的作用

JVM参数-XX:+UseCompressedOops的作用 JVM参数-XX:+UseCompressedOops的作用是启用对象指针压缩(Ordinary Object Pointers compression)。这一特性主要应用于64位的Java虚拟机中,目的是为了减少内存使用。在传统的64位系统中,对象引用(即指针)通常占用8字节(64位),而大部分应用程序实际上并不需要如此大的地址空间

华为某员工爆料:偷偷跑出去面试,被面试官鄙视了。第一句话就问:华为淘汰的吧,35岁了,这个年龄在华为能混得下去吗?身体没啥毛病吧

“你都35岁了,难不成是被华为淘汰的?在华为混不下去了吧?身体没啥毛病吧,我们这体检可是很严的。” 近日,一位华为员工在朋友圈爆料,自己在面试时遭到了面试官的无理取闹和人身攻击,原因仅仅是因为他35岁了,曾经在华为工作过。 这番话,充满了傲慢与偏见,让人听了义愤填膺。这位面试官的言行,不仅是对求职者的不尊重,更是对职场规则的践踏。 面试本应是双向选择的过程,企业和求职者在相互了解的基

算法与数据结构面试宝典——回溯算法详解(C#,C++)

文章目录 1. 回溯算法的定义及应用场景2. 回溯算法的基本思想3. 递推关系式与回溯算法的建立4. 状态转移方法5. 边界条件与结束条件6. 算法的具体实现过程7. 回溯算法在C#,C++中的实际应用案例C#示例C++示例 8. 总结回溯算法的主要特点与应用价值 回溯算法是一种通过尝试各种可能的组合来找到所有解的算法。这种算法通常用于解决组合问题,如排列、组合、棋盘游

【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用

【面试干货】Java中的四种引用类型:强引用、软引用、弱引用和虚引用 1、强引用(Strong Reference)2、软引用(Soft Reference)3、弱引用(Weak Reference)4、虚引用(Phantom Reference)5、总结 💖The Begin💖点点关注,收藏不迷路💖 在Java中,除了我们常见的强引用(Strong Refer

AI与音乐:共创未来还是艺术终结?

随着人工智能技术的不断进步,AI在音乐创作领域的应用已经成为了一个不可忽视的现象。最近一个月,一系列音乐大模型的推出,不仅极大地降低了普通人创作音乐的门槛,也引发了关于音乐产业未来的广泛讨论。AI是否正在创造音乐的新纪元,还是正在逐渐毁掉这一艺术形式?本文将深入探讨人工智能和音乐人的合作模式,讨论AI在音乐创作中的辅助作用,以及如何实现人机共同创作的可能性。 AI与音乐人的合作模式 在探讨

第一次接触Swing

学习java版的HslCommunication发现使用的是Swing,所以了解了一下~ 了解: Swing是Java的标准库(Java Foundation Classes, JFC)的一部分,用于构建桌面应用程序的图形用户界面(GUI)。它是Java AWT(Abstract Window Toolkit)的增强版,提供了更多的组件、更好的外观和感觉,以及更丰富的功能。Swing使用

redis 相关面试

1、Redis 使用过哪些类型?每一种类型应用场景是什么? string类型 ,基本信息存储 list 类型, 用过队列存储,每次获取前几个 hash类型, 哈希类型,主要存储对象, 如果某一个个体,有多个属性,则建议使用 redis hash类型(hset) set类型 ,无序集合,主要存储同一属性的集合 (sadd) sorted set类型, 主要用作排行榜  (之前被问过 如何实

2025秋招NLP算法面试真题(二)-史上最全Transformer面试题:灵魂20问帮你彻底搞定Transformer

简单介绍 之前的20个问题的文章在这里: https://zhuanlan.zhihu.com/p/148656446 其实这20个问题不是让大家背答案,而是为了帮助大家梳理 transformer的相关知识点,所以你注意看会发现我的问题也是有某种顺序的。 本文涉及到的代码可以在这里找到: https://github.com/DA-southampton/NLP_ability 问题