8.21面试复盘

2024-08-22 23:44
文章标签 8.21 复盘 面试

本文主要是介绍8.21面试复盘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

读写锁和互斥锁

1. 概念

互斥锁(Mutex)

  • 互斥锁是一种用于确保同一时间只有一个线程能够访问共享资源的同步机制。
  • 其基本作用是保护临界区,避免多个线程同时进入导致数据竞态和不一致性的问题。

读写锁(Read-Write Lock)

  • 读写锁允许多个线程同时读取共享资源,但在写操作时,必须独占资源。这种机制有助于提高多线程环境中对共享资源的访问效率。
  • 读写锁将线程的访问分为两种类型:读锁和写锁。读锁是共享的,多个线程可以同时持有读锁;而写锁是独占的,任何线程持有写锁时,其他线程不能持有读锁或写锁。

2. 使用场景

互斥锁

  • 适用于对资源的访问几乎总是写操作,或者读写操作的比例接近时。
  • 比如:保护某个写操作频繁的资源,或者不需要区分读写操作时。

读写锁

  • 适用于读操作远远多于写操作的场景。
  • 比如:数据结构的查询操作频繁而更新操作稀少时,如缓存系统。

3. 实现方式

互斥锁

  • 互斥锁通常通过标志位、原子操作或操作系统提供的锁机制来实现。
  • 比如,POSIX线程库中的pthread_mutex_t,Windows中的CRITICAL_SECTIONHANDLE

读写锁

  • 读写锁的实现比互斥锁要复杂。通常包括:

    • 计数器:用于跟踪当前持有读锁的线程数量。
    • 状态标志:指示是否有线程持有写锁。
    • 线程队列:用于管理等待读锁或写锁的线程。

    具体实现中:

    • 读锁通常会有一个计数器,允许多个线程同时获取读锁,只要没有线程持有写锁。
    • 写锁需要确保在写操作进行时,所有其他读锁和写锁都被释放,以确保数据一致性。

4. 性能差异

互斥锁

  • 由于互斥锁只允许一个线程访问临界区,因此在高竞争的情况下可能导致线程阻塞,降低并发性能。
  • 适用于线程访问共享资源的竞争较高,或没有显著的读写比例差异的情况。

读写锁

  • 当读操作远多于写操作时,读写锁可以显著提高性能。多个线程可以同时进行读操作,从而提高了系统的并发度。
  • 写操作会造成所有线程(读和写)阻塞,写锁的竞争会影响性能,因此需要在写操作的频率较低时使用读写锁。

GDB查看core文件

1.启动GDB并指定程序和core文件

gdb /path/to/your/program /path/to/corefile

 2.查看程序崩溃的位置

当 GDB 加载了 core 文件后,它通常会自动打印出程序崩溃的位置,并显示调用栈(backtrace)。btbacktrace 的简写,显示当前调用栈的详细信息,包括函数调用、源文件和行号。

3.检查程序状态

查看崩溃时的线程信息:

info threads

 切换到特定线程(如果有多个线程):

thread <thread-number>

 打印线程的调用栈:

bt

4.查看变量值

查看崩溃位置附近的变量值:

frame

 打印当前帧的局部变量

print <variable-name>

linux命令

find

按文件名查找

find /path/to/search -name "filename"

按文件大小查找:查找大于100M的

find /path/to/search -size +100M

按文件类型查找

find /path/to/search -type f
只查找文件
find /path/to/search -type d
只查找目录

vi修改文件格式

1.打开文件

vi filename

2.进入命令模式:如果在插入模式(可以输入文字),按 Esc 键返回命令模式。

设置为 Unix 格式::set fileformat=unix

设置为 DOS 格式::set fileformat=dos

3.保存退出:

:wq

将 .so 动态库编译到程序中

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH
./myprogram
  • -L. 指定当前目录为库搜索路径。
  • -lmylib 表示链接名为 libmylib.so 的库。

join和detach

1. join

  • 阻塞调用:当一个线程调用 join 时,调用线程会阻塞,直到被 join 的线程结束。
  • 获取返回值:可以获取被 join 的线程的返回值。
  • 资源清理:确保线程资源被正确清理,防止内存泄漏。
  • 使用场景:当需要等待某个线程完成并获取其结果时使用。

2. detach

  • 非阻塞调用:调用 detach 后,线程将独立于调用线程运行。调用线程不会等待它完成。
  • 无法获取返回值:无法获取被 detach 的线程的返回值。
  • 资源管理:线程在结束后会自动释放资源,但程序不能通过 join 来显式地清理。
  • 使用场景:当线程的生命周期不需要与主线程同步或者不需要获取结果时使用。

条件变量和信号量

条件变量和信号量是多线程编程中常用的同步机制,它们有一些关键的区别:

