2023-8-20 CVTE视源股份后端开发实习一面

自我介绍

操作系统
1 有了解进程和线程的特点吗

2 在linux层面的话是怎么创建一个进程或者一个线程的(具体的系统调用的命令)
答:
3 如果是java层面讲,怎么去启动一个线程,要实现哪些方法呢
Thread类实现run()方法的临界区代码,这个是公共方法,所有线程都会执行这些方法。

4 如果我希望在线程内部实现一个逻辑,在线程外部拿到一个结果
使用volatitle关键字

5 有没有其他方式呢?比如在一个进程内实现一个计算,在主进程拿到这个结果。
线程通信
6 能具体展开一下吗
管道
共享内存
消息队列,
信号量
socket通信
7 java中有没有提供这样类似的操作呢,future模式有了解过吗

8 linux里面的kill命令用到的是什么通信方式呢

9 在java主进里面启动了A, B, C, D四个线程,这A, B, C线程执行完后,换到D线程去执行,对于这样的逻辑有什么实现方式呢?
这个问题等价于 java主线程要在前面3个线程执行完后执行
方式一:先三个线程一次start,然后再给这三个线程依次调用join函数,等这三个线程执行完毕,第四个线程自然就会开始执行,这是由join操作的特性决定的。
join的内部机制还是由wait方法实现,只不过这里的wait方法是Thread对象的的wait方法,然后在nvm内部会调用notify/notifyAll方法唤醒

int count = 10;List<Thread> workers = new ArrayList<>();for(int i = 0; i < count; i++) {Thread worker = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("执行子线程");}});worker.start();workers.add(worker);}for(int i = 0; i < count; i++) {workers.get(i).join();}System.out.println("执行主线程");

方式二:(自实现)
锁的方式:
先设置一个<K, V>键值对,表示一把锁,A, B, C, D这四个线程都能拿到这把锁,开始Value为0,当前面四个线程取锁的时候都会进行判断,当V的值小于3的时候,A, B, C三个线程可以拿到锁,D不能,当V>=3时候,刚好相反;A, B, C在快要执行完的时候会依次对这个键值对进行自增操作,当三个线程都执行完毕后,D线程就可以执行了。
方式三:
java.util.concurrent包下的CountDownLatch和CyclicBarrier也可以实现
CountDownLatch方法实现如下:
让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒
CountDownLatch主要有两个方法,当一个多个线程待用await方法时,调用线程会被阻塞,其他线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞)
当计数器的值变为零时,因调用await方法被阻塞的线程会被唤醒,继续执行

public class CountDownLatchDemo {public static void main(String[] args) {CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 1; i <= 6; i++) {new Thread(() -> {System.out.println(Thread.currentThread().getName() + "\t 上完自习,离开  ‍");countDownLatch.countDown();}, String.valueOf(i)).start();}try {countDownLatch.await();} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName()+"\t 班长最后关门离开自习室");}
}

事实上countdown的底层实现机制和方法二是一样的。

CyclicBarrier方法实现如下:

package com.atguigu.coupon;import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;public class TestLock {public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> System.out.println("召唤神龙"));for (int i = 1; i <= 7; i++) {final int temInt = i;new Thread(() -> {System.out.println(Thread.currentThread().getName() + "\t 收集到第" + temInt + "龙珠");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}, String.valueOf(i)).start();}System.out.println("aaaaaaaaaaaaaa");}
}

但是该方法代码存在问题,所以不推荐
aaaaaaaaaaaaaa
1 收集到第1龙珠
2 收集到第2龙珠
3 收集到第3龙珠
4 收集到第4龙珠
5 收集到第5龙珠
6 收集到第6龙珠
7 收集到第7龙珠
召唤神龙

