自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不爱学习的灰灰的博客

留下了没有技术的泪水

  • 博客(32)
  • 收藏
  • 关注

原创 【node】npm笔记

npm教程,常用命令

2022-06-09 21:04:29 208

原创 【Linux】常用命令-用户管理

查看系统用户、用户组cat /etc/passwd #系统所有用户cat /etc/group #系统所有用户组groups #当前用户所在组id #当前用户uid、gid信息增加系统用户useradd vs adduser:useradd是系统自带;adduser是一个perl脚本,底层使用useradd。使用useradd兼容性更好# 仅仅增加用户user1useradd user1 # 增加用户user2并创建home目录useradd user2

2021-12-11 10:09:42 621

原创 【Linux】CentOS7无图形界面版安装

一、预备条件最近在搭建自己的服务器集群,目前来看主流的服务器操作系统还是红帽系的,在此记录下centos7的安装过程一台已经安装过系统的电脑和U盘:用于制作启动盘镜像源:制作启动盘需要将系统先写入U盘,centos7无图形界面的版本为后缀是minimal的iso文件,为了加快下载速度,这里可以选择清华的系统镜像写入镜像:Windows下可以双击iso文件将里面的所有文件,以及整个ISO文件复制进准备好的U盘中,并将卷名改为CETNOSLinux系统可以使用命令完成sudo dd

2021-07-11 11:08:51 9468

原创 【Linux】ArchLinux的安装及踩坑记录

一、预备条件一台已经安装过系统的电脑和U盘:用于制作启动盘镜像源:制作启动盘需要将系统先写入U盘,为了加快下载速度,这里可以选择清华的系统镜像,我使用的是2021.4.1的版本写入镜像:Windows下可以双击iso文件将里面的所有文件复制进准备好的U盘中Linux系统可以使用命令完成sudo dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync# bs=4M 指定一个较为合理的文件输入输出块

2021-07-10 21:50:29 1962

原创 【Linux】系统调用那些事

概述头文件和c库libcposix cglibc /lib64/libc.so.6大部分系统调用的封装函数定义在unistd.h中,并在glibc中实现/usr/include/asm/unistd_64.h如何进行系统调用头文件和c库三种方式POSIX封装函数syscall函数asmhttps://github.com/hch814/blog-demo/blob/master/blog-c-demo/basic/syscall_test.c系统调用发生了什么系统调用号/

2021-05-09 23:20:32 219

原创 Mac软件及其插件推荐(持续更新)

一、开发类软件功能iTerm2终端oh-my-zshzsh增强powerlevel10kzsh主题Chrome浏览器Jetbrains全家桶IDEVSCode文本编辑器Typoramd编辑预览PostmanAPI调试DashAPI文档Docker for macdocker和k8sNavicat premium数据库连接SSR飞机有道云笔记云笔记有道词典翻译二、系统增强类

2021-01-31 10:40:50 2056

原创 【消息中间件】kafka知识点总结

一、核心概念broker:节点,即集群中的一台主机。若存在多个broker,会选举出一个controller,用来访问zookeeper集群元数据实现集群管理producer:生产者,即向broker发送消息的发送方consumer:消费者,即从broker获取消息的接收方consumer group:消费组,由多个消费者组成,同一条消息只会被组中的一个成员消费但可以被不同消费组消费topic:主题,即一个消息队列partition:分区,topic的物理组成,一个topic可以分为多个分区,

2021-01-15 22:36:54 181 1

原创 【python】基础笔记

一、python位置信息下面以MacOS为例系统自带(2.7)home:/System/Library/Frameworks/Python.framework/Versions/2.7自带lib: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7三方lib: /Library/Python/2.7/site-packagesxcode命令行工具(3.7)home: /Library/Develop

2021-01-01 11:48:10 161

原创 【MacOS】编译简介及动态、静态链接库的创建

一、编译简介在正式说明如何创建库文件之前,先来重温一下编译的基本流程吧。既然说到编译这个概念,那么首先来思考一下编译是什么?我们为什么需要编译?编译它能为我们带来什么?想要回答这几个问题,我们的思绪需要先回到20世纪40年代,在那个计算机刚刚诞生的年代,人们将各种算术操作定义为一系列二进制指令(即机器语言)存储在笨重的计算机内部,当专业人员想要操作计算机执行复杂计算时,他们需要手工将二进制指令输入到计算机中,需要执行多个指令时,这些指令合集会被记录到打孔卡中,打孔卡的打孔或者不打孔对应着二进制的0或者1

