自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

夏季版

知识在于积累

  • 博客(558)
  • 资源 (9)
  • 收藏
  • 关注

原创 如何理解数据库的隔离级别

首先是因为有事务!关于事务的本质,以前分析过了,所以不再解释然后是因为有并发!如何理解呢?举一个例子,一个事务=两个用户之间的转账操作并发=两个操作者都进行自己的事务,如下所示正是因为并发与事务的同时存在,会导致当多个用户在操作数据库的时候,会出现很多问题,出现一个问题,解决一个问题,然后又发现另一个问题。在这个解决问题的过程中,发现各个阶段都有优缺点,故将每个阶段的处理方案称为一种隔离级别,所以每个隔离级别都解决了某种问题,同时也遗留了某些问题。

2025-05-08 11:49:57 292

原创 关系型数据库能通过日志来实现事务的本质思考

将一个事物中要做的多个独立操作 都 写到一个日志文件中!然后在这个日志文件中记录好每个独立操作在操作前、操作中、操作后的数据情况,然后将这个日志文件看做一个整体,如果这个整体是完整的(通过语法来约束),那么就称为一个正常的事务。而如果不完整,由于日志文件中会记录每个独立操作在各个阶段的数据情况,就可以将数据进行还原,也就是回滚!操作人员进行转账操作,从账号A转10元到账号B,此时来进行拆解就会发现,其实这个转账操作 对于 数据库而言,其实数据库是不理解的!本质上,对数据库而言,每个操作都是一个独立的操作!

2025-05-08 10:49:31 116

原创 《深入理解计算机系统》阅读笔记之第十二章 并发编程

这就要涉及到单线程模型存在的问题,以Redis为例,从Redis的特性来看,其只是涉及到了内存和网络IO,没有涉及到CPU的运算,那这种情况下,使用单线程+IO多路复用就特别的合适!因为Redis在处理的时候,涉及到的CPU运算基本很少,就能很大的提高性能。而假如Redis的单线程在处理的时候,这个单线程不仅要处理内存和网络IO,还需要做逻辑运算来耗费大量CPU,这就会导致Redis的性能急剧下降,那这个时候就可以利用线程池的方式来进行缓解。3.面对不同的场景,没有万能方案!1.首先,IO多路复用是什么?

2025-04-25 15:53:34 231

原创 《深入理解计算机系统》阅读笔记之第十一章 网络编程

2025-04-25 15:12:31 209

原创 《深入理解计算机系统》阅读笔记之第十章 系统级IO

2025-04-25 14:58:28 112

原创 《深入理解计算机系统》阅读笔记之第九章 虚拟内存

2025-04-25 14:50:14 86

原创 《深入理解计算机系统》阅读笔记之第八章 异常控制流

2025-04-25 14:35:49 76

原创 《深入理解计算机系统》阅读笔记之第七章 链接

2025-04-25 14:29:13 211

原创 《深入理解计算机系统》阅读笔记之第六章 存储器层次结构

2025-04-25 14:20:04 80

原创 《深入理解计算机系统》阅读笔记之第五章 优化程序性能

备注:那能写出编译器的人可真是的天才!

2025-04-25 14:13:36 195

原创 《深入理解计算机系统》阅读笔记之第四章 处理器体系结构

备注:怎么感觉讲的还是《编码》这本书里面提到的知识点?

2025-04-25 13:51:27 110

原创 《深入理解计算机系统》阅读笔记之第三章 程序的机器级表示

本章没有细看,其中主要以C语言中的一些汇编等知识来做介绍。算是一种对C语言的相关底层知识的详细介绍吧。但是从原理上理解我觉得《编码》这本书更好理解!只是《编码》这本书只要是进行原理的剖析,而相关的技巧可能介绍的比较少。

2025-04-25 11:45:04 178

原创 《深入理解计算机系统》阅读笔记之第二章 信息的表示和处理

