自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Golang语言设计模式的实现—代理模式

代理模式是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。它的基本思想是创建一个代理对象,进行逻辑处理的原对象通常被称作 服务对象,代理要跟服务对象实现相同的接口,才能让客户端傻傻分不清自己使用的到底是代理还是真正的服务对象,这样一来代理就能在客户端察觉不到的情况下对服务对象的处理逻辑进行增强。

2023-06-30 17:48:08 1057

原创 Kong 快速入门

Kong快速入门

2023-02-22 14:34:49 590 1

原创 Golang语言设计模式的实现—工厂模式

当对象的创建逻辑比较复杂,不只是简单的 new 一下就可以,而是要组合其他类对象,做各种初始化操作的时候,推荐使用工厂方法模式,将复杂的创建逻辑拆分到多个工厂类中,让每个工厂类都不至于过于复杂。由于 Go 本身是没有构造函数的,一般而言我们采用 New() 的方式创建对象/接口,当它返回的是接口的时候,其实就是简单工厂模式。1.工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。和简单工厂模式的区别:将工厂抽取出来,形成一个抽象的工厂,返回一个抽象的产品类。

2022-11-14 16:20:29 619

原创 Golang语言设计模式的实现—单例模式

除了懒汉式和饿汉式以外,在golang语言中有一种更加优雅的方法实现单例模式,使用once.Do可以确保 instance 实例全局只被创建一次,once.Do 函数还可以确保当同时有多个创建动作时,只有一个创建动作在被执行。饿汉方式指全局的单例实例在包被加载时创建,而懒汉方式指全局的单例实例在第一次被使用时创建,我们可以看到,这种命名方式非常形象地体现了它们不同的特点。因为单例模式保证了实例的全局唯一性,而且只被初始化一次,所以比较适合全局共享一个实例,且只需要被初始化一次的场景。要求生成唯一的序列号。

2022-11-04 10:43:37 463 2

原创 进程间的通信方式

进程通信就是进程之间的信息交换进程是资源管理的基本单位,因此各个进程拥有的内存地址空间相互独立。

2022-08-20 10:12:02 701

原创 深入理解Golang之Map

Map的实现主要有两种方式哈希表(hashtable)和搜索树(searchtree)。例如Java中的hashMap是基于哈希表实现,而C++中的Map是基于一种平衡搜索二叉树——红黑树而实现的。Go中map的基于哈希表(也被称为散列表)实现。...

2022-07-30 21:41:46 1095 2

原创 IPV4和IPV6是什么?

二进制只有0或1,每逢2的时候会进位,对照表如下举个例子因此十进制255的二进制是八个111111111IPV4地址是由4组8位二进制组成的,每一组的十进制数字范围都是0到255IP网络号+主机号IP地址划分为A,B,C,D,E类,D和E是特殊类为了解决简单分类导致的IP分配不合理,子网掩码诞生子网掩码它其实就是为了区分网络号和主机号的,可以用来表示下面四个IP地址同属于一个网络首先将十进制先转换为二进制,用1来锁定相同的位数,不相同的位数用0表示子网掩码如下。...

2022-07-20 09:17:57 884

原创 golang之GMP调度模型

G:一个G代表一个goroutine,协程的本质是用户态的线程,用户对其有控制权限,内存占用少,切换代价低。M:内核态线程,一个M代表了一个内核线程,等同于系统线程,所有的G都要放在M上才能运行。P:逻辑处理器,可以承载若干个G,并且使这些G适时的与M对接,一个P代表了M所需的上下文环境。P的个数取决于设置的GOMAXPROCS, go新版本默认使用最大内核数,比如你有8核处理器,那么P的数量就是8M的数量和P不一定匹配,可以设置很多M,M和P绑定后才可运行,多余的M处于休眠状态。系统会通过调度器从全

2022-07-14 09:08:45 1095

原创 casbin模型

subject(sub访问实体),object (obj访问的资源) 和 action (act访问的方法) eft (策略结果 一般为空,默认指定allow) 还可以定义为denyp:策略 一般存储到数据库,因为会有很多m:匹配规则 会把r和p按照匹配原则进行匹配,从而返回匹配结果 (eft)如果不定义会返回allow 如果定义过了,会返回我们定义过的那个结果r:请求e:影响 这里的规定是定死的role_definition 角色域g= _ , _ 表示以角色为基础,前者是后者

2022-06-13 22:09:10 350

原创 Mysql的锁