CyclicBarrier 和 CountDownLatch 的区别
1.回环:CyclicBarrier 可以回环,重新计数。CountDownLatch 只能一轮。
2.计数器:CyclicBarrier 的计数器自己维护递减, CountDownLatch 的计数器维护则是交给使用者。
3.阻塞线程:CyclicBarrier 阻塞的是自身,当到达屏障后,所有被阻塞的线程一起释放。CountDownLatch 可以指定阻塞线程。
10 linux中一个进程的退出的退出码是哪个指令
https://zhuanlan.zhihu.com/p/63424197
11 或者僵尸进程的概念的和出现原因
原因:即子进程先于父进程退出后,子进程的PCB需要其父进程释放,但是父进程并没有释放子进程的PCB,这样的子进程就称为僵尸进程,僵尸进程实际上是一个已经死掉的进程。
一个进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)
那么可能有人会问,为什么父进程不可以监听子进程的exit命令,然后再释放子进程的PCB呢?
一个进程可能会产生很多子进程。这些子进程执行完毕后会发送一个Exit信号然后死掉。这个Exit信号需要被父进程所读取。父进程随后调用wait命令来读取子进程的退出状态,并将子进程从进程列表中移除。但若父进程未能读取到子进程的Exit信号,则这个子进程不会从进程列表中删掉。
建议好好看看下面这篇知乎文章,讲解的很全面:
https://zhuanlan.zhihu.com/p/441204477
12 一个进程的生命周期会有很多种状态,你平常会用什么工具去查询这些状态呢?
ps命令:查看os进程的瞬时占用资源的情况
top命令:如何去动态跟踪指定进程的资源使用情况呢?
top和ps的区别
watch命令:watch命令 以周期性的方式执行给定的指令,指令输出以全屏方式显示;
所以watch+ps可以实现实时查看特定进程的活跃状态
13 watch命令有听说过吗(12题没答出来后,面试官给的提示)

14 虚拟内存解决了什么问题?有什么作用
(1)解决内存空间资源不足的问题,逻辑上扩充了内存,
(2)提高了资源利用率,提高了系统的整体性能(在内核参数设置合理的情况下);
(3)
15 除了逻辑上扩展内存

16 从分配虚拟内存到具体的物理内存过程中,操作系统做了什么事情

17 在内存不足的情况下,操作系统会把哪些数据给删除呢
答:肯定是根据淘汰策略决定内存中哪一个

18 讲讲LRU算法

19 如果要新增页框,就LRU淘汰策略来看,是放到哪里呢
如果页框用链表连接起来的话,且淘汰是从链尾开始的,那么增加页框时肯定是放到链首;

20 你有了解过linux中怎么查看进程的虚拟内存的布局(比如查看哪一块区域属于动态库区域)
Linux内核属于微内核的范畴,内核控制计算机的硬件资源,运行在特权模式;用户态应用程序运行在普通用户模式,无法直接访问硬件资源,必须依托于内核提供的资源,如CPU资源、Memory资源、I/O资源等。
  Linux采用沙箱机制,每一个进程运行在独立的虚拟地址空间,最大限度避免单个进程异常导致整个系统崩溃。
  每一个进程的虚拟地址空间分为内核虚拟地址空间和用户虚拟地址空间两部分,内核虚拟地址空间为内核态代码和内核堆栈,所有进程的内核虚拟地址空间是复用的;用户虚拟地址空间则是各进程的代码段、数据段、BSS段、mmap段(动态加载库以及各库运行数据段、运行栈等)、堆、栈、环境变量等信息。
  Linux中可以通过cat /proc//maps命令查看指定进程的用户虚拟地址空间的映射,也可以通过pmap -x 查看,该命令实质上是基于/proc//maps实现的。
21
java
14 java中的一些垃圾回收算法
标记清除
标记整理
内存复制

15 这三种算法的工作模式有什么差别

16 了解CMS垃圾回收器吗,能讲解一下CMS的并发标记思路吗
答:基本答非所问
17 垃圾回收器除了CMS,有没有运行态的垃圾回收器,就是实时性比较强的垃圾回收器
其实就是CMS,parallel是实时性比较强的收集器

G1是兼顾系统吞吐量和用户响应时间的一种垃圾回收器
18 基于引用的垃圾回收器
19

数据库
1 mysql的索引采用什么数据结构实现的呢
B+索引和Hash索引的区别
2 mysql的索引类型
主键/唯一索引
聚集索引和覆盖索引

3 mysql的锁机制
(1)在读已提交的隔离级别下更新一个字段,在更新操作提交之前,再插入一条数据,会上什么锁?答:行锁
(2)如果在(1)的条件下,调用查询会枷锁吗啊?答:如果是普通的不加for update,lock in share mode等关键字,那么不会上锁,但是如果加了就会加锁
(3)这个时候在可重复读的前提下,怎么保证每次读视图是一样的
4

