当前位置: 首页 > news >正文

3 字节

进程与线程的区别

线程是轻量级进程,每个进程中都有唯一的主线程,主线程和进程是相互依存的关系。

  1. 进程是资源分配和拥有的基本单位;线程是系统调度的基本单位

  2. 进程拥有CPU 资源,内存资源,文件资源,句柄等;线程拥有程序计数器,寄存器,栈和状态字

  3. 切换情况:

  • 进程由操作系统切换,切换的过程是用户态到内核态再到用户态。进程切换时要设置新调度进程的CPU 环境,进程切换虚拟地址空间,切换内核栈和硬件上下文,CPU 高速缓存失效,页表切换开销很大
  • 线程也是由操作系统切换的,切换的过程也是用户态到内核态再到用户态,线程切换时,只需要保存和设置程序计数器,少量寄存器和栈的内容,开销很小
  1. 并发性:不同进程之间切换实现并发,各自占有 CPU;一个进程内多个线程并发执行

  2. 进程间通信需要借助操作系统;线程可以直接读写进程数据段进行通信。

进程的调度算法?如何选择进程调度算法?进程的状态?

  • 调度算法:先来先服务,短作业优先,高响应比优先,优先级 (抢占/非抢占)

* 高响应比有限:算法折中,长短作业兼顾,时间分配比较均匀;缺点是每次计算响应比都要花费一定的时间。
(等待时间+运行时间)/运行时间

  • 进程状态:
    image

怎么判断进程的切换

程序中内存的分配,堆区和栈区?成员变量放在哪

  • 从高地址向低地址:栈,堆,全局/静态存储区,常量存储区,代码区

  • 栈:在执行函数的时候,函数内局部变量的存储单元都可以在栈上创建,函数执行结束这些存储单元会被自动释放,栈内存分配运算内置于处理器的指令集中,效率高,但分配内存有限

  • 堆:是new 分配内存块,是由我们自己去控制他的创建和释放。

成员变量放在堆内存中,局部变量放在栈中

堆和栈的区别:

排序及时间复杂度

O(n2)

  1. 冒泡
  2. 插入
  3. 选择

O(nlogn)

  1. 快排
  2. 归并
  3. 堆排

多线程怎么保持同步

多线程:程序中包含多个执行单元,一个程序可以同时运行多个不同的线程执行不同的任务。可能是并发,也可能是并行,无法确定。

多线程同步:避免多个线程共享一段资源可能会造成冲突

  1. 信号量

单例模式,懒汉式和饿汉式,怎么解决懒式线程安全的问题?lock()怎么加锁

单例模式:在整个程序的生命周期内,只会创建一个实例,只能new 一次。比如很多地方可能都需要使用到配置文件的内容,那么很多地方都会去创建Config 的实例,这样就会导致有很多Config实例,在配置文件内容很多的时候会有严重的内存浪费。

  • 懒汉式:只有在需要使用这个实例的时候,才会创建
  • 饿汉式:在程序最开始就创建实例,需要的时候直接调用
class A{
public:static A& getInstance(); // 全局的获取实例的静态方法
private:A(); //禁止外部构造~A(); //禁止外部析构A(const A&a) = delete;// 禁止拷贝构造const A &operator = (const A &a) = delete;//禁止外部赋值操作/*
安全:static A* getInstance()
private:static A *a_ == nullptr;static std::m_mutex;
*/
}
A:: A* getInstance()
{if(a_ == nullptr){std::lock_guard<std::mutex>lock(mutex);if(a_ == nullptr){a_ = new A();}}return a_;
}

构造函数是 private,因为在整个主程序中,单例模式的对象只会被创建一次,整个程序执行过程中,都使用同一个对象;
成员是 static 这个类型的指针,保存单例对象,需要设置为全局的

final 作用

  1. 将类标记为 final,那这个类就不能被继承
  2. 将方法标记为 final,无法在子类中重写该方法。保证一些关键的函数不会被修改。

什么要进行分页和分段,分页和分段有什么好处

管理虚拟地址和物理地址之间的映射关系。

关系型数据库和非关系型数据库

深拷贝和浅拷贝

死锁?条件?如何避免死锁?预防死锁

资源分配不合理,多个进程竞争同一个资源产生的僵局。

  • 条件:
  1. 互斥
  2. 请求和保持
  3. 环路等待
  4. 不可剥夺
  • 预防死锁:破坏死锁条件
  1. 资源一次性分配 (请求)
  2. 可剥夺
  3. 资源有序分配(循环等待)
  • 避免死锁:银行家算法

查看文件中关键词出现次数

// grep 多个相同统计一次 ; 
// grep -o 多个相同,统计多次
grep -o 'Keyword' a.txt | wc -lgrep -o "Keyword1\Keyword2\Keyword3" a.txt | wc -l // 多个字符串

匿名函数用来干嘛的(Lambda)

不为函数创建函数名,想在哪里用就在那里直接写。

  • lambda 内部函数体默认不能使用函数外部的变量。所以需要用[]捕获列表,值捕获和引用(&)捕获。