1.现代计算机存储和处理的信息以二值信号表示。2.无符号(unsigned)编码基于传统的二进制表示法表示大于或者等于零的数字。3.补码( two’ s-complement)编码是表示有符号整数的最常见的方式,有符号整数就是可以为正或者为负的数字。4.浮点数(floatingpoint)编码是表示实数的科学记数法的以2为基数的版本。5.计算机的表示法是用有限数量的位来对一个数字编码,因此,当结果太大以至不能表示时,某些运算就会溢出(overflow)。6.

2025-04-25 10:53:40 779

原创 《深入理解计算机系统》阅读笔记之第一章 计算机系统漫游

并发运行,则是说一个进程的指令和另一个进程的指令是交错执行的。文件是对I/O设备的抽象表示,虚拟内存是对主存和磁盘I/O设备的抽象表示,进程则是对处理器、主存和I/O设备的抽象表示。hello.c的表示方法说明了一个基本思想:系统中所有的信息一一包括磁盘文件、 内存中的程序、内存中存放的用户数据以及网络上传送的数据,都是由一串比特表示的。每个进程看到的内存都是一致的,称为虚拟地址空间。在现代系统中,一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

2025-04-24 17:55:21 830

原创 Java1.8原生http 与SSM Jetty性能对比

1.go1.20 QPS 4.5k左右2.nginx QPS 2.5k左右3.python3.6 QPS 381左右4.java1.8 QPS 5.2k左右5.java1.8+ SSM框架+jetty 线程池200线程:1k左右6.java1.8+ SSM框架+jetty 线程池1000线程:1.8k左右如此看来,java这太老的SSM框架、以及这种框架使用的线程池模式,对QPS的影响还真的大!

2025-04-22 16:22:57 333

原创 Nginx openresty web服务 与 Go 原生web服务性能对比

1.go1.20 QPS 4.5k左右2.nginx QPS 2.5k左右3.python3.6 QPS 381左右4.java1.8 QPS 5.2k左右难不成是我测试的有问题?怎么java比go的QPS居然还要高?(有可能是调优问题+环境问题,go语言的性能可能在更高配置的环境下可能性能更高)该数据仅供参考。

2025-04-22 15:46:49 870

原创 kubernetes如何实现自定义HAP之QPS

1 背景公司本来用的是普通的基于CPU和内存的HPA扩容策略,但是运维发现效果并不是太好,所以开发这边花点时间去研究一下自定义HPA,希望达到的目的大概是这样:比如一个service下当前只有一个pod,这个pod能抗的并发是100,那么假如当前的并发变成了300,那么此时HPA就应该要能监测到这个变化,将pod扩容为3个。2 理论基础1 普罗米修斯第一种 Metrics,是宿主机的监控数据。这部分数据的提供,需要借助一个由 Prometheus 维护的Node Exporter 工具。一般来说,

2022-05-10 18:24:21 1192

原创 Java提供了哪些IO方式? NIO如何实现多路复用?

Java IO 方式有很多种,基于不同的 IO 抽象模型和交互方式,可以进行简单区分。首先,传统的 java.io 包,它基于流模型实现,提供了我们最熟知的一些 IO 功能,比如 File 抽象、输入输出流等。交互方式是同步、阻塞的方式,也就是说,在读取输入流或者写入输出流时,在读、写动作完成之前,线程会一直阻塞在那里,它们之间的调用是可靠的线性顺序。java.io 包的好处是代码比较简单、直观,缺点则是 IO 效率和扩展性存在局限性,容易成为应用性能的瓶颈。很多时候,人们也把 java.net 下面

2021-08-18 17:31:34 342

原创 如何保证集合是线程安全的? ConcurrentHashMap如何实现高效地线程安全?