2020-09-20 21:18:52 1467

原创 【MacOS】命令行配置zsh以及powerlevel10k主题

一、概述前段时间在B站上看到有UP主在Manjaro Linux上使用了zsh并且配置一个超级炫酷的主题powerlevel9k:传送门。看了之后非常跃跃欲试,想在我的iMac上也配置一下,但是网上找了一下powerlevel的最新版本是powerlevel10k,而且10k的运行效率比9k提高很多,因此在这篇博文中记录一下我在MacOS中使用iTerm2终端配置zsh和powerlevel10k主题的过程。最终显示的效果如下:二、配置过程1. 安装iTerm2并配置颜色字体iTerm2相对于苹果

2020-09-08 06:08:44 11392 3

原创 【信息安全】编码、加密和摘要

一、概述在平时生活中或者开发工作中只要遇到涉及信息安全的话题永远也离不开这几个术语“编码”,“加密”和“摘要”。我在刚接触的时候会很迷惑这几个名词究竟有什么区别呢?它们的内涵又是什么?下面就来梳理一下。二、编码(Encoding)关于编码维基百科给出了如下的定义:“编码是信息从一种形式或格式转换为另一种形式的过程;解码则是编码的逆过程。”定义给的很宽泛,但从实际的工作中来看,我们平时经常接触的主要有两种形式:第一种是字符编码;第二种是二进制编码。前者规定了一个字符在计算机中该如何转变成二进制比特位的形

2020-09-06 16:10:58 1170

原创 【springboot】启动流程之starting

一、概述starting作为springboot启动流程中最早的一个生命周期,过程相对比较简洁因此源码也相对较少,比较适合入门者的源码研究。在此阶段中spring主要完成了日志系统的选择、后台预加载等动作。二、SpringApplicationRunListener和ApplicationListener在上一篇文章中的最后一小节,我们可以发现在进行第一个生命周期回调(也就是starting)前,spring先通过getRunListeners方法获取了一个SpringApplicationRunLi

2020-08-20 14:26:07 731

原创 【springboot】初识启动流程

