ARM/Linux嵌入式面经(三十):腾讯 C++开发工程师
文章目录
-
- 自我介绍:首先让我做了一个简短的自我介绍。
- volatile关键字:解释了volatile关键字的作用和使用场景。
-
- 回答 volatile 关键字的作用和使用场景
- 追问几个有深度的技术问题
- malloc底层:详细描述了malloc函数的底层实现机制。
-
- malloc函数的底层实现机制概述
- 深度技术追问及答案
- 虚函数:讲解了虚函数的概念和用途。
-
- 回答虚函数的概念和用途
- 追问有深度的技术问题及答案
- 内联函数:解释了内联函数的定义和使用。
-
- 回答
- 追问有深度的技术问题及答案
- 虚函数可以是内联的么?:讨论了虚函数是否可以被定义为内联函数。
-
- 回答
- 追问及答案
-
- 追问1: **在哪些情况下编译器可能会内联虚函数?**
- 追问2: **虚函数和纯虚函数的主要区别是什么?**
- 追问3: **在嵌入式系统中,使用虚函数和多态性时需要注意哪些性能问题?**
- C++11的智能指针:介绍了C++11中智能指针的种类和使用方法。
-
- 回答
- 追问有深度的技术问题及答案
- B+树和红黑树的区别:比较了B+树和红黑树的结构和应用场景。
-
- B+树和红黑树的区别
-
- 结构差异
- 应用场景
- 深度技术问题及答案
-
- 问题一:B+树相比红黑树,在磁盘I/O效率上有何优势?
- 问题二:红黑树在保持平衡性方面采用了哪些策略?
- 同步异步、阻塞非阻塞:解释了同步与异步、阻塞与非阻塞的区别。
-
- 同步与异步、阻塞与非阻塞的区别
-
- 同步与异步
- 阻塞与非阻塞
- 追问有深度的技术问题及答案
- 手撕线程安全的单例模式:现场编写了一个线程安全的单例模式代码。
-
- 追问与解答
- 手撕智能指针:现场实现了一个简单的智能指针
-
- 回答:现场实现一个简单的智能指针
- 追问有深度的技术问题及答案
自我介绍:首先让我做了一个简短的自我介绍。
volatile关键字:解释了volatile关键字的作用和使用场景。
回答 volatile 关键字的作用和使用场景
volatile 关键字的作用:
volatile 关键字是 Java 中的一个类型修饰符,用于确保变量对所有线程的可见性。当一个变量被声明为 volatile 时,它会告诉 JVM(Java 虚拟机)该变量的值可能会被其他线程改变,因此每次访问该变量时都需要从主内存中重新读取其值,而不是使用可能存储在各个线程工作内存中的缓存值。这样可以防止内存可见性问题,即一个线程修改了某个变量的值,而另一个线程却看不到这个修改。
使用场景:
-
状态标记:在多线程环境中,volatile 变量常用于作为状态标记,指示某个条件是否满足。例如,一个线程可能等待另一个线程完成某个任务,这时可以使用 volatile 变量作为完成标志。
-
单例模式的双重检查锁定(Double-Checked Locking