
笔记
文章平均质量分 76
将船买酒白云边
吾生也有涯,而知也无涯,以有涯随无涯,殆已
展开
-
Linux系统的进程,看完它,相信你想kill“it“就kill“it“o((>ω< ))o
进程在操作系统中高并发处理中产生了重要的作用。Linux作为一个操作系统,也必须要拥有这两者才可以进行高并发。使用kill命令一般是用来终结一个进程的,在之前用到的。众所周知,不管在什么系统中,线程是CPU调度的最小单位。进程是资源分配的最小单位。不仅如此,该命令还可以配合。来使用进行查找相应的进程。命令都可以查看进程的。原创 2024-03-07 21:27:15 · 364 阅读 · 0 评论 -
Linux的文件操作,重拳出击( ̄︶ ̄)
学习Linux的文件操作,一般需要知道一个文件如果你想要操作他,必须知道你对这个文件有什么操作的权限或者修改你自己对文件操作的权限。必须要知道文件有三种权限r:可读w:可写x:可执行在打开Linux时登录打开命令行界面输入查看当前目录下的文件命令ls或者ls -l。ls:显示当前路径下的所有文件ls -l:显示当前目录下所有文件及其文件的用户属性及其每个组可使用的权限注意这里可能无法使用ll,因为这个命令需要在配置文件中修改添加一个属性值ls -l=ll。原创 2024-02-24 10:34:25 · 971 阅读 · 0 评论 -
hash冲突是什么?
当我们在一堆数据中查找一个元素时,使用普通方法得到的时间复杂度是O(N),使用搜索树的时间复杂度为O(logn),而现在告诉你有一种数据结构可以只使用O(1)的时间复杂度就可以查找,对程序的效率提升是一种质的飞跃。而这就是哈希(散列)。;capacity为存储元素底层空间总的大小。原创 2023-06-30 07:43:49 · 219 阅读 · 0 评论 -
Java 线程的6种状态
进程(process)和线程(Thread)是不同的。进程是资源分配最小单位,而线程是程序调度的最小单位。作为一名程序猿,认识线程状态是学习程序调度必不可少的一部分内容,一个线程被创建,它就会处于一种状态,认识线程的状态可以更容易的利用好线程的特性及分配好内存资源,原创 2023-05-26 13:40:42 · 881 阅读 · 0 评论 -
线程安全的锁策略,你到底忽略了多少?
挂起等待锁🔒:(重量级锁)在解锁后,挂起等待锁会自动放弃等待时机,相当于挂起等待锁不会去一直等待锁,而是需要锁时,而且锁是空闲状态,才会进行加锁,自旋锁是一种。,在执行加锁操作时,会先判定是否会造成死锁,也就是对其线程判定一下是否在此之前已经加锁,如果已经加锁,会进行解锁,同一线程的加锁操作,直接‘放行’。的锁,因为是轻量级锁,所以消耗的资源少,不过长时间寻找锁也会导致CPU消耗,而且在寻找锁时是不能做其他任务的。读写锁🔒:锁如其名,对数据的读加锁,对数据的写加锁,然后再进行完操作后,解锁。原创 2023-04-14 08:05:07 · 398 阅读 · 1 评论 -
UDP/TCP的相关性你知道几个?
网络协议的五层模型中应用层与程序员契合度最高,协议约定和组织数据格式都是由程序员决定的。传输层中两大主角UDP/TCP中,UDP的数据稳定但是适用场景不多对于TCP的四大特性,和对数据的传输中的困难和出现的错误都有针对的解决方案,对于TCP中序号的传递可以知道数据传输中的错误和应对错误的解决方法。以上,希望能帮助大家理解UDP/TCP的特性。原创 2023-04-12 08:38:02 · 242 阅读 · 1 评论 -
你真的知道使用Java的线程池吗?
创建一个线程,销毁一个线程,都会消耗一定量的CPU资源。当线程创建得越来越频繁,而系统的CPU已经分配不了那么多的资源,可能会变成一种等待的状态,使用起来非常不方便。那么有没有什么方法可以直接现取现用不需要等待,提高线程调度的效率呢?原创 2023-04-01 10:31:03 · 261 阅读 · 8 评论 -
阻塞队列(BlockingQueue)的实现和使用
阻塞队列是可以用于存放线程,因为阻塞队列可以对线程安全进行一种保护策略,当一个在队列中取一个线程时,如果阻塞队列中无线程,则会陷入等待状态,也就是阻塞,同样的,当队列空间满了之后,想要再加入线程,也会进入等待状态。”,高内聚是指代码的分布比较均匀,一个功能的代码就聚合在一起,使得程序员想修改一段代码时,可以轻易找到,也就是指关联代码分门别类的规制起来。可以正常使用,这里我们主要讲解了阻塞队列的实现以及使用,和阻塞队列与普通队列的区别,还有阻塞队列的线程安全问题。与队列相同,阻塞队列只是增加了。原创 2023-03-29 19:17:34 · 709 阅读 · 1 评论 -
线程安全——wait和notiy
单例模式是一种设计模式(软件开发中棋谱一样的存在),某个类在进程中只有唯一的一个实例。1.饿汉模式(急迫):提前将所有的准备工作都做好。2.懒汉模式(从容不迫):直到需要的时候才做准备,与饿汉模式相比之下,效率更加高假如在打开一个文档时,饿汉模式做的就是将文档中所有内容全部加载,而懒汉则是一边使用一边加载,如果还没有使用则不会进行加载操作,这样大大的节省了系统资源。//设计一个单例模式(饿汉模式) class Singleton {原创 2023-03-25 09:24:12 · 374 阅读 · 3 评论 -
线程安全问题的原因和解决方案
1.抢占式调度,随机调度2.多个线程修改同一个变量3.修改变量操作不是 原子操作4.内存可见性5.指令重排序要创建一个安全的线程应该检查以上五项,解决不安全问题的方法也很多,以上几种就可以解决相应的安全问题。线程中的临界区(并发代码),在保证线程安全的情况下,合理分配线程资源,提高线程效率。1.抢占式调度,随机调度2.多个线程修改同一个变量3.修改变量操作不是 原子操作4.内存可见性5.指令重排序。原创 2023-03-23 18:05:10 · 92 阅读 · 4 评论 -
操作系统—进程和线程
操作系统的定义:==操作系统是是管理系统资源、控制程序执行,改善人机界面,提供各种服务,合理组织计算机工作流程和为用户有效使用计算机提供良好运行环境的一种系统软件。==比如说电脑使用的操作系统:Windows,Linux,Mac,Unix都是一种操作系统,而手机上的操作系统又是:Android,IOS占主流。操作系统是用于管理计算机的资源,分配相应的资源使得计算机可以正常工作。而要一个程序正常运行必须要程序是正常的,且资源足够,一个程序才可以运行。原创 2023-03-13 21:15:32 · 114 阅读 · 1 评论 -
函数和#define(宏)的不解之缘
函数在使用时,就一直存在一个地方,占用一块空间,而宏是使用几处,替换几处,会加长代码。对于函数呢,因为拥有了类型而会安全很多,但函数并不是只有这种程度,解决问题时,我们常常会遇到各种错误,遇到错误时,一般进行调试是解决的第一步办法,而对函数进行调试是我们耳熟能详的,对于**宏,是无法调试的!在函数和宏进行比较时,我们很容易就可以发现,宏和函数各有所长,在应用中,宏更加使用于简单运算,而函数更适合处理复杂运算,当我们对函数传参时,函数会对该表达式或者变量进行一次运算,所以使用起来更加安全,结果更容易预测。原创 2022-11-06 08:06:52 · 645 阅读 · 0 评论 -
C语言——程序实现过程
一段代码要实现,会经过编译,汇编,链接,变成可执行程序,由我们用户使用。程序的执行过程中有两个环境存在,一个是翻译程序环境,一个是执行代码程序,两个环境的不同就在于,先将代码翻译成我们的二进制文件供计算机阅读,然后计算机根据翻译的内容,执行相应的操作。这两个环境是在编译期间出现直到程序结束。原创 2022-10-20 18:02:23 · 1787 阅读 · 2 评论 -
C语言之文件操作
文件是由文件路径+文件主干+文件后缀组成的。文件又被分为文本文件和二进制文件,两种区别就在于文本文件是给人看的,二进制文件是给机器看的,该文章主要说明了对一个文件的操作,是一个文件就会用于存放数据,将文件中的信息输入输出也是我们要掌握的。C语言的文件操作,是用于用户保存信息,和整理信息的一种方法,可以让不想被销毁的信息保留到下次打开可执行程序里面还有之前的内容。如何把信息放入文件呢?我们知道把一个大象放进冰箱只需要三步!打开冰箱门,把大象放进去,关闭冰箱门。当然我们操作文件也是如此,要先打开文件。原创 2022-10-14 11:37:04 · 3986 阅读 · 4 评论 -
C语言之内存库函数
malloc,calloc,realloc详解原创 2022-10-08 08:53:33 · 246 阅读 · 1 评论 -
contact—通讯录
通讯录源代码实现——使用C语言原创 2022-09-27 08:29:17 · 6213 阅读 · 0 评论 -
用内存库函数踢开通讯录的大门
在我们的手机上都会自带一个通讯录,有时免不了去使用他的一些基本功能,但是你能用自己的双手将它编写出来是不是有满满的成就感。接下来我们一起来将编写通讯录的快乐收入囊中!第一步为了避免代码累赘,我们要依次创建3个不同的文件,而他们就会有不同的功能,下图是我们的文件名,读者可自行修改,只要目的统一即可。首先,我们要在test.c创建一个通讯录大纲,就是你要为你的通讯录添加什么功能?10615103创建通讯录的开关这里我们用到了。原创 2022-09-27 08:15:03 · 371 阅读 · 0 评论 -
结构体大小,你真的知道吗?
但是我们这样使用是有风险的,因为内存读取是一个复杂的过程,当我们随便去改动结构体的对其数可能会有无法预料的后果,但是。而元素的大小要正好是偏移量的倍数才可以将元素放下,当偏移量不是倍数时,要向后偏移直到找到倍数。结构体,顾名思义是一个包含多种类型的体块。所以当我们定义结构体,为了避免内存浪费,应该尽量把空间小的元素放在一起。学会了这个方法,不如我们来计算一下文章开头提到的Stu结构体的大小。这个结构体就可以用于学生体系的使用,但是你真的知道他的大小吗?结构体最终的大小也是对齐数的倍数。原创 2022-09-21 09:24:53 · 298 阅读 · 0 评论 -
尝试模拟常用string.h中的库函数
当我们解决问题的时候,常常会使用一些特别的库函数,这些库函数的出现,大大的方便了我们解决问题,也增加了解题的速度,这些库函数的使用让我们的代码更加简便,易读性也随之提高。既然库函数有这么多好处,我们更应该学会它们的实现一些库函数的方法,这样才能让我们学得更加深刻,使用起来如鱼得水。这里特别介绍一个assert函数,该函数是用于测试指针是否为空,如果为空返回错误结果,否则为真。原创 2022-09-17 15:57:57 · 115 阅读 · 0 评论 -
C语言——指针数组,数组指针,函数指针,函数指针数组
parr 就是函数指针数组,当去掉parr 时int(*)(int ,int),就是该数组的类型,返回型是int。可以利用函数指针数组来实现一个简易计算机,包括,加,减,乘,除,左移位,右移位,按位与,按位或,按位异或,这9种运算。学习C语言不可避免的会使用指针,比如我们常常说的函数调用的方式:传址调用,传值调用。,也是用于存储数据地址,通常说的指针是一个指针变量。今天的分享就到这里,其实使用函数指针数组的方法有很多,值得你一一去探索。还有很多可以使用数组指针的项目,数组传参可以利用数组指针。...原创 2022-08-18 16:01:24 · 472 阅读 · 0 评论 -
C语言实现低配版“扫雷”小游戏
生成随机数的函数rand,是跟随srand一起使用的库函数。srand生成的随机数会被rand接收,不过这个函数生成随机数是需要一个随机数来转换成随机数,这时候就要使用到我们的时间戳——time库函数,使用时必须引用time.h头文件。用C语言完成的小游戏——“扫雷”,这是一个有年代感的游戏,经久不衰也恰恰证明了这款游戏的趣味性,接下来,就用我们的所学来实现这个游戏。布置雷函数,要使用我们设定好的数量然后放置相同数量的雷,可以设定count等于雷的数量,千万不可以用于++或者–,因为宏不可赋值。...原创 2022-07-31 11:55:58 · 909 阅读 · 0 评论 -
C语言实现“三子棋”小游戏
用C语言搭建的小游戏——三子棋游戏例图实现游戏时,先创建一个.c文件保存实现游戏的函数,可以让后续使用直接调用,大大提升了便利,再创建一个.c文件来测试游戏的可行性,然后创建一个头文件(.h)用来保存创建的函数声明和全局变量。接下来就开始构思游戏的实现。33当然,一些函数是经常会使用的,比如打印棋盘函数,玩家下棋结束时,需要展示,自然在电脑下棋后也一样应该展示。其中内容可随意改动,只要可以让玩家明白该游戏如何运转。...原创 2022-07-29 13:59:45 · 541 阅读 · 0 评论 -
水仙花,条件运算符,求s=a+aa+aaa+aaaa+aa…a的值
解析控制相加次数和相加方法,次数可以用循环控制,三种循环都可以加以使用,这里介绍的是while循环。分析条件运算符是指(A?BC)也称为三目操作符。该符号表示的是如果A条件为真,则输出B,反之输出C。这里的A为真,表达式B才会运行。...原创 2022-07-23 16:08:59 · 390 阅读 · 1 评论 -
新手刷题,多多指教
刷题原创 2022-07-19 16:18:51 · 101 阅读 · 1 评论