一、spring是如何启动的springboot的启动代码非常简洁优雅,通常只需一个注解@SpringBootApplication和一行代码就能将应用启动起来:SpringApplication.run(App.class, args);主线程执行完后,由于有其他非daemon线程还存活着(例如tomcat的线程),所以整个应用在没有发生重启的情况下能实现7*24不间断运行。这一个run方法最后进入源码其实就是这一行代码new SpringApplication(primarySources).run(

2020-08-18 15:22:03 158

原创 【集合】ArrayList

一、概述ArrayList是一个用来顺序存储元素的集合,它是有序且可以随机访问的。正如它的名字所示,它的底层数据结构就是用数组实现的。那为什么不直接用数组存储元素呢?因为ArrayList提供了一系列人性化的API,迭代器以及自动扩容机制,使你不必关心数组元素的迁移变动。有几个关键的成员变量需要我们重点关注一下:elementData:一个对象数组,ArrayList用于存储元素的关键数据结构size:elementData数组中已经存储的元素数量modCount:ArrayList的修改次数,详

2020-07-31 19:59:59 205

原创 【集合】HashMap(JDK8)

迭代器public void testIter() { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); Iterator iterator = list.iterator(); while (iterator.hasNext()) { Object o = iterator.next();

2020-07-29 20:56:04 162

原创 【多线程与并发】ThreadLocal与强软弱虚引用

ThreadLocal:线程本地变量,用于保存线程私有的变量,保证多线程之间的数据隔离性。为什么不用方法内的局部变量?局部变量作用域为当前方法,而ThreadLocal可以跨方法获取ThreadLocalMap是一个entry数组,存储键值对(entry的key引用是弱引用),其中key是ThreadLocal对象,value是一个object对象。每个ThreadLocal对象会生成一个threadLocalHashCode,用于决定它在ThreadLocalMap中的位置。当hash冲突时采取线性查

2020-07-22 12:06:04 297

原创 【maven】常用配置片段

一、默认开启jdk1.8<!-- 在settings.xml中配置 --><profiles> <profile> <id>jdk-1.8</id> <activation> <!-- 默认每个maven工程都加入这个配置 --> <activeByDefault>true</activeByDefault>

2020-07-18 13:14:58 134

原创 【理解系统】bash启动文件以及自定义命令提示符

一、bash类型当我们每次进入Linux系统时,总能使用到例如ll之类的一些命令,这些命令并非bin目录下的可执行文件,而是Linux发行版为我们预置的alias。那么Linux发行版究竟是什么时候又是如何为我们配置的这些东西呢?想要直到这个问题,需要先来了解一下bash的几种类型登陆式bash:所谓的登录式bash就是当用户以登录的方式启动的bash,例如ssh远程登录,在命令行输入bash -l命令启动一个登录式child bash或者进入一个docker容器docker exec -it ${c

2020-07-06 11:28:03 484

原创 【理解系统】Linux目录结构

一、文件系统Linux目录结构对于一直习惯使用Windows的用户来说非常难以理解,至少对于当初第一次在大学接触学习操作系统的我来说是这样的。而造成这个差异的很大原因是因为这两者的文件系统设计本质就是不一样的,所以在说目录结构前先来简单看下他们的一些区别。盘符:Windows系统有一个很大的特点就是它的分区盘符,例如大家熟悉的C盘是系统盘,D/E等盘是数据盘。在Linux系统中完全没有盘符这个概念。路径分隔符:Windows系统的路径分隔符是\ ;而Linux是/根目录:Windows采用的是多根

2020-07-02 22:50:52 153

原创 【多线程与并发】线程池

一、概念1. 什么是线程池线程池顾名思义是一个统一管理线程的工具,它如同一个池子一般装载了创建出来的线程,并掌控着它们的生命周期和调度工作,从而起到复用线程的作用。这种池化的思想还常常用于数据库连接。在JDK中线程池对应的类为java.util.concurrent.ThreadPoolExecutor2. 为什么需要线程池降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗(创建销毁线程需要系统调用)。提高响应速度:任务到达时,无需等待线程创建即可立即执行。提高线程的

2020-06-28 20:46:51 203

原创 数据库事务以及Java代码模拟

一、为什么需要引入事务使一组SQL语句不可分割,即要么全部执行,要么都不执行。从而保证了数据库数据的一致性。二、四大特性数据库事务具有ACID四大特性Atomic(原子性):将所有SQL作为原子工作单元执行,要么全部执行,要么全部不执行Consistency(一致性):事务完成后,所有数据的状态都是一致的,例如A账户只要减去了100,B账户则必定加上了100Isolation(隔离性):如果有多个事务并行执行,则某个事务的执行不受其他事务的干扰,事务执行的中间结果对其他事务必须是透明的Dur

2020-06-19 15:03:28 335

原创 【理解系统】查看Linux系统信息

一、发行版版本号$ cat /etc/issueUbuntu 18.04 LTS \n \l二、内核版本号方法(1):$ cat /proc/versionLinux version 4.15.0-99-generic (buildd@lcy01-amd64-013) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)) #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020方法(2):$ uname -a

2020-06-08 15:21:41 706

原创 【多线程与并发】ReentrantLock与AQS

一、前言ReentrantLock(以下简称RL)是JDK5之后推出的互斥锁,实现了java.util.concurrent.locks.Lock接口,功能和synchronized关键字很相似,但是写法上有区别,而且提供了几个更加灵活的API:等待可中断:tryLock(long timeout, TimeUnit unit)以及lockInterruptibly()能够响应中断公平锁:RL构造方法提供了一个布尔选项打开公平锁,不过会使性能急剧下降多条件:newCondition()能够使线程等

2020-06-03 21:59:27 407

原创 【多线程与并发】CAS与原子类

一、概念CAS(compare and swap/set)称为比较并交换或者自旋锁,是一种基于冲突检测的乐观锁,也称之非阻塞同步。换句话说就是不管三七二十一我先尝试操作,要是没有其他线程和我冲突那我就操作成功了,否则我就进行不断地重试直到没有冲突产生,期间不会去阻塞其他线程。这样会产生一个问题那就是怎么保证我检测冲突和操作能够具有连贯的原子性?总不能我冲突检测完成了,但是在我操作的时候其他线程已经把这个值改了。但如果我加锁的话,那不还是阻塞同步(悲观锁)了吗?因此这个CAS操作只能够通过硬件指令集来完

2020-05-25 21:44:06 211

原创 【多线程与并发】synchronized同步锁

一、概念synchronized为java内置的关键字,用于保证一组代码的原子性以及该代码中共享变量的可见性(happens-before原则的Monitor Lock Rule),同时由于as-if-serial语义(不管怎么重排序,单线程下的执行结果不能被改变),该关键字又可以说是有序性的,所以synchronized在解决并发问题上可以说是“万能”的。从并发策略上来看,这种互斥同步(阻塞同步)锁是一种悲观锁。那么如何使用呢?可以将该关键字加在方法(构造方法和接口方法例外)上,也可以使用synchr

2020-05-24 17:17:17 328

原创 【多线程与并发】JMM与volatile

一、java内存模型每个线程访问共享变量时(如静态变量、单例中的成员变量等),会将该变量从主内存中存入一个副本到自己的工作内存。线程对这些共享变量的读写只会在工作内存中进行,且线程间不能访问对方的工作内存,共享变量的值传递需要通过主内存完成。这种内存模型的主要来源是计算机硬件模型,线程是cpu的基本调度单位,线程的工作内存就是cpu对应的高速缓存cache。那么为什么要用这种模型呢?原因还是效率问题:CPU速率>Cache速率>主内存速率>io外设速率。两者关系见下图二、jvm内存

2020-05-23 16:21:58 166

原创 【理解系统】回车与换行

一、是什么在Linux和MacOS中行分隔符为"\n",在Windows中为"\r\n"。至于为什么会造成这个差异,可以看下参考文章链接。下面说说这两者究竟是什么回车:Carriage Return(CR) “\r”,表示将光标返回至所在行头部换行:Line Feed(LF) “\n”,表示将光标置入下一行二、为什么“\n"作为换行符很好理解,面对很长一行文字时计算机读取能够不费吹灰之力,但人类读取就非常费力了。”\n"可以将文字换行切分。那么“\r"呢?我什么时候才需要将光标返回所在行头部

2020-05-23 08:46:49 329

原创 【多线程与并发】线程

一、概念1. 并发 ≠ 并行并发 (concurrency) 和 并行 ( parallelism) 是不同的。在单个 CPU 核上,线程通过时间片或者让出控制权来实现任务切换,达到 “同时” 运行多个任务的目的,这就是所谓的并发。但实际上任何时刻都只有一个任务被执行,其他任务通过某种算法来排队。多核 CPU 可以让同一进程内的 “多个线程” 做到真正意义上的同时运行,这才是并行。2. 程序、进程、线程、协程程序:是一个静态的概念,但可以被动态地执行。例如静静地躺在你硬盘中的QQ.exe进程:

2020-05-23 08:05:02 217

原创 安装虚机后基本配置

记录一下今天在安装了全新的Ubuntu(16.04)虚机后所做的一些基本配置一、配置apt源并下载基本软件Ubuntu的包管理命令apt默认使用美国仓库,将其配置为国内源镜像可大幅提高下载软件的速度。我使用的是清华的镜像,下面vi编辑的内容可参考https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/sudo sucd /etc/aptmv sources.list sources.list.bakvi sources.listapt update

2020-05-17 20:08:37 119

原创 Git命令行cheatsheet(二)

一、撤销和回滚撤销变更:git checkout [filename] 将工作区内某个文件的变更(修改或删除)撤销到最近一次git commit或git add的状态,需要注意的是该命令不会对新增加的文件生效。若使用git checkout .则会撤销当前目录及其子目录下所有文件的变更,与git add .相似撤销增加:git reset [filename] 如果说checkout是对工作区的撤销,那么git reset就是对暂存区的撤销。当我们使用完git add后发现有些文件又不想提

2020-05-17 18:18:58 217

原创 Git命令行cheatsheet(三)

GitHub是目前全世界最大的git远程托管平台,下面记录下如何和远程仓库相互协作一、创建远程仓库在GitHub上点击你的头像->Your Profile->Repositories->New填入仓库名(你可以认为这就是一个文件夹的名字),除了仓库名是必填的以外其他都是可选项,例如仓库描述、公开或私有、用README文件初始化(如果是新项目强烈推荐勾选这个选项,因为这样可以直接克隆而不需要在本地进行额外的一些同步操作了),如果忘了勾选README也没关系,空仓库中GitHub会给你

2020-05-17 18:16:09 286

原创 Git命令行cheatsheet(一)

一、配置初次使用前的配置:git config --global user.name “”git config --global user.email “”这两条语句设定了用户名和邮箱,可以在~/.gitconfig文件中找到并修改。使用git config -l --global语句可显示这两条信息,该信息会记录在你的每一次的提交当中二、简单命令**创建仓库:**git init 在某个目录下使用该命令后,该目录下会生成一个.git的隐藏文件夹,用于跟踪和管理该目录的改动,这样一来一个g

2020-05-17 18:15:11 280

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除