数据库搜索引擎的区别

MyISAM:不支持事务,不支持外键,访问速度快,不支持事务。select,insert多的场景使用。只支持表级锁,不支持行级锁
InnoDB:支持事务,支持事务回滚,提交,崩溃恢复。会占有更多的磁盘空间保存索引和数据。支持表级锁和行级锁

五层模型/七层模型

  • 七层 :应用层,表示层,会话层,传输层,网络层,数据链路层,物理层
  • 四/五层:应用层,传输层,网络层,网络接口层(数据链路层,物理层)

IP

解压文件?把任务挂在后台? 查找文件

tar -zcvf test.tar.gz file1 dir 2 // 压缩file1 和 dir2 到 test.tar.gztar -zxcf test.tar.gz //解压tar -ztvf test.tar.gz //列出压缩文件内容//挂在后台[command] & 
bg
tmuxjobs -l// 列出后台进程
kill -9 [jobid]// 查找文件 find 是根据文件属性找, grep 根据文件内容找
find path 文件名
grep 参数 "内容" 在什么文件下查找
//参数
-r // 递归查找子目录中的文件
-v // 查找不匹配的
-n //显示内容所在的行号
-i // 忽略大小写
// 

连表查询

  1. 左连接
  2. 右链接
  3. 内连接
left join on
right join on 
inner join on

group by前后的筛选用什么

前 where, 后 having。 where 可以对表筛选,筛选用哪些数据来分组,对分组后的数据进行筛选用 having

const 和 define区别? 在内存中是怎么存的

网页状态码

强缓存和协商缓存

输入一个网址会发生什么

  1. 域名解析。浏览器查找域名对应的 IP

  2. 浏览器得到 IP,就向对应的 服务器发起 HTTP 请求

  3. 服务器收到请求进行处理

  4. 服务器将响应结果,html代码 返回给浏览器

  5. 浏览器得到 html代码,请求 html 中的资源

  6. 浏览器将页面渲染呈现给用户

cookie:服务器发给客户端浏览器一个通行证,之后每次发送请求都携带通行证

session:记录在服务器端,记录客户端信息,相当于是一个用户表,之后每次请求,服务器去查询用户表

  • 区别:
  1. cookie 存在客户端,session存在服务器,session 更安全。

  2. cookie 可以设置有效时间,session 只在一次会话内有效,会话结束是,session清除

  3. cookie 保存的数据小于 4kb,一个站点最多村 20 个cookie, session保存没有限制,但是不适宜太大,会影响服务器性能

  4. cookie 存的是字符串,session可以存任何类型

数据库索引

linux 查看磁盘

df -h
fdisk -l:磁盘类型,大小,型号,扇区3

sql 注入

是网站在数据库层面的漏洞,产生原因是程序对用户输入数据的合法性没有判断和处理好导致攻击者可以使用非法 sql 语句对数据库进行访问和修改。

优化:

  1. 对输入的内容进行验证,避免出现多余的sql

  2. 在访问数据库的时候,需要填入数据的地方可以使用参数来传递值,这样数据库先完成 sql 编译,然后套用参数运行,这样一些破坏性的指令就不会在数据库上运行

应用层哪些协议基于 TCP?哪些基于 UDP?

  • TCP:对准确性要求高
    HTTP,FTP(文件传输协议),SMTP(发送电子邮件)

  • UDP(实时应用,需要速度,对准确性要求不高)

  1. DNS,DHCP(动态分配 IP)

Redis 的数据类型

http://www.wxhsa.cn/company.asp?id=3382

相关文章:

  • Springcloud Alibaba(一)
  • 111111111
  • 202204_DASCTF_SimpleFlow
  • 使用 Winscope 跟踪窗口转换
  • 25/9/12(补)
  • 深入解析:“纳米总管”——Arduino Nano 的趣味生活
  • 洛谷题目难度系统优化
  • 202112_摆烂杯_WhatAHack!
  • 少儿 500 常用汉字 字帖
  • Ubuntu 安装 gcc
  • Redis常见性能问题
  • 3 线性模型
  • 详细介绍:七彩喜智慧养老:用科技温暖晚年,让关爱永不掉线
  • P3522 [POI 2011] TEM-Temperature
  • 202105_风二西_SQL基于时间盲注
  • 实用指南:【C++】list容器的模拟实现
  • windows系统缺失DLL库文件下载方法
  • 更为通用的决策单调性
  • 一文读懂 PHP PSR 接口 PSR-3、PSR-7、PSR-11、PSR-15 完整指南
  • 2025模拟赛Round9
  • NOIP2025模拟赛19
  • Qt/C++开发监控GB28181系统/公网对讲/代码实现28181语音对讲/采集本地麦克风数据/支持udp和tcp模式
  • P3195 [HNOI2008] 玩具装箱 (斜率优化)
  • DBeaver使用指南
  • sh-2025模拟赛
  • C++ day7 - 指南
  • 读人形机器人11娱乐领域
  • Java 注解机制全解析:原理、用途与框架中的实战
  • 模板集
  • 暑假