条件变量

  1. 用途

    • 用于线程之间的等待和通知。
    • 线程可以等待某个条件变量,而另外的线程可以通知(或广播)这个条件发生了变化。
  2. 使用方式

    • 通常与一个互斥锁(mutex)配合使用。
    • 线程在等待条件变量时会释放关联的互斥锁,等待被通知后重新获得锁。
  3. 特性

    • 适用于需要等待特定条件的情况。
    • 支持广播通知(唤醒所有等待线程)。

信号量

  1. 用途

    • 用于计数资源或控制对共享资源的访问。
    • 可以有一个计数值,用于表示可用资源的数量。
  2. 使用方式

    • 通过增加或减少计数器来实现同步。
    • 线程等待信号量时会阻塞,直到信号量计数器大于零。
  3. 特性

    • 分为二进制信号量(类似互斥锁)和计数信号量。
    • 不需要与互斥锁一起使用。
    • 适用于控制资源访问和管理并发线程数。

总结

  • 条件变量适合于线程需要等待条件满足的场景。
  • 信号量适合于资源管理和控制并发访问的场景。

  

这篇关于8.21面试复盘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

字节面试 | 如何测试RocketMQ、RocketMQ?

字节面试:RocketMQ是怎么测试的呢? 答: 首先保证消息的消费正确、设计逆向用例,在验证消息内容为空等情况时的消费正确性; 推送大批量MQ,通过Admin控制台查看MQ消费的情况,是否出现消费假死、TPS是否正常等等问题。(上述都是临场发挥,但是RocketMQ真正的测试点,还真的需要探讨) 01 先了解RocketMQ 作为测试也是要简单了解RocketMQ。简单来说,就是一个分

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

java面试常见问题之Hibernate总结

1  Hibernate的检索方式 Ø  导航对象图检索(根据已经加载的对象,导航到其他对象。) Ø  OID检索(按照对象的OID来检索对象。) Ø  HQL检索(使用面向对象的HQL查询语言。) Ø  QBC检索(使用QBC(Qurey By Criteria)API来检索对象。 QBC/QBE离线/在线) Ø  本地SQL检索(使用本地数据库的SQL查询语句。) 包括Hibern

贝壳面试:什么是回表?什么是索引下推?

尼恩说在前面 在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 1.谈谈你对MySQL 索引下推 的认识? 2.在MySQL中,索引下推 是如何实现的?请简述其工作原理。 3、说说什么是 回表,什么是 索引下推 ? 最近有小伙伴在面试 贝壳、soul,又遇到了相关的

毕业前第二次面试的感慨

距面试已经过去了有几天了,我现在想起来都有说多的恨感慨。 我一直都是想找刚刚起步的企业,因为这能让我学到更多的东西,然而正好有一家企业是刚起步的,而且他还有自己的产品专利,可以说这是一家,即是创业又是刚起步的公司,这家公司回复了我投给他的简历,这家企业想进一步了解我的情况,因为简历上我符合这家企业的基本要求,所以要进一步了解。 虽然面试的过程中,他给我的面试题,我做得并不是很理想,

腾讯社招面试经历

前提:本人2011年毕业于一个普通本科,工作不到2年。   15号晚上7点多,正在炒菜做饭,腾讯忽然打电话来问我对他们的Linux C++的职位是否感兴趣,我表达了我感兴趣之后,就开始了一段简短的电话面试,电话面试主要内容:C++和TCP socket通信的一些基础知识。之后就问我一道算法题:10亿个整数,随机生成,可重复,求最大的前1万个。当时我一下子就蒙了,没反应过来,何况我还正在烧

完整的腾讯面试经过

从9月10号开始到现在快两个月了,两个多月中,我经历数次面试和笔试,在经历这些的同时积累了不少的经验,也学到了不少东西,在此把它记录下来,算是和一起找工作中的同学一起共勉吧。我是本校的学生,专业是机械制造及其自动化,找工作的主要目标是计算机软件类和机械制造方向的国内的企业,所以意向去外企的同学就不必浪费时间看这些面经啦,想去国内IT企业的同学可以继续看下去。本贴中我把最近的腾讯面试经过写下

仕考网:结构化面试流程介绍

(一)结构化面试 结构化面试,也叫做标准化面试,考官按照预先设定好的一套试题以问答方式与应试者当面交谈,根据应试者的言语、行为表现,对其相关能力和个性特征作出相应评价。 (二)考试流程 抵达考场——审核抽签——面试候考——进入考场——面试答题——考生退场——计分审核 (三)答题技巧 1.声音洪亮,音量可以比平时说话声音大一点。 2.语速不要过快,语速快容易卡顿,而且不便于考官听清答

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

Leetcode面试经典150题-128.最长连续序列-递归版本另解

之前写过一篇这个题的,但是可能代码比较复杂,这回来个简洁版的,这个是递归版本 可以看看之前的版本,两个版本面试用哪个都保过 解法都在代码里,不懂就留言或者私信 class Solution {/**对于之前的解法,我现在提供一共更优的解,但是这种可能会比较难懂一些(思想方面)代码其实是很简洁的,总体思想如下:不需要排序直接把所有数放入map,map的key是当前数字,value是当前数开始的