自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

江湖书苑

——练拳不练功 到老一场空

  • 博客(101)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于并发编程产生的问题的思考

计算机科学属于现代科学的一个门类。而现代科学的发展又依赖于哲学的发展。我们所处的时代是一个工商业文明的时代,整个时代的底层逻辑,是西方哲学体系。哲学本身的特点是不断的完善自己的模型,不断的推翻旧的模型。而科学作为哲学的一个产物,也继承了这个特性。哲学推演中有假设的方法。我们假设 计算机的CPU ,内存,I/O的速度是一样的,那么就不存在 CPU和IO的速度差异,线程在计算的时候,和I/O操作的时候,速度是一样的。那么就不存在,为了避免线程做I/O操作时,对CPU造成浪费。设计的线程调度。没有了线程切

2021-01-18 16:37:42 80

原创 Can you stand on the shoulders of giants?

在图灵技术图书的封面上,都会有站在巨人肩膀上这句话,但是我们稍微思考一下,巨人的肩膀你真的站的上去吗?这些大师门的著作,我们是否真的能理解并实践呢?学习任何知识,如果没有达到融汇贯通的境界,那么你的知识结构都是零散的。在中国古代,读书讲究有没有读通。这个通字很重要。如果没有读通,那么你就只能生搬硬套。学过的所有东西都是零散且有很多自相矛盾的地方。那么怎么样融汇贯通呢?我个人认为,学习并实践了一...

2019-01-20 12:58:31 275

转载 quartz定时任务修改系统时间后不执行

修改了服务器时间以后,原有的定时任务不执行了,其实定时器并没有失效,而是trigger定时调用以后会自动记录下一次调用的时间,当修改系统时间以后,假如修改后的时间靠后了,那你的定时调度任务将无法执行,假如修改后的时间靠前了,那定时调度任务是可以定时执行的...

2021-11-03 09:48:11 1137

原创 网络IO模型演进04——epoll模型示例

1. 简介epoll 是Linux内核为了解决io问题而引入的一种机制,避免了poll模型的几个缺点poll每次系统调用都要传递文件描述符集合,epoll在内核开辟了一个空间来存储文件描述符集合poll系统调用,内核每次都要遍历文件描述符集合,epoll通过和网卡中断做关联,避免了遍历文件描述符集合2. 笔者环境Ubuntu 18.04JDK1.83. 示例代码vim SocketMultiplexingSingleThreadv1.javajavac SocketMult

2021-03-10 17:42:55 261

原创 网络IO模型演进03——poll模型示例

1. 简介在 nio 模型中,需要在应用程序不断的做read系统调用,消耗系统资源,这个复杂度是O(n),但是这些read中有很多是无效的,从而引出了poll模型。在poll模型中,省去了在用户空间做O(n)复杂度的read系统调用,节省了大量的资源2. 笔者环境Ubuntu 18.04JDK1.83. 示例代码vim SocketMultiplexingSingleThread.javajavac SocketMultiplexingSingleThread.javast

2021-03-10 17:36:59 372

原创 网络IO模型演进02——NIO模型示例

1. 简介BIO 全称 Blocking IO , 也就是阻塞IO,这里的阻塞体现在两个方面,- accept内核分配的Socket资源后,阻塞的等待客户端的连接- 读取客户端发送的数据时是阻塞的2. 笔者环境- Ubuntu 18.04- JDK1.83. 示例代码vim SocketNIONonBlocking.javajavac SocketNIONonBlocking.javastrace -ff -o out java SocketNIONonBlockingim

2021-03-08 19:30:58 154

原创 网络IO模型演进01——BIO模型示例

1. 简介BIO 全称 Blocking IO , 也就是阻塞IO,这里的阻塞体现在两个方面,- accept内核分配的Socket资源后,阻塞的等待客户端的连接- 读取客户端发送的数据时是阻塞的2. 笔者环境Ubuntu 18.04JDK1.43. 安装JDK1.4注意这里要演示原始的BIO模型,需要使用JDK1.4来编译;如果使用JDK8编译,会发现在系统调用层面使用的是poll模型https://www.oracle.com/java/technologies/java-a

2021-03-08 19:30:09 82

原创 soul从入门到进阶06——运行soul-examples-dubbo

前面我们初步尝试了soul网关的http协议相关的功能。这篇我们来看一下 dubbo协议的功能。1. 启动soul-admin 和 soul-bootstrap省略 可参考 soul从入门到进阶01——soul网关初体验2. 启动 soul-example-dubbo打开命令行cd soul-examplescd soul-examples-dubbo可以看到分别是apache dubboe的example和 alibaba dubbo的example进入 soul-examp