Java 提供了不同层面的线程安全支持。在传统集合框架内部,除了 Hashtable 等同步容器,还提供了所谓的同步包装器(Synchronized Wrapper),我们可以调用 Collections 工具类提供的包装方法,来获取一个同步的包装容器(如 Collections.synchronizedMap),但是它们都是利用非常粗粒度的同步方式,在高并发情况下,性能比较低下。另外,更加普遍的选择是利用并发包提供的线程安全容器类,它提供了:各种并发容器,比如 ConcurrentHashMap、Co

2021-08-18 17:30:37 384

原创 对比Hashtable、HashMap、TreeMap有什么不同?

Hashtable、HashMap、TreeMap 都是最常见的一些 Map 实现,是以键值对的形式存储和操作数据的容器类型。Hashtable 是早期 Java 类库提供的一个哈希表实现,本身是同步的,不支持 null 键和值,由于同步导致的性能开销,所以已经很少被推荐使用。HashMap 是应用更加广泛的哈希表实现,行为上大致上与 HashTable 一致,主要区别在于 HashMap 不是同步的,支持 null 键和值等。通常情况下,HashMap 进行 put 或者 get 操作,可以达到常数时

2021-08-18 17:29:08 270

原创 对比Vector、ArrayList、LinkedList有何区别?

这三者都是实现集合框架中的 List,也就是所谓的有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。Vector 是 Java 早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。Vector 内部是使用对象数组来保存数据,可以根据需要自动的增加容量,当数组已满时,会创建新的数组,并拷贝原有数组数据。ArrayList 是应用更加广泛的动态

2021-08-18 17:28:25 185

原创 int和Integer有什么区别?

int 是我们常说的整形数字,是 Java 的 8 个原始数据类型(Primitive Types,boolean、byte 、short、char、int、float、double、long)之一。Java 语言虽然号称一切都是对象,但原始数据类型是例外。Integer 是 int 对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。在 Java 5 中,引入了自动装箱和自动拆箱功能(boxing/unboxing),Java 可以根据上下文

2021-08-18 17:26:39 424

原创 谈谈 Java 反射机制,动态代理是基于什么原理?

反射机制是 Java 语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似机制做到的,比如用来包装 RPC 调用、面向切面的编程(AOP)。实现动态代理的方式很多,比如 JDK 自身提供的动态代理,就是主要利用了上面提到的反射机制。还有其他的实现方式,比

2021-08-18 17:25:27 240

原创 String、StringBuffer、StringBuilder有什么区别?

String 是 Java 语言非常基础和重要的类,提供了构造和管理字符串的各种基本逻辑。它是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。也由于它的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象。由于字符串操作的普遍性,所以相关操作的效率往往对应用性能有明显影响。StringBuffer 是为解决上面提到拼接产生太多中间对象的问题而提供的一个类,我们可以用 append 或者 add 方法,把字符串添加到已有序列的末尾或者指定

2021-08-18 17:21:45 181

原创 强引用、软引用、弱引用、幻象引用有什么区别?

不同的引用类型,主要体现的是对象不同的可达性(reachable)状态和对垃圾收集的影响。所谓强引用(“Strong” Reference),就是我们最常见的普通对象引用,只要还有强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了引用的作用域或者显式地将相应(强)引用赋值为 null,就是可以被垃圾收集的了,当然具体回收时机还是要看垃圾收集策略。软引用(SoftReference),是一种相对强引用弱化一些的引用,可以让对象豁免一

2021-08-18 17:20:08 186

原创 谈谈 final、finally、 finalize 有什么不同?

final 可以用来修饰类、方法、变量,分别有不同的意义,final 修饰的 class 代表不可以继承扩展,final 的变量是不可以修改的,而 final 的方法也是不可以重写的(override)。finally 则是 Java 保证重点代码一定要被执行的一种机制。我们可以使用 try-finally 或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlock 锁等动作。finalize 是基础类 java.lang.Object 的一个方法,它的设计目的是保证对

2021-08-18 16:59:27 166

原创 Exception和Error的区别

Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、.

2021-08-18 16:58:09 507

原创 17分析veth pair设备创建后无法互ping的问题

