- 博客(58)
- 收藏
- 关注
原创 python算法打卡:704. 二分查找、27. 移除元素、977.有序数组的平方
2.使用while循环的时候判断条件是 left < right,维持左闭右开区间;因为[1,1)是不合法的区间。3.if 判断条件是没有=,当target偏大,要移动left向右;1.初始化right的时候是len(nums) 因为右区间取不到。左闭右闭意味着在这个区间中left能取到,right值取不到。快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组。左闭右闭意味着在这个区间中left和right值都能取到。1.数组是有序数组并且无重复元素。时间复杂度:O(log n)空间复杂度:O(1)
2024-08-14 20:42:21
238
原创 Golang语言设计模式的实现—代理模式
代理模式是一种结构型设计模式,它允许通过代理对象控制对另一个对象的访问。它的基本思想是创建一个代理对象,进行逻辑处理的原对象通常被称作 服务对象,代理要跟服务对象实现相同的接口,才能让客户端傻傻分不清自己使用的到底是代理还是真正的服务对象,这样一来代理就能在客户端察觉不到的情况下对服务对象的处理逻辑进行增强。
2023-06-30 17:48:08
1143
原创 Golang语言设计模式的实现—工厂模式
当对象的创建逻辑比较复杂,不只是简单的 new 一下就可以,而是要组合其他类对象,做各种初始化操作的时候,推荐使用工厂方法模式,将复杂的创建逻辑拆分到多个工厂类中,让每个工厂类都不至于过于复杂。由于 Go 本身是没有构造函数的,一般而言我们采用 New() 的方式创建对象/接口,当它返回的是接口的时候,其实就是简单工厂模式。1.工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂。和简单工厂模式的区别:将工厂抽取出来,形成一个抽象的工厂,返回一个抽象的产品类。
2022-11-14 16:20:29
678
原创 Golang语言设计模式的实现—单例模式
除了懒汉式和饿汉式以外,在golang语言中有一种更加优雅的方法实现单例模式,使用once.Do可以确保 instance 实例全局只被创建一次,once.Do 函数还可以确保当同时有多个创建动作时,只有一个创建动作在被执行。饿汉方式指全局的单例实例在包被加载时创建,而懒汉方式指全局的单例实例在第一次被使用时创建,我们可以看到,这种命名方式非常形象地体现了它们不同的特点。因为单例模式保证了实例的全局唯一性,而且只被初始化一次,所以比较适合全局共享一个实例,且只需要被初始化一次的场景。要求生成唯一的序列号。
2022-11-04 10:43:37
483
2
原创 深入理解Golang之Map
Map的实现主要有两种方式哈希表(hashtable)和搜索树(searchtree)。例如Java中的hashMap是基于哈希表实现,而C++中的Map是基于一种平衡搜索二叉树——红黑树而实现的。Go中map的基于哈希表(也被称为散列表)实现。...
2022-07-30 21:41:46
1160
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
998
原创 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
1151
原创 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
401
原创 Mysql的锁
目录MySQL加锁的目的是什么MySQL的锁是基于什么实现的并发事务访问相同记录读读情况写写情况读写情况MySQL加锁的目的是什么数据库的锁是为了解决事务的隔离性问题,为了让事务之间相互不影响,每个事务进行操作的时候都会对数据加上一把特有的锁,防止其他事务同时操作数据。MySQL的锁是基于什么实现的数据库里面的锁是基于索引实现的,在Innodb中我们的锁都是作用在索引上面的,当我们的SQL命中索引时,那么锁住的就是命中条件内的索引节点(行锁),如果没有命中索引的话,那我们锁的就是整个索引树(表锁)
2022-05-22 10:41:52
408
原创 Mysql之MVCC
目录什么是 MVCCMVCC 的实现原理面试题之:MVCC能否解决幻读?什么是 MVCCMVCC, 即多版本并发控制。MVCC 的实现,是通过**保存数据在某个时间点的快照来实现的**。根据事务开始的时间不同,每个事务对同一张表,同一时刻看到的数据可能是不一样的。MVCC 的实现原理对于 InnoDB ,聚簇索引记录中包含 3 个隐藏的列:ROW ID:隐藏的自增 ID,如果表没有主键,InnoDB 会自动按 ROW ID 产生一个聚集索引树。事务 ID:记录最后一次修改该记录的事务 ID。
2022-05-15 13:59:37
923
原创 Innodb 引擎和 Myisam 引擎对索引的实现
目录写在前面——索引类型主键索引唯一索引常规索引全文索引Innodb 引擎和 Myisam 引擎对索引的实现底层分析MyISAM 引擎的底层实现(非聚集索引方式)Innodb 引擎的底层实现(聚集索引方式、非聚集索引)为什么 InnoDB 只在主键索引树的叶子节点存储了具体数据,但是其他索引树却不存具体数据呢,而要多此一举先找到主键,再在主键索引树找到对应的数据呢?为什么InnoDB 和MyISAM 对比,MyISAM 查询性能更好?写在前面——索引类型在MySQL数据库,将索引的具体类型主要分为以下几
2022-05-09 23:02:14
828
原创 隐藏实用的GitHub使用技巧
目录技巧1:在Github个人资料页面上启用自述文件技巧2:快速有效的搜索技巧技巧3:用文件查找器快速、轻松地搜索仓库中的文件技巧4:代码阅读技巧技巧5:无敌技巧——在线运行项目GitHub是程序员必备的交友,代码托管平台。这篇文章介绍并演示了几个GitHub使用技巧,我希望它们也能帮助你更有效地使用GitHub。技巧1:在Github个人资料页面上启用自述文件启用它非常简单,你只需要创建一个与你的Github账户用户名相同的新仓库,这是一个特殊的仓库,你可以用它在你的Github配置文件中添加REA
2022-05-08 15:15:33
1381
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
3494
原创 Golang 垃圾回收机制详解
目录一、垃圾回收概念二、常用的垃圾回收算法引用计数标记——清除算法三色标记算法标记——整理算法分代收集算法三、屏障技术四、运行模式1.增量式垃圾回收2.并行垃圾回收3.并发垃圾回收参考一、垃圾回收概念有些编程语言(C、C++)需要手动释放那些不再需要的、分配在堆上的数据,这叫做“手动垃圾回收”,但是如果数据释放过早,后续对数据的访问就会出错,因为被释放的内存可能已经被清空或者重新分配;如果忘记释放,数据会一直占用内存,出现“内存泄漏”,所以越来越多的编程语言支持“自动垃圾回收”。由运行时识别不再有用的
2022-04-25 12:44:17
2836
原创 操作系统——银行家算法
一、写在前面的银行家算法银行家算法的由来:银行家算法是操作系统中最有代表性的死锁避免方案,操作系统作为裸机上安装的第一层软件,起着控制和管理计算机内部软硬件资源,合理组织计算机工作流程,提高计算机工作效率,用户和计算机硬件接口的重要作用。因此操作系统既要保证系统资源的合理分配提高系统资源利用率,同时又要避免死锁等不安全状况的出现,如果这些不安全状况出现操作系统还要解决这些问题,让系统回到安全状态。银行家算法就是在这样的背景下应运而生的。银行家算法的核心思想:在进程提出资源申请时,先预判此次分配
2022-04-23 22:15:36
7133
3
原创 总结计算机网络超全面试题
总结计算机网络超全面试题OSI七层模型:大而全,但是比较复杂、而且是先有了理论模型,没有实际应用。TCP / IP四层模型:是由实际应用发展总结出来的,从实质上讲,TCP/IP只有最上面三层,最下面一层没有什么具体内容,TCP/IP参考模型没有真正描述这一层的实现。五层模型:五层模型只出现在计算机网络教学过程中,这是对七层模型和四层模型的一个折中,既简洁又能将概念阐述清楚。2. TCP和UDP的区别?
2022-04-16 10:16:13
1129
原创 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
262
原创 Java实现--冒泡排序
算法描述:比较相邻的两个元素,如果第一个比第二个大,就交换他们的位置对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的动画演示:代码实现:import java.util.Arrays;/** * 比较相邻的两个元素,如果第一个比
2022-02-18 21:16:47
120
原创 mysql的索引结构为什么选用B+树?
问题:为什么索引结构默认使用B+Tree,而不是B-Tree,Hash,二叉树,红黑树?哈希表哈希表可以进行数据的快速检索。哈希表会使用哈希算法。哈希算法:也叫散列算法,就是把任意值(key)通过哈希函数变换为固定长度的 key 地址,通过这个地址进行数据查询的数据结构。算法时间复杂度分析来看,哈希算法时间复杂度为 O(1),检索速度非常快。比如查找 id=7 的数据,哈希索引只需要计算一次就可以获取到对应的数据,检索速度非常快。但是 Mysql 并没有采取哈希作为其底层算法。即hash算法针对
2022-02-18 20:04:41
687
原创 Mybatis中#和$的区别
区别:1)#{ }是预编译处理,MyBatis在处理#{ }时,会将sql中的#{ }替换为?,然后调用PreparedStatement的set方法来赋值,传入字符串后,会在值两边加上单引号,如传入1,2,3就会变成’1,2,3’。2)${}是字符串替换,Mybatis在处理时,会将其替换为变量的值,在like和order by后使用注意:使用${ }会导致SQL注入,不利于系统的安全性!...
2022-02-18 17:21:59
713
原创 在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
1874
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
198
原创 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
758
原创 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
539
原创 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
857
原创 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
309
原创 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
619
原创 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
422
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
600
原创 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
494
原创 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
492
原创 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
509
原创 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
529
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
263
原创 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
229
原创 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
301
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人