目录MySQL加锁的目的是什么MySQL的锁是基于什么实现的并发事务访问相同记录读读情况写写情况读写情况MySQL加锁的目的是什么数据库的锁是为了解决事务的隔离性问题,为了让事务之间相互不影响,每个事务进行操作的时候都会对数据加上一把特有的锁,防止其他事务同时操作数据。MySQL的锁是基于什么实现的数据库里面的锁是基于索引实现的,在Innodb中我们的锁都是作用在索引上面的,当我们的SQL命中索引时,那么锁住的就是命中条件内的索引节点(行锁),如果没有命中索引的话,那我们锁的就是整个索引树(表锁)

2022-05-22 10:41:52 382

原创 Mysql之MVCC

目录什么是 MVCCMVCC 的实现原理面试题之:MVCC能否解决幻读?什么是 MVCCMVCC, 即多版本并发控制。MVCC 的实现,是通过**保存数据在某个时间点的快照来实现的**。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。MVCC 的实现原理对于 InnoDB ,聚簇索引记录中包含 3 个隐藏的列:ROW ID:隐藏的自增 ID,如果表没有主键,InnoDB 会自动按 ROW ID 产生一个聚集索引树。事务 ID:记录最后一次修改该记录的事务 ID。

2022-05-15 13:59:37 881

原创 Innodb 引擎和 Myisam 引擎对索引的实现

目录写在前面——索引类型主键索引唯一索引常规索引全文索引Innodb 引擎和 Myisam 引擎对索引的实现底层分析MyISAM 引擎的底层实现(非聚集索引方式)Innodb 引擎的底层实现(聚集索引方式、非聚集索引)为什么 InnoDB 只在主键索引树的叶子节点存储了具体数据,但是其他索引树却不存具体数据呢,而要多此一举先找到主键,再在主键索引树找到对应的数据呢?为什么InnoDB 和MyISAM 对比,MyISAM 查询性能更好?写在前面——索引类型在MySQL数据库,将索引的具体类型主要分为以下几

2022-05-09 23:02:14 791

原创 隐藏实用的GitHub使用技巧

目录技巧1:在Github个人资料页面上启用自述文件技巧2:快速有效的搜索技巧技巧3:用文件查找器快速、轻松地搜索仓库中的文件技巧4:代码阅读技巧技巧5:无敌技巧——在线运行项目GitHub是程序员必备的交友,代码托管平台。这篇文章介绍并演示了几个GitHub使用技巧,我希望它们也能帮助你更有效地使用GitHub。技巧1:在Github个人资料页面上启用自述文件启用它非常简单,你只需要创建一个与你的Github账户用户名相同的新仓库,这是一个特殊的仓库,你可以用它在你的Github配置文件中添加REA

2022-05-08 15:15:33 1327 1

原创 Redis的线程模型

一、Redis为何选择单线程在Redis6.0之前,Redis的核心网络模型选择单线程来实现正如redis官网上说,对于一个 DB 来说,CPU 通常不会是瓶颈,因为大多数请求不会是 CPU 密集型的,而是 I/O 密集型。具体到Redis 的话,如果不考虑 RDB/AOF 等持久化方案,Redis是完全的纯内存操作,执行速度是非常快的,因此这部分操作通常不会是性能瓶颈,Redis 真正的性能瓶颈在于网络 I/O,也就是客户端和服务端之间的网络传输延迟,因此 Redis 6.0版本前选择了单线程的 I

2022-04-30 10:14:54 3377

原创 Golang 垃圾回收机制详解

目录一、垃圾回收概念二、常用的垃圾回收算法引用计数标记——清除算法三色标记算法标记——整理算法分代收集算法三、屏障技术四、运行模式1.增量式垃圾回收2.并行垃圾回收3.并发垃圾回收参考一、垃圾回收概念有些编程语言(C、C++)需要手动释放那些不再需要的、分配在堆上的数据,这叫做“手动垃圾回收”,但是如果数据释放过早,后续对数据的访问就会出错,因为被释放的内存可能已经被清空或者重新分配;如果忘记释放,数据会一直占用内存,出现“内存泄漏”,所以越来越多的编程语言支持“自动垃圾回收”。由运行时识别不再有用的

2022-04-25 12:44:17 2708

原创 操作系统——银行家算法