1、创建了一个veth pair设备,且设置ip地址ip link add veth0 type veth peer name veth1ip addr add 192.168.1.101/24 dev veth0ip addr add 192.168.1.102/24 dev veth1ip link set veth0 up ip link set veth1 up2、创建完成后此时两张网卡情况如下所示:3、但是此时通过veth0这张网卡去ping veth1,发现不通 ping -

2021-08-11 11:47:18 1367 6

原创 16 如何找到docker中容器网卡外联的veth pair的另一张网卡

1、背景知识比如docker或者kubernetes的calico网络插件,其实都使用到了veth pair设备,即容器里面的网卡是veth pair的一端,宿主机上的某张网卡是veth pair的另一端,那么假如我想知道到底对应的是宿主机上的哪张网卡有什么办法吗?有的,方法好几种,介绍最方便的一种2、步骤:a、进入到容器,执行如下命令:ip link show eth0b、注意这里输出的161: eth0@if162,其中161是eth0接口的index,162是和它成对的veth的index

2021-08-11 10:02:41 1057

原创 15 Service与Ingress

这种全局的、为了代理不同后端 Service 而设置的负载均衡服务,就是 Kubernetes 里的 Ingress 服务。所以,Ingress 的功能其实很容易理解:所谓 Ingress,就是 Service 的“Service”。这种本质,其实就是请求先发送到了ingress,然后ingress帮你根据规则进行转发。在实际的使用中,你只需要从社区里选择一个具体的 Ingress Controller,把它部署在 Kubernetes 集群里即可。然后,这个 Ingress Controller 会

2021-08-10 13:46:56 414

原创 14 kubernetes如何从外界连通Service

1、方式一: nodePort方式2、方式二:公有云上的 Kubernetes 服务。这时候,你可以指定一个 LoadBalancer 类型的 Service公有云提供的 Kubernetes 服务里,都使用了一个叫作 CloudProvider 的转接层,来跟公有云本身的 API 进行对接。所以,在上述 LoadBalancer 类型的 Service 被提交后,Kubernetes 就会调用 CloudProvider 在公有云上为你创建一个负载均衡服务,并且把被代理的 Pod 的 IP 地址配置给

2021-08-10 13:39:47 262

原创 13 kubernetes中Service 与 DNS 的关系

查看当前集群中的service那么此时其他容器要访问这个service,就可以通过这个DNS来访问:portalms-server-svc.wisecloud.svc.cluster.local这其实就是一个coreDNS服务做到的,那么总得有个映射吧,这个映射在哪呢?通过查看coreDNS的服务,发现对应的deployment这里进行了一个挂载发现这里是通过configMap的方式挂载的,那么就需要查看一下这个configMapkubectl get configMap -n kube-s

2021-08-10 11:42:25 281

原创 12 kubernetes中service的实现原理

1、说明Kubernetes 之所以需要 Service,一方面是因为 Pod 的 IP 不是固定的,另一方面则是因为一组 Pod 实例之间总会有负载均衡的需求2、service原理一之“kube-proxy组件+iptables规则”kube-proxy 通过 iptables 处理 Service 的过程,其实需要在宿主机上设置相当多的 iptables 规则。而且,kube-proxy 还需要在控制循环里不断地刷新这些规则来确保它们始终是正确的。不难想到,当你的宿主机上有大量 Pod 的时候,

2021-08-10 11:08:36 399

原创 11理解kubernetes的calico网络插件

1、Flannerl的host-gw模式:假设现在node1上的容器Infra-container-1要访问node2上的Infra-container-2,其中节点1的网段是10.168.0.2/24,节点2的网段是10.168.0.3/24,这也就意味着节点之间是可以通过eth0网卡进行通信的。且节点1的cni0的网段是10.244.0.1/24,节点2的cni0的网段是10.244.1.1/24。此时会在宿主机上创建这些路由规则:(比如节点1)这意味着目标地址是10.244.1.0/24这个

2021-08-10 10:31:11 350

