自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(144)
  • 收藏
  • 关注

原创 Java多线程编程实战指南-核心篇

1 多线程编程基础1.1 进程与程序进程是程序的运行实例,类似播放中的视频和视频文件的关系1.2 创建线程的两种方式继承Thread重写run方法提供Thread对象一个Runnable对象1.3 Thread与Rnnable的关系Thread是对线程的抽象,Runnable是对线程要执行的任务的抽象1.4 线程的属性ID:不适合用作某种唯一标识Name:有助于代码调试和问题定位Daemontrue表示守护线程,false表示用户线程main方法由用户线程执行Java虚拟

2021-07-01 11:20:07 924

原创 3. 手写RPC

1 RPC功能简介远程过程调用,可以让程序员像调用本地方法一样调用远程方法本地只有接口Car、Fly,服务端有其实现类MyCar和MyFly,客户端通过动态代理生成该接口的代理类,这个代理类底层需要将相关信息通过IO传递到远程服务端,最终服务端调用MyCar和MyFly的方法,并将结果通过IO返回给客户端2 协议作用所谓使用哪种协议,就是指将数据以该协议要求的格式,发送出去,将要发送的内容包装成指定协议要求的格式,就叫网络封包使用RPC协议传递数据,就好像小火车(协议Myheader)拉货(

2021-01-26 15:30:39 229

原创 2. IO原理

1 VFSVFS:虚拟文件系统是一个软件,启动后被加载进内存树型结构,树上节点可以映射到不同文件上VFS的诞生是为了解耦,对于访问不同类型的文件,提供一套统一接口cd /#1. 看整个目录树ll#2. 查看不同目录挂在哪个物理设备df -h#3. Filesystem:物理文件系统,一个硬盘分为四个分区,分别为sda1、sda2、sda3、sda4#4. Mounted On:文件系统挂载在虚拟文件系统的哪个目录上#5. kernel首先将/dev/sda2挂载在了/

2021-01-26 14:58:48 299

原创 1. 计算机底层原理

1 相关书籍推荐读书原则:不求甚解,观其大略,大体读明白,先拿来用,用着用着,很多道理你就明白了底层知识相关书籍《编码:隐匿在计算机软硬件背后的语言》《深入理解计算机系统》C语言:《C程序设计语言》、《C Primer Plus》数据结构:《Java数据结构与算法》、《算法》、《算法导论》、《计算机程序设计艺术》操作系统:《Linux内核源码解析》、《Linux内核设计与实现》、《 30天自制操作系统》网络:《TCP/IP详解-卷一》编译原理:《编译原理》、《编程语言实现模式》数据库

2021-01-05 14:24:29 2162

原创 1. mycat

1 数据分片当一个数据库实例写操作过于频繁,很难由一台主机支撑时,我们可以将存放在同一个数据库实例中的数据分散存放到多个数据库实例中,从而提升性能数据分片方式水平切分(分表):将大表按某个字段的某种规则分散到多个节点库中,每个节点中包含一部分数据垂直切分(分库):一个数据库由很多表构成,每个表对应不同的业务,垂直切分是指按照业务将表进行分类并分不到不同的节点上混合切分:水平切分+垂直切分数据分片原则能不切分尽量不要切分如果要切分一定要选择合适的切分规则,提前规划好数据切分尽量通过

2020-12-28 21:41:35 282

原创 2. mysql日志、主从复制原理

1 mysql数据修改流程事务开始将数据从磁盘读取到内存commit写入undo log写入redo log,状态为prepare(落盘),获取prepare_commit_mutex锁在内存中修改数据(与磁盘中数据不一致,称为脏页)写入bin log(落盘)将redo log,状态改为commit(落盘),释放prepare_commit_mutex锁事务结束checkpoint:将脏页数据写入磁盘,不是在每个事务中进行,而是定期执行,因为修改数据页的操作是随机写,效率低,会导致整个

2020-12-28 21:39:07 135

原创 1. mycat

1 数据分片当一个数据库实例写操作过于频繁,很难由一台主机支撑时,我们可以将存放在同一个数据库实例中的数据分散存放到多个数据库实例中,从而提升性能数据分片方式水平切分(分表):将大表按某个字段的某种规则分散到多个节点库中,每个节点中包含一部分数据垂直切分(分库):一个数据库由很多表构成,每个表对应不同的业务,垂直切分是指按照业务将表进行分类并分不到不同的节点上混合切分:水平切分+垂直切分数据分片原则能不切分尽量不要切分如果要切分一定要选择合适的切分规则,提前规划好数据切分尽量通过

2020-12-28 21:33:29 97

原创 Spring Cloud

1 服务进化概述单体应用-> SOA ->微服务1.1 单体应用单体应用:所有功能全部打包在一起,应用大部分是一个war包或jar包优点:容易开发、测试、部署,适合项目初期试错缺点:都是由于所有代码在一起导致的新增一个功能会对其他功能造成隐患不利于维护编译部署耗时长可靠性差:某个小问题,比如小功能出现OOM,会导致整个应用崩溃。扩展受限:只能整体扩展,无法按照需要进行扩展,每个服务器中都必须是全量代码阻碍创新:单体应用是以一种技术解决所有问题,不容易引入新技术1

2020-12-05 16:37:52 160

原创 2. 网络分层

1 网络分层2 物理层物理层定义了接口标准、线缆标准、传输速率、传输方式等2.1 数字信号与模拟信号模拟信号(Analog Signal)连续,适合长距离传输抗干扰能力差,受到干扰时波形变形很难纠正数字信号(Digital Signal)离散(不连续)的信号,值只能为1或0,没有中间值,不适合长距离传输抗干扰能力强,受到干扰时波形失真可以修复2.2 数据通信模型局域网:网线不能超过100m,因此两台机器如果过长,需要通过多个集线器或交换机相连广域网

2020-11-18 17:07:39 527

原创 1. 网络基础

1 不同语言跨平台原理同一份代码可以在多个操作系统跑效果相同1.1 C/C++源代码为.c或.cpp(c plus plus)文件想要在不同平台执行,需要将源代码使用平台相关的编译器,编译成不同格式的可以被操作系统直接执行的可执行文件这些可执行文件实际上就是机器码1.2 Java源代码为.java文件想要在不同平台执行,需要将源代码编译成.class字节码字节码不能被操作系统直接执行,需要由操作系统上的JVM应用程序加载并翻译成机器码,最终再交给操作系统执行1.3 脚本语

2020-11-17 17:23:35 754

原创 OceanBase

1 集中式数据库与分布式数据库1.1 集中式数据库缺点成本高有性能上线无法横向扩展横向扩展:变成多个,即加服务器纵向扩展:单个变大,即加cpu、硬盘1.2 分库分表缺点应用侵入性某些SQL不支持无法保证数据一致性1.3 OceanBase优点高可用+数据一致依赖工业级Paxos协议实现PRO=0:Recovery Point Objective,可靠性的指标,不丢失数据,RTO<30:Recovery Time Objective,可用性的指标,30s内

2020-11-09 20:32:04 5749

原创 2. Kubernates

1 集群环境容器部署问题集群内每台机器应该分配几个容器如何根据业务量动态调整容器个数机器数量过多,部署工作量大2 容器编排工具docker-compose:单击容器编排工具docker swarm:docker官方提供的集群容器编排工具kubernetes:简称k8s,因为k和s之间有8个英文字母,google官方提供的容器编排工具,底层完全基于docker,与docker swarm属于竞争关系3 Kubernetes功能自动化容器部署和复制:只需要通过脚本规划好容器在哪些主机

2020-11-02 21:20:02 164 1

原创 1. Docker

1 容器简介1.1 容器与虚拟机区别虚拟机:需要安操作系统,为了安装一个很小的应用,却要先安一个非常大的操作系统,浪费资源,且部署麻烦容器:实际上就是先安装了一个满足应用运行的最小的操作系统,然后将应用运行在这个操作系统上1.2 容器的应用方便部署应用。例如买的MySql阿里云服务器,实际上买的是个虚拟机,但上面的MySql实际上是跑在虚拟机中的容器内的2 Docker简介Docker是提供应用打包、部署、运行的容器化平台,是容器化技术的代表利用Docker不仅可以创建容器,还可以

2020-10-28 16:40:40 133

原创 第3章:Oracle里的Cursor和绑定变量

1 Oracle里的CursorCursor直译过来就是"游标",由于Oracle是C语言写的,Cursor本质上就是C语言中的StructureCursor分为两种类型Shared Cursor与Session Cursor1.1 Oracle里的Shared Cursor1.1.1 Shared Cursor的含义1.1.1.1 库缓存:Library Cache库缓存指Shared Pool中的一块内存区域库缓存内存放了刚刚执行过的SQL语句和PL/SQL语句(存储过程、函数、包、

2020-10-14 16:10:23 386

原创 第2章:Oracle里的执行计划

1 什么是执行计划为执行sql,Oracle内部必须按顺序执行很多步骤,最后将其执行结果作为目标sql的执行结果返回给用户,Oacle用来执行目标sql语句的这些步骤的组合称为执行计划1.1 执行计划的三部分--准备工作create table t1(col1 number, col2 varchar2(1));create table t2(col2 varchar2(1), col3 varchar2(2));select /*+real_exp_example1*/ t1.col1, t

2020-10-14 16:09:50 1032

原创 第5章:Oracle里的统计信息

1 Oracle统计信息简介统计信息是一组存在数据字典中的数据,它门从多个维度描述了Oracle数据库里对象的详细信息CBO会利用统计信息来计算目标SQL的成本,最后从所有可能的执行路径中,选取成本最小的作为最终执行计划统计信息按描述的对象的不同分为六种表的统计信息索引的统计信息列的统计信息数据字典的统计信息系统的统计信息内部对象的统计信息2 收集与查看统计信息2.1 收集统计信息可以通过analyze或dbms_stats来收集统计信息2.1.1 anal

2020-10-13 22:45:36 267

原创 5. Vue

1 Vue简介官网:https://cn.vuejs.org/三大javascript mvc框架vueangularreact2 Vue基本使用需要先下载vue模块:npm install vue代码<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=d

2020-09-29 21:09:51 350

原创 4. jQuery

1 jQuery函数库简介学习手册:http://jquery.cuishifeng.cn/jQuery是一个JavaScript函数库2 jQuery函数库基本使用jquery-2.0以上版本不再支持IE 6/7/8使用前需要先下载其源码:http://www.jq22.com/jquery-info122,然后在页面中,通过script标签的src属性引入外部js库来进行使用也可以直接引入互联网上的js库进行使用一般情况下单位px可以省略中间带有横杠的样式(fon

2020-09-29 21:09:20 158

原创 3. JavaScript

1 JavaScript简介简称JS,是一门脚本语言(解释执行非编译执行),可以嵌套在静态页面中可以给静态页面添加一些动态效果。JS同样被用到了很多非浏览器环境中,例如node平台不同浏览器厂商会在浏览器中内置不同的解析器来解析JS语法,例如谷歌浏览器使用的就是V8解析器2 前段三层结构层:HTML样式层:CSS行为层:JavaScript3 JavaScript组成ECMAScript:定义了语法规范,例如用var定义变量、function定义函数、for定义循环等,欧洲计算机协

2020-09-29 21:08:30 925

原创 2. CSS

1 CSS简介CSS(Cascading Style Sheets),全称层叠样式表可以把HTML文件想向成是一个房子骨架,里面标签(块元素、行内元素)理解为搭建房子的砖,而CSS负责美化房子(进行装修),让你的静态页面(网站)相对好看一些2 选择器用于选择对指定的名称的标签(标签选择器)、指定的id的标签(id选择器)、指定的class的标签(class选择器),编写样式2.1 标签选择器标签名{},可以指定某种标签的样式,例如div{}代码<!DOCTYPE htm

2020-09-18 15:28:23 141

原创 1. HTML

1 自学网站https://www.w3school.com.cn/html/index.asphttps://www.runoob.com/2 HTML简介HTML(HeyperText MarkUp Language),全称为超文本标记语言,是世界上最简单的语言,HTML开发,其实就是利用标签(element)对页面进行布局<标签名>文本内容</标签名>HTML从1993至今,大大小小经历过五次重大变化,最近一次在2014称之为HTML5,即超文本标记语

2020-09-18 15:27:35 116

原创 Java程序员应该掌握的底层知识

1 相关书籍推荐读书原则:不求甚解,观其大略,大体读明白,先拿来用,用着用着,很多道理你就明白了底层知识相关书籍《编码:隐匿在计算机软硬件背后的语言》《深入理解计算机系统》C语言:《C程序设计语言》、《C Primer Plus》数据结构:《Java数据结构与算法》、《算法》、《算法导论》、《计算机程序设计艺术》操作系统:《Linux内核源码解析》、《Linux内核设计与实现》、《 30天自制操作系统》网络:《TCP/IP详解-卷一》编译原理:《编译原理》、《编程语言实现模式》数据库

2020-08-22 20:30:25 486

原创 dubbo

1 几种传输数据方式比较可读性、结构是严谨性:xml>json>序列化文本大小:xml>json>序列化解析速度:序列化>json>xml是否能跨平台xml、json可以序列化不可以2 基于dubbo RPC的微服务式架构2.1 微服务式架构将项目按功能拆分,传统架构所有功能在一起,会因为某个功能导致整体oom2.2 RPC远程过程调用协议(Remote Procedure Call Protocol),它是一种通过网络从远程计算机程序上请

2020-08-21 22:28:11 97

原创 XML

1 XML基础知识XML用于传输数据,而HTML用于格式化并显示数据XML语言没有预定义的标签、而HTML中标签都是预定义的,例如HTML文档只能使用在 HTML 标准中定义过的标签(如 <p>、<h1> 等)XML中,省略关闭标签是非法的,所有元素都必须有关闭标签XML中大小写敏感, 与标签 是不同的,必须使用相同的大小写来编写打开标签和关闭标签在 XML 中,有一些字符拥有特殊的意义,例如"<"解析器会把它当作新元素的开始,因此把字符 “&

2020-08-14 14:05:20 190

原创 3 springboot操作数据库

1 springboot配置数据源Dependencies中选择Spring Web、JDBC API、MySQL Driver配置数据源:resources下创建application.yamlspring: datasource: username: root password: c50hst url: jdbc:mysql://localhost:3306/demo?serverTimezone=UTC&useUnicode=true@characte

2020-08-06 18:58:52 100

原创 2 springboot web开发

1 JRebel开发web项目的时候,需要频繁的修改web页面,频繁的重启变得很麻烦,可以在idea中集成热部署插件:JRebel,改动代码之后不需要重新启动应用程序安装Preferences–Plugins–搜索JRebel安装好后重启idea激活JRebel生成一个GUID:https://www.guidgen.com/打开JRebel激活面板:Help–JRebel–Activation–Team URL–填写https://jrebel.qekang.com/{GUID}

2020-08-06 18:58:22 73

原创 1 springboot简单使用

1 spring boot简介用于简化新Spring应用的初始搭建以及开发过程springboot内建了tomcat,不需要再将项目部署在tomcat上,直接打成一个jar包启动即可微服务:cnblogs.com/liuning8023/p/4493156.htmlspringboot中文文档:https://github.com/DocsHome2 创建springboot项目File–New–Project–Spring Initializr–Web–Spring Web–删除.mv

2020-08-06 18:57:48 123

原创 2. Zookeeper

1 ZooKeeper简介官网:https://zookeeper.apache.org/是协调分布式应用程序而产生的一种分布式的协调服务。ZK暴露给客户端一组简单的原语,客户端可以通过它们实现同步、配置维护等功能ZK比redis实现分布式锁更方便ZK中数据保存在内存中,因此性能非常高1.1 ZK的命名空间与数据结构ZK的命名空间类似标准文件系统中的命名空间。每个数据节点都由路径来标识,这样就保证了同名数据可以在不同位置上存储多份但和标准文件系统不同的是,ZK命名空间中的节点可以存放数据

2020-07-25 17:04:16 446

原创 4. Redis常见面试问题与API使用

1 面试常见问题1.1 击穿服务常见架构通常请求需要查询数据,先尝试从redis中查询,如果能取到直接返回如果取不到,改为从数据库中取,取到数据后更新缓存并返回结果如果数据库中也取不到,直接返回空结果[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MI8q8VUO-1594904374751)(/Users/wusihan/Desktop/截屏2020-07-15 下午8.37.08.png)]redis作为缓存时,其key可能会由于过期、lru、lf

2020-07-16 20:59:42 131

原创 linux上oracle搭建

前情提要:生产环境数据库数据过多,为减少数据库空间,将一些历史查询数据放到另一个数据库中,由于一个服务没法根据不同情况访问不同数据库,因此新搭建一套后台服务,该服务指向新的数据库1 基于linux环境的oracle安装1.1 环境准备新建一个oinstall组groupadd oinstall新建一个dba组groupadd dba在/home/orcle下建立一个名为oracle的用户,其主组是oinstall,附属组是dbauseradd -g oinstall -G

2020-07-15 09:18:07 486

原创 3. Redis集群

1 单机、单节点、单实例通用问题单点故障容量有限压力(来自连接数、cpu)2 解决方案:AKF拆分原则可扩展艺术一书中提供的设计微服务时的原则之一,是将大规模系统拆分成多个小规模系统时,所应该遵守的原则。遵守该原则可以解决大规模系统的容量、性能、模块数量增长带来的系统复杂度等问题。防止系统设计的不合理导致需要将系统进行反复地重构2.1 基于X轴的拆分全量,镜像复制,用于解决单点故障问题会引发数据一致性的问题,也就是几台节点数据可能不一致一致性问题解决方案强一致性

2020-07-14 05:58:41 277

原创 2. Redis进阶

1 管道正常情况下,当客户端输入一个命令,需要等待服务器返回命令的结果才能继续输入下一个命令,即使redis自身处理非常快,但如果客户端和服务器之间网络很差,就会极大影响整个通讯的效率使用管道可以一次性向服务器发送多个命令,中间不需要服务器将结果返回给客户端,从而可以减少系统调用与IO#1. 安装netcat,该工具可以方便的与某个地址下的某个端口建立socket链接yum install nc#2. 使用管道|,将echo命令的输出,作为nc到本机6379建立的socket连接的输入1

2020-07-08 22:43:39 151

原创 1. Redis简介

1 基础介绍从磁盘或读取数据时,主要时间浪费在寻址上,磁盘的寻址速度为ms级,而内存寻址速度为ns级,差了1000000倍,因此从内存中读取数据效率比从硬盘中读取高的多磁盘有磁道和扇区,一扇区512字节,操作系统无论一次需要读取多少字节,硬盘都至少每次返回4k个字节最初数据存放在文件中,可以通过grep、awk命令,甚至java程序去读文件,文件越大,读取越慢,硬盘I/O为瓶颈后来数据库出现,使用如下方案解决查找数据慢的问题data page:数据库中,数据最小的存储单位,大小为4K,orac

2020-07-08 22:42:39 161

原创 第一章:Oracle里的优化器

1 什么是oracle里的优化器优化器是oracle数据库中内置的一个核心子系统,可以理解为oracle数据库中的一个核心模块,或一个核心功能组件,其目的是为了得到目标sql的执行计划优化器分为RBO(基于规则的优化器)和CBO(基于成本的优化器)两种,10g之后使用的都是CBO不再使用RBOsql语句执行过程:用户–解析–查询转换–CBO/RBO–执行计划–实际执行–用户其中查询转换和CBO/RBO组合起来为优化器1.1 RBOOracle11g已经不再使用它,因为他难以调整

2020-07-01 06:14:47 1365

原创 2. Jdom

2 jdomjodm提供了一系列方法对xml进行操作xml文件<?xml version="1.0" encoding="UTF-8"?><HD> <disk name="C"> <capacity>8G</capacity> <directories>200</directories> <files>1580</files> </disk>

2020-06-30 07:14:16 123

原创 1.log4j

1 log4j1.1 Log4j简介使用System.out.println的局限性无法在不修改代码前提下,控制日志开关1.2 示例1导入log4j的jar包(log4j-1.2.17.jar)Log4jTestimport org.apache.log4j.BasicConfigurator;import org.apache.log4j.ConsoleAppender;import org.apache.log4j.Logger;import org.apache.log4j.P

2020-06-30 07:13:43 164

原创 git&github

1 git简介git为分布式版本控制系统,svn是集中式版本控制系统集中式:版本库存放在中央服务器,工作时,用自己电脑先从中央服务器取得最新的版本,干完活后,再把自己的活推送给中央服务器分布式版本控制系统:没有中央服务器,每个人的电脑上都是一个完整的版本库,当你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。但在实际使用分布式版本控制系统时,其实很少在两人之间的电脑上推送版本库的修改,因为可能两人不在一个局域网内,两台

2020-06-29 20:55:11 176

原创 4. mybatis-plus

04mybatis-plus的使用​ MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。​ 特性:无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求支持

2020-06-26 10:08:29 174

原创 3. 三大框架整合

1. 三大框架整合在老期的项目中,一般都是使用ssm项目做开发的,虽然现在的主流是使用springboot进行开发,但是ssm的基本整合还是需要掌握的1.1 导入pom文件导入spring的pom依赖:就是原来用过的所有的<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/

2020-06-25 22:14:00 159

原创 离线安装enhance class decompiler

插件官网:https://github.com/ecd-plugin/ecd,在网页内releases标签下选择最新版本下载下载site.xml:https://github.com/ecd-plugin/update将site.xml放入之前下载好的安装包内eclipse内离线安装:Help–Install New Software勾选Debug Settings中内容,设置反编译后内容用于debug,并且要求反编译后的行号和源文件行号对齐,方便调试代码跟踪设置class文件默认使用dec.

2020-06-17 09:57:22 1336

空空如也

空空如也

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

TA关注的人

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