一、写在前面的银行家算法银行家算法的由来:银行家算法是操作系统中最有代表性的死锁避免方案,操作系统作为裸机上安装的第一层软件,起着控制和管理计算机内部软硬件资源,合理组织计算机工作流程,提高计算机工作效率,用户和计算机硬件接口的重要作用。因此操作系统既要保证系统资源的合理分配提高系统资源利用率,同时又要避免死锁等不安全状况的出现,如果这些不安全状况出现操作系统还要解决这些问题,让系统回到安全状态。银行家算法就是在这样的背景下应运而生的。银行家算法的核心思想:在进程提出资源申请时,先预判此次分配

2022-04-23 22:15:36 6925 3

原创 总结计算机网络超全面试题

总结计算机网络超全面试题OSI七层模型:大而全,但是比较复杂、而且是先有了理论模型,没有实际应用。TCP / IP四层模型:是由实际应用发展总结出来的,从实质上讲,TCP/IP只有最上面三层,最下面一层没有什么具体内容,TCP/IP参考模型没有真正描述这一层的实现。五层模型:五层模型只出现在计算机网络教学过程中,这是对七层模型和四层模型的一个折中,既简洁又能将概念阐述清楚。2. TCP和UDP的区别?

2022-04-16 10:16:13 1079

原创 TCP三次握手、四次挥手

TCP三次挥手,四次握手

2022-03-27 17:21:59 3850

原创 git的安装与具体使用

目录Git是什么图解工作原理 / 流程Git配置软件下载启动GitGit配置流程详解1.查看代码变动(红色表示这些文件进行了修改)2.提交修改到暂存区3.提交暂存区代码到本地仓库4.拉取其他分支的代码5.提交本地仓库代码到远程仓库6.git clone 远程仓库的某个分支常用的其他操作版本回退git clone 远程仓库的某个分支中文乱码问题Git是什么Git是目前世界上最先进的分布式版本控制系统。图解工作原理 / 流程其中 Workspace:工作区 Index / Stage:暂存区 Repo

2022-03-20 13:48:56 251

原创 Java实现--冒泡排序