原创 10 docker容器网络原理

1、什么是网络栈网络栈包括了网卡、回环设备、路由表和iptables规则2、容器声明直接使用宿主机的网络栈使用如下命令来启动一个容器,声明使用宿主机的网络栈docker run -d --net=host --name nginx-host nginx容器启动后如下所示:查看一下宿主机上的80端口,发现80端口已经被占用了,而刚才在启动nginx之前该端口是没有被占用的。访问一下该服务,确实能访问通。此时说明了,容器是可以直接使用宿主机的网络的。2、容器如何拥有自己的网络栈网桥(b

2021-08-09 10:18:15 257

原创 9 如何将网元服务制作成一个chart并上传到私有仓库

1、首先先给出一个chart模板吧csdn不支持文件上传,自动去获取吧:文档:3 portalms的chart模板.note链接:http://note.youdao.com/noteshare?id=6bdec69d7ea7006a16b89ba18ccefc4a&sub=1C59F7DBE76843BC8AE58B73EB2CDFF22、接下来说一下这个chart里面的主要功能Chart.yaml文件里面的内容没有什么好说的,配置信息而已。values.yaml文件里面需要特别注意

2021-08-06 17:12:22 285

原创 kubernetes+rancher+docker+helm+harbor搭建云平台服务思路小结

1 架构介绍一下架构中的每个组件的作用吧1、Jenkins自动化工具2、gitlab存储代码3、docker镜像:相当于一个携带了运行环境的安装包容器:运行启动的镜像,就是一个容器4、harbor私有的镜像仓库,用来存储镜像。docker仓库的企业版(https://hub.docker.com/)5、k8s集群容器,就是进程;容器镜像“.exe”安装包。Kubernetes 就是操作系统!所以k8s集群可以简单理解为多个操作系统,就是用来运行容器的!只是k8s额外提供了很多其他

2021-08-06 16:57:35 990

原创 8 pod的调度

1、先回顾一下我当前k8s集群里面的所有资源:kubectl get all --all-namespaces2、为什么需要调度功能?很好理解,假如我线上有一个集群,其中一台机器的CPU和内存特别高,而另一台的性能很差,而如果只是简单的创建一个pod的话,显然这个pod是会根据一个算法随机调度到一个主机上的,但是我这个服务是一个特别耗cpu和内存的服务,我自然希望他调度到一台好点的机器上去。那么就需要定向调度了。通过noeName字段来定向调度:apiVersion: v1kind: Pod

2021-08-05 18:41:30 218

原创 7 实战云平台开发人员的流程-如何制作一个chart

1、如云平台整体架构图所示,下面这里是开发人员的流程图。接下来就来搭建一下环境。2、首先gitlab、harbor的搭建,这里就忽略掉了3、

2021-08-05 16:25:42 607 2

原创 6 pod的生命周期

1、流程图如下所示:2、初始化容器apiVersion: v1kind: Podmetadata: name: pod-initcontainer namespace: testspec: containers: - name: main-container image: nginx:1.17.1 ports: - name: nginx-port containerPort: 80 initContainers: - name:

2021-08-05 14:06:34 112

SQLAlchemy详细教程

sqlAlchemy教程

2017-07-07

postgresql数据库手动安装以及主从配置

postgresql数据库手动安装以及主从配置

2017-08-07

nodejs开发微信公众号第二天代码

慕课网开发微信第二天源代码

2016-12-12

postgresql数据库自动化单机主从部署-吴永胡

postgresql数据库自动化单机主从部署

2017-08-09

redis操作工具类

封装了所有对redis操作的工具

2017-04-26

nodejs开发微信公众号第三天代码 可以实现推送消息

nodejs开发微信公众号

2016-12-13

java项目中cas和authcenter的集成

CasClientUtil.java

2017-06-26

redis自动化安装

支持redis单机,主从部署,文档齐全,yijia

2017-08-16

空空如也

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

TA关注的人

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