计算机网络
1 在局域网内,访问外部网络的一个网站,会用到哪些协议,还有流程
网络层:Arp协议,ICMP协议(查询差错与报告),IP协议
传输层:TCP/UDP, BGP,
应用层:HTTPS,SSL协议,DNS协议,会用到NAT地址转换,将私有地址转换为公网ip

2 ARP查询的是哪台主机的MAC地址
答:局域网内网关的mac地址(其实应该分情况)
答案:如果是在源主机,查询的网关的ip地址对应的mac地址,如果是在目的ip地址的局域网内,查询的是目的主机的mac地址;如果是在传输过程中,查询的是下一跳路由器的mac地址

RabbitMQ
1 怎么保证他的可靠性处理
消息丢失
重复消费
垃圾消息

反问:
1 你们公司的主营业务
做教育平板,在软件上会镶嵌很多算法模块,

2 我去了是搞python是吗?
对,java不是主要部分

3 多久出结果呢
3 - 5工作日,通过会发邮件
4 二面会刷题吗
主要是口头问题和架构问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/120903.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

tmux和vim

本文旨在对y总的Linux基础课做学习记录&#xff0c;指令较多&#xff0c;方便日后查找。 参考视频&#xff1a;Linux基础课 参考教程&#xff1a;Linux教程 1 tmux 1.1 功能&#xff1a; ㅤㅤ&#xff08;1&#xff09;&#xff1a;分屏 ㅤㅤ&#xff08;2&#xff09;&…

L2-005 集合相似度

给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;Nc​/Nt​100%。其中Nc​是两个集合都有的不相等整数的个数&#xff0c;Nt​是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。 输入格式&#xff1a; 输入第一行给出一个正整数N…

TSINGSEE青犀老旧小区升级改造AI+视频监控方案

一、背景与需求 近年来&#xff0c;政府高度重视城镇老旧小区改造工作&#xff0c;强调要加快老旧小区改造&#xff0c;不断完善城市管理和服务&#xff0c;彻底改变粗放型管理方式&#xff0c;让人民群众在城市生活得更方便、更舒心、更美好。老旧小区升级改造面临以下问题&a…

Kotlin中使用ViewBinding绑定控件并添加点击事件

文章目录 效果1、加入依赖2、与控件进行绑定在 Activity 中使用视图绑定 3、监听控件 效果 实现源码 class MainActivity : AppCompatActivity() {lateinit var binding:ActivityMainBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstan…

计算机毕业设计 基于SpringBoot大学生创新创业项目管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

【安装tensorflow-CPU版本】

一、安装目的二、安装过程三、总结 一、安装目的 使自己的jupyter能用tensorflow 二、安装过程 首先打开anaconda prompt 接着输入conda list 查看自己是否安装了tensorflow 在 Python 中使用 pip 工具来升级 pip 自身并指定了使用清华大学的镜像源进行安装 python -m pip …

DoLa:对比层解码提高大型语言模型的事实性

DoLa&#xff1a;对比层解码提高大型语言模型的事实性 摘要1 引言2 方法2.1 事实知识在不同层级上演化2.2 动态早期层选择2.3 预测对比 3 实验3.1 任务3.2 实验设置3.3 多项选择3.3.1 TruthfulQA&#xff1a;多项选择3.3.2 FACTOR&#xff1a;维基、新闻 3.4 开放式文本生成3.4…

开始学习Go编程

探索Go编程中的语法、数据类型和控制流 Go&#xff0c;又称为Golang&#xff0c;因其简单性、性能和效率而广受欢迎。在本文中&#xff0c;我们将深入研究构成Go编程语言基础的基本概念。从理解其语法和数据类型到掌握控制流和函数&#xff0c;我们将为您提供启动Go编程之旅所…

利用JMeter生成加密数据写入数据库

有部分数据直接插入数据库是不可以的&#xff0c;需要加密处理&#xff0c;例如密码都指定为加密后的数据字符串。今天我们来学习一下如何利用JMeter生成加密数据并写入MySQL数据库中。如何JMeter如何连接数据库&#xff0c;可以看我之前写的随笔&#xff0c;JMeter接口测试-JD…

使用Ubuntu虚拟机离线部署RKE2高可用集群

环境说明 宿主机和虚拟机的OS与内核相同&#xff0c;如下 $ cat /etc/issue Ubuntu 22.04.3 LTS \n \l$ uname -sr Linux 6.2.0-34-generic虚拟化软件版本 $ kvm --version QEMU emulator version 6.2.0 (Debian 1:6.2dfsg-2ubuntu6.14) Copyright (c) 2003-2021 Fabrice Be…

Linux之线程池

线程池 线程池概念线程池的应用场景线程池实现原理单例模式下线程池实现STL、智能指针和线程安全其他常见的各种锁 线程池概念 线程池&#xff1a;一种线程使用模式。 线程过多会带来调度开销&#xff0c;进而影响缓存局部性和整体性能。而线程池维护着多个线程&#xff0c;等待…

基于机器视觉的手势检测和识别算法 计算机竞赛

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f9ff; 更多资料, 项目分享&#xff1a; https://gitee.com/dancheng…

【代码随想录】算法训练计划03

1、203. 移除链表元素 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5] 思路&#xf…