2021-01-21 00:42:47 498

原创 soul从入门到进阶05——soul-bootstrap数据同步流程

我们在 soul-admin的数据同步流程中分析了admin的数据同步流程,这篇我们来看看soul-bootstrap的数据同步流程启动 soul-bootstrap打印如下日志,我们同样从日志着手来分析。日志中打印了 you use websocket sync soul data我们根据日志,找到WebsocketSyncDataConfiguration这个类2021-01-19 21:19:48.461 INFO 20364 --- [ main] b.s.s.d

2021-01-19 22:53:09 204

原创 计算机网络二层三层概要

简介本篇文章是笔者的分享计算机网络二层,三层知识的一个大纲综述分层只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层。网络设备都可以处理网络包理解计算机网络中的概念,一个很好的角度是,想象网络包就是一段 Buffer,或者一块内存,是有格式的。同时,想象自己是一个处理网络包的程序,而且这个程序可以跑在电脑上,可以跑在服务器上,可以跑在交换机上,也可以跑在路由器上。你想象自己有很多的网口,从某个口拿进一个网络包来,用自己的程序处理一下,再从另一个网口发送出去。数据

2021-01-19 10:55:20 792

原创 soul从入门到进阶04——压测soul网关

这篇文章的主题是对soul网关进行压测笔者的环境MacBook Pro处理器 2.8 GHz 四核Intel Core i7内存 16 GB 1600 MHz DDR31. 压测soul-examples-http和第一篇一样,我们在IDEA启动soul里面提供的soul-examples-httpwrk -t16 -c200 -d30s http://localhost:8188/order/findById?id=1结果如下Running 30s test @ http://l

2021-01-17 16:28:00 1410

原创 soul从入门到进阶03——插件链调用流程

查看调用流程我们来尝试看一看http协议的网关调用流程1. 从日志入手首先看soul-bootStrap的日志,每次请求 http://localhost:9195/http/order/findById?id=1 都会打印以下日志2021-01-16 11:01:22.671 INFO 3969 --- [-work-threads-8] o.d.soul.plugin.base.AbstractSoulPlugin : divide selector success match ,

2021-01-17 13:36:12 250

原创 shell 编程概要

背景运维:目标:保障系统长期、稳定、安全运行工作内容;安装、配置、备份、监控、邮件报警、自动报警、物理世界CPU内存网卡磁盘资源角度计算存储网络一. 什么是shell脚本语言查看所有的脚本cat /etc/shells 做什么自动化批量系统初始化 (update,软件安装,时区设置,安全策略,防火墙、端口转发等)自动化批量软件部署 (LAMP,Tomcat,Nginx)管理应用程序自动化备份恢复程序(MySQL 完全、增量备份)

2021-01-17 13:10:31 195

原创 soul从入门到进阶02——soul-admin的数据同步流程

soul-admin 的数据同步流程分析在上一篇文章中我们提到,根据官网的介绍数据配置流程 soul网关的配置数据在修改后立即同步到soul gateway 中,不需要重启,性能高,生效快。这个特性也是网关这种中间件的基本需求,作为一个API网关,如果改一下配置还需要重启网关,基本失去了可用性。我们现在来看一看这块是如何做到 不需要重启,并且快速生效的。1. 寻找入口上一篇文章中,我们做了如下操作,这次我们打开浏览器的调试窗口,发现 请求的url是 http://localhost:9095

2021-01-15 23:31:34 576

原创 soul从入门到进阶01——soul网关初体验

笔者的环境MacBook Pro处理器 2.8 GHz 四核Intel Core i7内存 16 GB 1600 MHz DDR3其他环境准备 maven、jdk、git概要简介本篇文章主要是简单认识一下soul网关,搭建本机测试环境,熟悉整体框架读者可以参考soul极简入门,看一下soul的简介1. clone 并编译项目打开终端git clone https://github.com/dromara/soul.gitcd soulmvn clean install

2021-01-14 00:52:50 704

原创 使用docker配置MySQL主从复制

环境MacOSdocker$ docker versionClient: Docker Engine - Community Version: 18.09.1 API version: 1.39 Go version: go1.10.6 Git commit: 4c52b90 Built: Wed Jan 9 19:33:12 2019 OS/Arch: darwin/amd64

