【面试题分析】第五篇 腾讯客户端开发面经(21 届秋招)

本文汇总了腾讯客户端开发的面试题目,涵盖了进程与线程的区别、通信方式、线程安全、同步机制、网络协议、加密算法等多个方面。通过这些题目,可以深入理解Java并发编程、操作系统、网络安全和数据安全等核心概念。
摘要由CSDN通过智能技术生成

参考面经:腾讯|客户端开发|面经(21 届秋招)|2021|

第一题:进程和线程的区别(考了无数次了)

进程:操作系统资源分配的基本单位;
线程:调度的基本单位;

第二题:进程通信的方式(也是考了无数次了)

八种。信号、信号量、消息队列、无名管道、有名管道、高级管道、共享内存、套接字

第三题:多线程的实现方式(考了很多次)

参考链接:java多线程的6种实现方式详解

多线程的实现方式主要有两种:继承Thread类、实现Runnable接口

继承Thread类: 通过JDK提供的Thread类,重写Thread类的run方法即可,那么当线程启动的时候,就会执行run方法体的内容。
步骤:创建多个线程,指定线程名称

实现Runnable接口: 用接口的方式可以让我们的程序降低耦合度。Runnable接口中仅仅定义了一个方法,就是run。
步骤:创建线程任务,创建可运行类,lambda方式创建线程任务

使用内部类的方式:通过匿名内部类的方式,

定时器:JDK提供了Timer类来帮助开发者创建定时任务,另外也有很多的第三方框架提供了对定时任务的支持,比如Spring的schedule以及著名的quartz等等。

基于线程池:

第四题:线程安全怎么保证(考了很多次)

1、synchronized关键字,就是用来控制线程同步的。(synchronized锁的是括号里的对象,而不是代码,其次,对于非静态的synchronized方法,锁的是对象本身也就是this)

2、lock;lock是在java1.6被引入进来的,lock引入让锁有了可操作性,需要手动的获取锁和释放锁,甚至可以中断获取以及超时获取的同步特性。

第五题:volatile和synchronized的区别

参考链接:volatile和synchronized的区别

线程安全的两个方面:执行控制和内存可见。
执行控制的目的是:控制代码执行(顺序)及是否可以并发执行;
内存可见控制的是:线程执行结果在内存中对其他线程的可见性。

volatile: 是类型修饰符,用来修饰被不同线程访问和修改的变量,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。

原理:当对volatile标记的变量进行修改时,会将其他缓存中存储的修改前变量进行清除,然后重新读取。

synchronized: 可以用来给对象和方法或者代码块加锁,当锁定一个方法或者一个代码块时,同一时刻最多只能有一个线程执行这段代码。当两个并发线程访问同一个对象中的加锁同步代码块时,一个时间内只能有一个线程得到执行。

两者的区别:
1、volatile本质上是在告诉jvm,当前变量在寄存器中的值是不确定的,需要从主存中读取;而Synchronized是直接锁定,只能当前线程进行访问,其他线程阻塞。

2、使用范围: volatile只能使用在变量级别,而synchronized可以使用在变量、方法和类。

3、原子性: volatile只能实现变量的修改可见性,而synchronized可以保证变量的修改可见性和原子性;

4、线程阻塞: volatile不会造成线程的阻塞,而syn可能会造成线程的阻塞;
(就相当于:volatile告知高速上的汽车,当前行驶的路径在修路,让他切换路径;而syn是一辆一辆等着路修好再过)

5、编译器优化: volatile标记的变量不会被编译器优化;synchronized标记的变量可以被编译器优化

5、当一个域的值依赖于它之前的值时,volatile就无法工作了,

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值