- 博客(32)
- 收藏
- 关注
原创 JUC框架
java.util.concurrent 包的核心类是AbstractQueueSychronizer,这是一个同步器+阻塞锁的基本架构,用于控制加锁和释放锁,并且在内部维护一个FIFO的线程的等待队列,包中的锁,屏障等同步器多数是靠它实现的这是一个可以由线程以独占方式拥有的同步器,这个类为创建锁和相关同步器提供了基础 用虚拟队列的方式来管理线程中锁的获取与释放,同时也提供了各种情况下线程中断。这个类提供了默认的同步实现,但是获取锁和释放锁的实现被定义为抽象方法,由子类实现。这样做的目的是使得开发人员
2021-03-13 22:29:31
403
原创 多道批处理系统与分时系统:并发
多道批处理系统简单批操作系统I/O设备的速度比处理器要慢,大部分时间用来等待I/O设备从文件中取数据或者将数据写入文件。当一个作业需要等待I/O的时候,处理器可以专区处理另外一个不需要等待I/O的作业。multitasking分时系统多个用户分享处理时间 多个用户从终端同时访问系统,操作系统控制每个用户程序以很短是的时间为单位交替进行。 因此,有n个用户同时请求服务,如果不计操作系统开销,则每个用户将获得计算机有效能力的1/n多道批处理系统与分时系统对比:多道批处理系统:处理器..
2021-03-11 11:31:33
1700
原创 多对称处理器和多核组织结构:并行
计算机被是为一台顺序执行的机器,处理器按照顺序一条一条执行机器指令来完成程序的执行(去指令,区操作数,执行操作和保存结果)在微操级别,同一个时间内会产生多个控制信号。长期以来,指令流水线技术在一定程度上可以重叠取指令和执行操作的执行。这些都是并行执行的例子。三种常用的并行方法:多对称处理器 多核计算机 集群对称多处理器具有两个或两个以上性能相当的处理器 处理器共享内存和I/O设备,并且通过总线或者其他内部连接方式互连 共享对I/O的访问 所有处理器执行相同的功能(对称) 整个系
2021-03-11 10:56:29
585
原创 分级储存体系,高速缓存
问题考虑:容量(储存器),速度(储存器的速度要赶上处理器的速度),价格存取时间越快,单位(没比特位)成本越高; 容量越大,单位(每比特位)成本越低 容量越大,存取速度越慢
2021-03-11 10:04:49
656
转载 如何优雅的谈论HTTP/1.0/1.1/2.0
本文将涉及以下方面:HTTP协议 HTTP1.0 HTTP1.1 HTTP2.0 1.0和1.1和2.0之间的区别 HTTPSHTTP协议HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。是用于从WWW服务器传输超文本到本地浏览器的传输协议。默认使用80端口,HTTP客户端发起一个请求,建立一个到服务器指定端口(默认是
2021-03-10 09:49:54
248
转载 浅谈C++多态性
多态概念:一个借口,多种方法,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形状。 C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数 子类重新定义为override,或者称为重写 重写的话可以有两种,直接重写成员函数和重写虚函数,只有重写了虚函数的才能算作是体现了C++多态性 多态与非多态的实质区别就是函数地址是早绑定还是晚绑定。如果函数的调用,在编译器编译期间就可以确定函数的调用地址,并生产代码,是静态的
2021-03-07 00:57:43
323
原创 C++中volatile关键字
volatile介绍volatile 限定符告知计算机,代理(而不是变量所在的程序)可以改变该变量的值。通常,它被用于硬件地址以及在其他程序或者同时运行的线程中共享数据。例如,一个地址上可能储存着当前的始终时间,无论程序做什么,地址上的值都随着时间的变化而变化。或者一个地址用于接受另一台计算机传入的信息。volatile的语法和const一样volatile int locl;//locl是一个易变的量volatile int* ploc//ploc是一个指向易变位置的指针
2021-03-07 00:01:18
340
转载 const C++用法
const关键字的作用(1)作用:1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,以后就没有机会改变他了;2)对指针而言,可以指定指针本身为const,也可以指定指针所指的数据为const,或二者同时指定为const;int *const p; //指向整形的常量指针 ,它不能再指向别的变量(p的值不能改变),但指向(的变量)的值可以修改。 const int * p; //指向整形常量的指针,它所指向(的变量)的值不可以更改 const int * c
2021-03-06 23:04:49
108
转载 CPU,内核,寄存器,缓存的作用和他们之间的联系
CPU:中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit)。它的功能主要是解释计算机指令以及处理计算机软件中的数据。中央处理器主要包括运算器(算术逻辑运算单元,ALU,Arithmetic Logic Unit)和高速缓冲存储器(Cache)及实现它们之间联系的数据(Data)、控制及状态的总线(Bus)。它与内部存储器(Memory)和输入/输出(I/O)设备合称为电子计算机三大核..
2021-03-06 04:47:10
1462
转载 动态存储区、静态存储区、堆和栈的区别
C/c++程序经过编译连接后形成的二进制映像文件,这文件包含:栈,堆,数据段(只读数据段,已经初始化读写数据段,未初始化数据段即BBS)和代码段组成.1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。堆允许程序在运行时动态地申请某个大小的内存。一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。注堆和数据结构中的堆栈不一样,其类是与链表。3.程序代码区:存放函数体的二进制代码。所有的语句编译后会生成C...
2021-03-06 04:18:55
623
转载 函数调用方式与栈原理
内存模型内存分为物理内存和虚拟内存,物理内存对应计算机中的内存条,虚拟内存是操作系统内存管理系统假象出来的。由于这些不是我们本文的重点,下面不做区分。有不清楚这些概念的同学,可以给我留言或者在线询问。计算机运行程序本质上就是对内存中的数据的操作,通俗地来说,就是将内存条某些部分的数据搬进搬出或者搬来搬去,其中“搬进搬出”是指将内存中的二进制数据搬入cpu寄存器及运算器中进行相应的加减运算或者将寄存器中的数据搬回内存单元中,而“搬来搬去”是指将内存中的数据由这个位置搬到另外一个位置(当然,一般不是直接
2021-03-06 03:16:38
239
转载 C++中指针和引用的区别
指针和引用的定义和性质区别:指针:是一个变量,变量储存的是一个地址,指向内存的一个储存单元引用:本质上和原来的变量是同一个东西,只不过是原变量的一个别名。int a = 1;int *p = &a;int a = 1;int &b = a;上面定义了整型变量a和指针变量p,该指针变量指向a的存储单元,p是a储存单元的地址。下面2句定义了一个整形变量a和这个整形a的引用b,事实上a和b是同一个东西,在内存占有同一个存储单元。...
2021-03-06 02:16:28
138
转载 如何成为一名合格的 C/C++ 开发者?
C/C++ 的当前应用领域通常情况下,C++ 可以看成是 C 的一个超集,在古典时期,可以认为 C++ 就是C with classes,语法层面来上来看,大多数 C++ 语法还是与 C 基本一致的 C 语言目前主要用于像操作系统一类偏底层的应用开发,包括像 Windows/Linux 这样的大型商业操作系统,以及嵌入式操作系统、嵌入式设备上的应用。 主要优先考虑程序执行效率和生成的可执行文件的体积(C 代码生成的可执行文件体积相对更小) C++ 的应用领域目前有三大类,第一类就是我们目前见到的.
2021-03-06 00:59:20
183
原创 数据结构与算法
HashTableHash表实现(拉链和分散地址)Hash策略常见的有哪些?STL中hash_map扩容发生什么?(1) 创建一个新桶,该桶是原来桶两倍大最接近的质数(判断n是不是质数的方法:用n除2到sqrt(n)sqrt(n)范围内的数) ;(2) 将原来桶里的数通过指针的转换,插入到新桶中(注意STL这里做的很精细,没有直接将数据从旧桶遍历拷贝数据插入到新桶,而是通过指针转换)(3) 通过swap函数将新桶和旧桶交换,销毁新桶。常见的散列函数(哈希函数)有:取模,将关键...
2021-03-05 05:44:57
148
1
转载 快速排序详解
理解原理快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。这种思路就叫做分治法。每次把数列分成两部分,究竟有什么好处呢?假如给定8个元素的数列,一般情况下冒泡排序需要比较8轮,每轮把一个元素移动到数列一端,时间复杂度是O(n^2)。而快速排序的流程是什么样子呢?如图所示,在分治法的思想下,原数列在每一轮被拆分成两部分,每一部分在下一轮又分别被拆分成两部分,直到不可再分为止。这样一共需要多少轮呢
2021-03-05 05:27:38
530
1
转载 AVL树理解
平衡二叉树平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。平衡因子通过“平衡因子”来判断一颗二叉树是否符合高度平衡。对于AVL树的每一个结点,平衡因子是它的左子树高度和右子树高度的差值。只有当二叉树所有结点的平衡因子都是-1, 0, 1这三个值的时候,这颗二叉树才是一颗合格的AVL树。...
2021-03-05 03:40:49
269
1
转载 红黑树的原理和实现
二叉树的缺陷,退化成链表的时候,几乎成为线性,不平衡,从而诞生了红黑树红黑树满足二叉树的基本特性,同时还有下面的特性:节点是红色或是黑色的 根节点是黑色的 每个叶子的节点都是黑色的(NIL节点) 红色节点的两个子节点都是黑色(不能有连续的红色节点) 任意节点到叶子节点的所有路径都包含相同数目的黑色节点从而保证了红黑树的自平衡,红黑树从根到叶子的最长路径不会超过最短路径的两倍。插入和删除节点的时候,红黑树的规则有可能被打破,如下图:因此,需要变色和旋转..
2021-03-05 03:07:44
420
1
原创 MySQL数据库面试知识整理
知识大纲熟悉基本 SQL 操作包括增删改查(insert、delete、update、select语句),排序 order,条件查询(where 子语句),限制查询结果数量(LIMIT语句)等 稍微高级一点的 SQL 操作(如Group by,in,join,left join,多表联合查询,别名的使用,select 子语句等) 索引的概念、索引的原理、索引的创建技巧 数据库本身的操作,建库建表,数据的导入导出 数据库用户权限控制(权限机制) MySQL的两种数据库引擎的区别 SQL 优化技
2021-03-05 01:35:10
152
2
原创 理解数据库中的事物
什么是事务?事务是由一步或几步数据库操作序列组成逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行。程序和事务是两个不同的概念。一般而言:一段程序中可能包含多个事务。(说白了就是几步的数据库操作而构成的逻辑执行单元)为什么需要有事务了解事务之前,先来看看数据库为什么需要有事务,假设没有事务会有什么影响?举一个转账的例子,假设你朋友向你借10000元,你打开APP,乐呵呵的把钱转了,你的卡里已经少了10000元,但是你打电话给朋友时,你朋友说没有收到啊,你这时候肯定卖银行怎么不靠谱,没到账
2021-03-05 01:08:09
199
1
原创 二叉树的遍历
二叉树的遍历主要有三种:(1)先(根)序遍历(根左右)(2)中(根)序遍历(左根右)(3)后(根)序遍历(左右根)中序二叉树的中序遍历就是首先遍历左子树,然后访问当前节点,最后遍历右子树。左-中-右结果:[5,10,6,15,2]1、递归法这是思路最简单的方法,容易想到并且容易实现。递归的终止条件是当前节点是否为空。首先递归调用遍历左子树,然后访问当前节点,最后递归调用右子树。代码如下:/*** 递归*/public List<Int...
2021-03-05 00:35:16
170
1
转载 linux下常用命令查看端口占用
第一种:lsof -i:端口号第二种:netstat -nltp | grep 端口号-a:显示本机所有连接和监听地端口-n:网络IP地址的形式,显示当前建立的有效连接和端口-r:显示路由表信息-s:显示按协议的统计信息-v:显示当前有效的连接-t:显示所有TCP协议连接情况-u:显示所有UDP协议连接情况-i:显示自动配置端口的状态-l:仅仅显示连接状态为listening的服务网络状态-p:显示pid/program nameTCP连接的几..
2021-03-05 00:03:38
3092
1
原创 操作系统知识点和常考面试题
进程和线程-分别的概念 区别 适用范围 它/们分别的通讯方式 不同通讯方式的区别优点 进程是资源分配的基本单位,线程是cpu调度,或者说是程序执行的最小单位。但是并不是说CPU不在以进程为单位进行调度,虽然在某些操作系统中是这样。同一个进程中并行运行多个线程,就是对在同一台计算机上运行多个进程的模拟。 进程有独立的地址空间,而同一进程中的线程共享该进程的地址空间。比如在linux下面启动一个新的进程,系统必须分配给它独立的地址空间,建立众多的数据表来维护它的代码段、堆栈段和数据段,这是一种非常昂贵..
2021-03-04 07:02:38
341
1
转载 进程的同步与通信,进程与线程同步的区别,进程与线程通信的区别
进程同步与互斥的区别?进程的同步方式有哪些?进程的通信方式有哪些?进程同步与通信的区别是什么?线程的同步/通信与进程的同步/通信有区别吗?在好多教材上(包括国内与国外的)也没有明确这些概念,现在对每个问题还没有准确的答案,下面将自己的理解记下来,以后再补充。参考资料:《操作系统教程》 孙钟秀主编 费翔林 骆斌 谢立参编 高等教育出版社《计算机操作系统》 何炎祥 李飞 李宁 编著 清华大学出版社(进程管理部分与《操作系统教程》中的类似)进程互斥、同步的概念进程互斥、..
2021-03-04 06:15:23
487
1
转载 C++ 后台开发面试时一般考察什么?
语言基础C++ 虚函数这是面试初、中级 C ++ 职位一个概率95%以上的面试题。一般有以下几种问法:在有继承关系的父子类中,构建和析构一个子类对象时,父子构造函数和析构函数的执行顺序分别是怎样的? 在有继承关系的类体系中,父类的构造函数和析构函数一定要申明为 virtual 吗?如果不申明为 virtual 会怎样? 什么是 C++ 多态?C++ 多态的实现原理是什么? 什么是虚函数?虚函数的实现原理是什么? 什么是虚表?虚表的内存结构布局如何?虚表的第一项(或第二项)是什么? 菱形继承
2021-03-04 04:59:45
705
1
转载 阻塞非阻塞模式与同步异步
作者:萧萧链接:https://www.zhihu.com/question/19732473/answer/241673170来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。IO 概念区分四个相关概念:同步(Synchronous) 异步( Asynchronous) 阻塞( Blocking ) 非阻塞( Nonblocking)进程间的通信是通过 send() 和 receive() 两种基本操作完成的。具体如何实现这两种基础操作,存在..
2021-03-04 02:14:40
134
1
转载 synchronized和volatile的区别,以及相关面试题(Java)
先从一道笔试题开始:9. volatile关键字是否能保证线程安全?() 答案:不能synchronized和volatile的区别synchronized是一个方法级别或块级别的访问限制修饰符,也就是可以放在方法前面也可以用在同步块上。它可以确保一个线程获得一个“禁区”的锁。也就是只有这一个线程拥有进入执行synchronized块的钥匙。如果其他的线程在同一时刻也想访问同步块这个“禁区”,那么他们就必须要等待现在在里边的那个线程出来后释放掉锁才可以进去。(这里你可以理解为排.
2021-03-04 01:54:01
2440
2
转载 并发详解(Java)
为什么要“并发”?既然聊并发,我们首先会思考为什么要引入这个技术。通常写程序,我们习惯用单线程串行的思维理解程序运行,并写业务逻辑。这样可以减少复杂度,也便于测试,往往当需要性能提升,我们才会想到使用并发。那么这个技术到底能够给我们带来什么呢。1.充分利用CPU资源多核处理器的广泛使用背景下,如果我们的程序还是单线程串行的运行,会对硬件资源浪费。比如有一个5内核的cpu,单线程对cpu的损耗不会超过1/5。这对硬件的使用明显是中巨大浪费。比如有一个8内核的CPU,单线程对CPU的损耗不.
2021-03-04 01:38:53
367
1
转载 Java之多线程优化与CPU、I/O之间的深入理解
引入在高并发的场景之下,Java经常使用到的技术就是多线程。而多线程的使用,到底是否真的能够有效地提高服务的性能和效率,就必须拿捏得当,从计算机操作系统,到服务代码,到应用上线之后的监测。得谨小慎微的行走~今天,就来介绍一下多线程,与系统CPU、核数,以及I/O等之间的关系。来了解一下真正改善系统的因果关系。先来理解一些概念。CPU(Central Processing Unit),中央处理器。是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit
2021-03-03 23:38:25
1008
2
转载 进程,线程与多核,多cpu之间的关系
CPU主频就是CPU运算时的工作频率,在单核时间它是决定CPU性能的重要指标,一般以MHz和GHz位单位,如Phenom II X4 965主频是3.4GHz。说到CPU主频,就不得不提外频和倍频的概念,它们的关系是:主频=外频×倍频。虽然提高频率能有效提高CPU性能,但受限于制作工艺等物理因素,早在2004年,提高频率便遇到了瓶颈,于是Intel/AMD只能另辟途径来提升CPU性能,双核、多核CPU应运而生。其实增加核心数目就是为了增加线程数,因为操作系统是通过线程...
2021-03-03 22:51:59
2036
1
原创 字节跳动 测试开发面经
一面 1.18自我介绍算法题:最长不重复子串(取尺or直接暴力)class Solution {private final static int SIZE = 256;public int lengthOfLongestSubstring(String s) {final int n = s.length();int start = 0;boolean[] have = new boolean[SIZE]...
2021-03-03 21:54:06
4184
1
转载 同步(Synchronous)和异步(Asynchronous)
同步就是整个处理过程顺序执行,当各个过程都执行完毕,并返回结果。是一种线性执行的方式,执行的流程不能跨越。一般用于流程性比较强的程序,比如用户登录,需要对用户验证完成后才能登录系统。异步则是只是发送了调用的指令,调用者无需等待被调用的方法完全执行完毕;而是继续执行下面的流程。是一种并行处理的方式,/////////////,不必等待一个程序执行完,可以执行其它的任务,比如页面数据加载过程,不需要等所有数据获取后再显示页面。他们的区别就在于一个需要等待,一个不需要等待,在部分情况下,我们的项目开发中都会优
2021-03-03 21:25:25
1715
1
转载 网络状态和防火墙状态查看命令:netstat、ifconfig、iptables
原文链接:https://blog.csdn.net/tuziaaa/article/details/106980343netstatnetstat 命令用于显示Linux系统网络链接状态。netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。语法netstat [-acCeFghilMnNoprstuvVwx][-A&
2021-03-03 21:13:18
2413
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人