2020-11-30 19:30:46 154 1

原创 Ubuntu LTS 18.04设置静态IP

vim /etc/netplan/*.yml# This file is generated from information provided by# the datasource. Changes to it will not persist across an instance.# To disable cloud-init's network configuration capabilities, write a file# /etc/cloud/cloud.cfg.d/99-disa.

2020-07-06 16:21:06 468

原创 正则表达式元字符

基本正则表达式元字符元字符功能示例^行首定位符^love$行尾定位符love$.匹配单个字符l…e*匹配前导符0到多次ab*love.*任意多个字符[]匹配指定范围内的一个字符[L]ove[ - ]匹配指定范围内的一个字符[a-z0-9]ove[^]不在范围内的字符[^a-z0-9]ove\用来转义元字符love\\<词首定位符\<love\>词尾定位符love\

2020-06-04 18:36:52 176

原创 Linux重命名root用户

vim /etc/passwd 将第一行的第一个root替换为重命名的用户root:x:0:0:root:/root:/bin/bashvim /etc/shadow 将这一行中的root 替换为重命名的用户root:$xxxxxxxxxx:18186:0:99999:7:::exit使用重命名后的用户登录id 查看当前用户id 为0 即是修改成功,...

2020-05-07 00:06:44 5310

原创 Windows重命名administrator账户

win+r 输入 gpedit.msc计算机配置——> Windows设置——> 本地策略——> 安全选项 ——> 账户: 重命名系统管理员账户重命名账户,重启后生效

2020-05-06 23:58:19 1213

原创 编译OpenJDK

编译环境Ubuntu Server 18.04 LTSapt install openjdk-11-jdk编译OpenJDK12 需要先安装OpenJDK11 以此类推下载OpenJDK12可以到这个页面中 点击zip 下载源码也可以执行以下命令下载wget -c https://hg.openjdk.java.net/jdk/jdk12/archive/0622...

2020-02-13 00:05:37 539

原创 sed 引用shell变量

1. 如果sed 命令使用的是 单引号,引用变量要使用 $+单引号+双引号 的方式。例子如下addrs=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`sed 's/localhost:1935/'"$addrs"':1935/g' filename...

2020-01-09 16:36:29 1966

原创 vim 和 sed 对比

sed 是一个流编辑器 (stream editor),而vim 是一个交互式编辑器,理论上来讲vim 可以完成的功能 sed 都可以完成。我们将 vim 和 sed 做一个大致的对比:vimsedi进入插入模式并在前面插入内容sed '/ab/i hello' bfile —— 匹配到’ab’后在上一行插入a进入插入模式并在后面插入内容sed ...

2019-12-12 22:23:05 1446

原创 windows 查看内核版本号

win+r输入cmdVER或者WINVER也可以直接在 运行中 输入 WINVER,其中6.1 是内核版本号

2019-12-11 12:04:30 1608

转载 JDK各个版本发布时间和版本名称

版本名称发行日期JDK 1.0Oak(橡树)1996-01-23JDK 1.11997-02-19JDK 1.1.4Sparkler(宝石)1997-09-12JDK 1.1.5Pumpkin(南瓜)1997-12-13JDK 1.1.6Abigail(阿比盖尔–女子名)1998-04-24JDK 1.1.7Brutus(布...

2019-12-06 09:37:52 4617

原创 使用Clonezilla 复制Linux操作系统

关于Clonezilla的介绍https://clonezilla.org/clonezilla-live.php下载Clonezillahttps://clonezilla.org/downloads/download.php?branch=stable使用Tuxboot 制作 Clonezilla 启动U盘https://tuxboot.org将磁盘保存为镜像https://c...

2019-11-30 15:53:58 401

原创 Git 设置自动rebase

1. 设置所有分支自动rebasegit config branch.autosetuprebase always或者git config --global branch.autosetuprebase always此时宿主目录下的.gitconfig文件会多出下面的内容[branch] autosetuprebase = always所有新切的分支都会自动rebase,...

2019-10-31 12:01:58 2420

原创 JDK 动态代理(一)

测试创建一个接口 Daopublic interface Dao { void query();}创建一个实现类public class IndexDao implements Dao { @Override public void query() { System.out.println("do database query"); ...

2019-10-28 20:05:04 73

原创 Install opensips and Mediaproxy on Ubuntu LTS 16.04

install opensipsapt-key adv --keyserver keyserver.ubuntu.com --recv-keys 049AD65Becho “deb http://apt.opensips.org xenial 2.4-releases” >/etc/apt/sources.list.d/opensips.listapt updateapt inst...

2019-10-24 20:59:52 399

转载 Ubuntu 18.04 修改主机名

ubuntu 18.04不能直接修改/etc/hostname中主机名称,重启后又恢复到安装时设置的主机名称.正确的修改步骤如下:1.首先修改/etc/cloud/cloud.cfgsudo vim /etc/cloud/cloud.cfg找到preserve_hostname: false修改为preserve_hostname: true2.修改主机名(永久)#修改主机名(临时)...

2019-10-22 13:35:49 600

原创 Git 找回删除的分支

我本地有两个分支,然后我删除了 save 分支参见 上一篇博客 git reflog 解析查看所有的引用变动的日志git reflog如下图,这里我们看到,并没有删除分支的记录,我们切回到被删除分支最后操作的一个reflog id 也就是 6c4a469切回到删除分支之前的那个IDgit checkout 6c4a469git checkout -b save这样就...

2019-09-30 17:44:20 6641 1

转载 关于fatal error: sys/capability.h: No such file or directory

在编译《Linux/UNIX系统编程手册》的源代码时,提示:cat@ubuntu:~/linux/tlpi-dist/lib$ makecc -c -g -std=c99 -D_XOPEN_SOURCE=600 -D_DEFAULT_SOURCE -g -I…/lib -pedantic -Wall -W -Wmissing-prototypes -Wno-sign-compare -Wno-...

2019-09-27 12:58:14 1348

转载 什么是Hypervisor

根据维基百科:“Hypervisor 或者virtual machine monitor (VMM)是创造并且运行虚拟机的软件、固件、或者硬件”。通俗来讲,Hypervisor是一种将操作系统与硬件抽象分离的方法,以达到host machine的硬件能同时运行一个至多个虚拟机作为guest machine的目的,这样能够使得这些虚拟机高效地分享主机硬件资源。Hypervisor有如下优点:...

2019-09-23 11:52:01 1010

原创 初识grep 命令

创建文件 samplefile 内容如下this is aboveof2 this is aboveof1abcthis is below1 this is below2 this is aboveof2this is aboveof1abc123abc...

2019-09-22 19:39:42 126

原创 SQLServer 表注释和字段注释的一些基本操作

查看字段注释和表的信息参考文章https://www.cnblogs.com/qy1234/p/9044275.htmlinformation_schema:系统视图sys.extended_properties:系统视图表或表字段等的注释,是数据库对象的扩展属性。在MSSQL中,支持把一些注释性的内容放到数据库或数据库对象中,增强可读性,有助于日后的管理和维护工作。扩展属...

2019-09-05 17:41:31 5824

转载 SQL Server 2016新特性:DROP IF EXISTS

在我们写T-SQL要删除某个对象(表、存储过程等)时,一般会习惯先用IF语句判断该对象是否存在,然后DROP,比如:旧版本:IF OBJECT_ID('dbo.PERSON','U') IS NOT NULLDROP TABLE PERSONIF EXISTS (SELECT * FROM sys.objects where name = 'PERSON')DROP TABLE P...

2019-09-05 13:29:36 3724

原创 Ubuntu LTS 18.04设置静态IP

/etc/netplan/*.yml# This file is generated from information provided by# the datasource. Changes to it will not persist across an instance.# To disable cloud-init's network configuration capabil...

2019-07-04 12:03:25 226

原创 Linux 常用命令

shell移动光标Ctrl – a :移到行首Ctrl – e :移到行尾User and Loginuseradduseradd usernameid usernametail -10 /etc/passwdtail -10 /etc/grouptail -10 /etc/shadowpasswdpasswd usernameFile Systemls...

2019-07-04 09:46:58 293

原创 Vim 普通模式下各个键的功能

1.Normal Modemotion : 运动operation : 操作amotion: appendAmotion: append at the end of lineCtrl+amake the number add one for example: 1 to 2bmotion: to move the cursor to the first letter of the...

2019-07-02 11:02:33 7175

原创 Vim 常用命令

windowCtrl+w+operationw : switch to nextc : closen : news : split horizontalv : vsplit verticalj k h l : move to another window [down] [up] [left] [right]some comman...

2019-07-02 10:58:27 492

use-modeswitch.zip

usb-modeswitch Debian包 用于ubuntu16.04 LTS 安装 usb-modeswitch

2019-10-24

空空如也

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

TA关注的人

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