linux进程间通信

文章目录 前言一、管道通信1、进程间通信目的2、进程间通信分类3、匿名管道通信3.1 匿名管道通信介绍3.2 匿名管道通信3.3 匿名管道读写规则3.4 匿名管道特点3.5 站在文件描述符角度-深度理解管道3.6 站在内核角度-管道本质 4、进程池练习5、命名管道6、匿名管道与命名管道的区…

2023NOIP A层联测17 游戏

题目大意 有一个 n m n\times m nm的网格图&#xff0c;开始时有三种格子&#xff0c;分别为障碍&#xff0c;棋子和空格。 小 A A A和小 B B B在这个网格图上玩游戏&#xff0c;双方轮流行动&#xff0c;小 A A A先行动。每次行动中&#xff0c;当前玩家选择一枚棋子移动&a…

智慧公厕:细致入微的城市贴心服务与便捷方便的生活配套

在现代城市生活中&#xff0c;公厕作为重要的城市基础设施&#xff0c;一直是城市发展的关键环节之一。然而&#xff0c;传统的公厕常常存在着设施陈旧、管理不善和卫生状况差等问题&#xff0c;给市民的生活品质和城市形象带来了一定的影响。为了提供更好的城市公厕服务&#…

Python 框架学习 Django篇 (六) 数据表关联、ORM关联

在后端服务器开发中&#xff0c;特别是前后端分离的架构中数据库是非常重要的&#xff0c;后端主要就是负责管理数据&#xff0c;而我们经常使用的mysql、oracle 都是关系型数据库&#xff0c;什么是关系型数据库&#xff1f;就是建立在关系模型基础上的数据库&#xff0c;而最…

Sql Server中的表组织和索引组织(聚集索引结构,非聚集索引结构,堆结构)

正文 SqlServer用三种方法来组织其分区中的数据或索引页&#xff1a; 1、聚集索引结构 聚集索引是按B树结构进行组织的&#xff0c;B树中的每一页称为一个索引节点。每个索引行包含一个键值和一个指针。指针指向B树上的某一中间级页&#xff08;比如根节点指向中间级节点中的…

超全面测评!2023年最常用的15款原型设计工具

在互联网和软件行业中&#xff0c;原型设计是产品经理、交互设计师以及运营人员等职位必不可少的一门技能。原型设计工具的重要性也是人尽皆知&#xff0c;这都是因为原型设计工具是帮助设计者表达产品想法、功能设定及流程逻辑的最佳方式。 今天就为大家带来原型设计工具的相…

「林曦的亲子美育」讲讲关于阅读的那些事儿

「林曦的亲子美育」是“林曦的小世界”2023年策划的一档新栏目。林曦老师作为一个“小男生的妈妈”,在这些年分享了许多关于亲子教育的心得&#xff1a;以“美”作为连接和最高标准&#xff0c;会护持着小朋友的选择和人生。教育是一个生活的过程。做一餐饭、读一本书、看一张画…