算法描述:比较相邻的两个元素,如果第一个比第二个大,就交换他们的位置对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的动画演示:代码实现:import java.util.Arrays;/** * 比较相邻的两个元素,如果第一个比

2022-02-18 21:16:47 107

原创 mysql的索引结构为什么选用B+树?

问题:为什么索引结构默认使用B+Tree,而不是B-Tree,Hash,二叉树,红黑树?哈希表哈希表可以进行数据的快速检索。哈希表会使用哈希算法。哈希算法:也叫散列算法,就是把任意值(key)通过哈希函数变换为固定长度的 key 地址,通过这个地址进行数据查询的数据结构。算法时间复杂度分析来看,哈希算法时间复杂度为 O(1),检索速度非常快。比如查找 id=7 的数据,哈希索引只需要计算一次就可以获取到对应的数据,检索速度非常快。但是 Mysql 并没有采取哈希作为其底层算法。即hash算法针对

2022-02-18 20:04:41 668

原创 Mybatis中#和$的区别

区别:1)#{ }是预编译处理,MyBatis在处理#{ }时,会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如传入1,2,3就会变成’1,2,3’。2)${}是字符串替换,Mybatis在处理时,会将其替换为变量的值,在like和order by后使用注意:使用${ }会导致SQL注入,不利于系统的安全性!...

2022-02-18 17:21:59 702

原创 在Windows上安装运行kafka

一、安装Java JDK1.下载安装包2.添加系统变量变量名JAVA_HOME 变量值 你所安装的JDK路径例如:D:\Java\jdk1.8.0_31在用户环境变量里,双击”Path”,把%JAVA_HOME%/bin,加到最前面,点击确定完成二、安装ZooKeeper1.下载安装包Zookeepwe安装包2.进入该目录 D:\kafka\zookeeper\apache-zookeeper-3.7.0-bin\conf 将“zoo_sample.cfg”重命名为“zoo.cfg”

2022-02-16 09:11:45 1837 1

原创 一篇文章彻底理解Redis的持久化:RDB、AOF

目录一、为什么要持久化?二、快照持久化(snapshotting,RDB)手动触发自动触发优点三、 只追加文件持久化(append-only file, AOF)原理持久化流程文件同步策略触发文件重写AOF持久化配置四、RDB持久化、AOF持久化的区别五、Redis持久化数据和缓存怎么做扩容?六、Redis 4.0 对于持久化机制的优化一、为什么要持久化?因为Redis是内存数据库,它将自己的数据存储在内存里面,一旦Redis服务器进程退出或者运行Redis服务器的计算机停机,Redis服务器中的数据就

2022-02-12 21:14:45 182

原创 Java实现 洛谷 P1980 [NOIP2013 普及组] 计数问题

import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int count=0; for (int i = 1; i <= a; i+.

2022-01-28 11:06:13 724

原创 Java实现 洛谷 P1321 单词覆盖还原

import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); int boy=0,girl=0; for (int i = 0; i < s.length() - 2; i++) {//一次扫.

2022-01-28 10:54:39 516

原创 Java实现 洛谷 P5738 【深基7.例4】歌唱比赛

import java.util.Arrays;import java.util.Scanner;public class 歌唱比赛 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt();//同学 行数 int b = sc.nextInt();//评委 列数 int[][] arr.

2022-01-28 10:51:20 828

原创 Java实现 洛谷 P2615 [NOIP2015 提高组] 神奇的幻方

import java.util.Scanner;public class 神奇的幻方 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr = new int[n][n]; int x=0,y=n/2; arr[x][y]=1; ..

2022-01-24 17:17:50 291

原创 Java实现 洛谷 P5728 【深基5.例5】旗鼓相当的对手

import java.util.Scanner;public class 旗鼓相当的对手 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] arr=new int[n][3]; for (int i = 0; i < n; i++) {//把这些数存到一个.

2022-01-24 13:32:09 584

原创 Java实现 洛谷 P5731 【深基5.习6】蛇形方阵

import java.util.Scanner;public class 蛇形方阵 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n=sc.nextInt(); int[][] arr=new int[n][n]; int row=0,clo=0; int count=1; a.

2022-01-24 11:14:09 399 2

原创 Java实现 洛谷 P5015 [NOIP2018 普及组] 标题统计

import java.util.Scanner;public class 标题统计 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); char[] a = s.toCharArray(); int n=0; for (int i = 0; i <..

2022-01-19 14:37:31 582

原创 Java实现 洛谷 P1125 [NOIP2008 提高组] 笨小猴

import java.util.ArrayList;import java.util.Collection;import java.util.Scanner;import static java.util.Collections.sort;public class 苯小猴 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str..

2022-01-19 14:35:23 446

原创 Java实现 洛谷 P1914 小书童——凯撒密码

import java.util.Scanner;public class 凯撒密码 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num=sc.nextInt(); String a = sc.next(); for (int i = 0; i < a.length(); i++) { .

2022-01-19 14:33:42 448

原创 Java实现 洛谷 P5733 【深基6.例1】自动修正

import java.util.Scanner;public class 自动修正 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); char[] array=str.toCharArray(); for (int i = 0; i < array.length; i.

2022-01-19 14:32:17 467

原创 Java实现 洛谷 P2141 [NOIP2014 普及组] 珠心算测验

import java.util.Scanner;public class 珠心算测试 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int num = sc.nextInt(); int[] a=new int[num]; for (int i=0;i<a.length;i++){ a..

2022-01-18 12:38:50 488 1

原创 Java实现 洛谷 P1554 梦中的统计

import java.util.Scanner;public class 梦中的统计 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a = sc.nextInt(); int b = sc.nextInt(); int[] list = new int[10]; for (int i = a;.

2022-01-18 12:36:05 243

原创 Java实现 洛谷 P1598 垂直柱状图

import java.util.*;public class 垂直柱状图 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int[] char_counter = new int[26];//26个字母 for(int i = 0; i < 4 ; i++) { String str = sc.nextL.

2022-01-18 12:33:56 213

原创 Java实现 洛谷 P5732 【深基5.习7】杨辉三角

import java.util.Scanner;public class 杨辉三角 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[][] a = new int[n + 1][n + 1]; for (int i = 1; i <= n; i++) { .

2022-01-16 22:42:09 283

原创 Java实现 洛谷 P5729 【深基5.例7】工艺品制作

import java.util.Scanner;public class 工艺品制作 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int x = scanner.nextInt(); int y = scanner.nextInt(); int z = scanner.nextInt(); .

2022-01-16 22:38:34 464

原创 Java实现 洛谷 P1047 [NOIP2005 普及组] 校门外的树

import java.util.Scanner;public class 校门外的树 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); boolean[] l = new boolean[sc.nextInt()+1];//501棵树 int m = sc.nextInt(), ans = 0; for (int i=0.

2022-01-16 22:36:47 206 1

空空如也

空空如也

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

TA关注的人

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