自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 AVL(平衡二叉搜索树)的实现

平衡二叉搜索树(Binary Sort Tree)一丶概念平衡二叉树是一种特殊的二叉搜索树,关于二叉搜索树,请先了解之后再阅读该博文。那对于今天的平衡二叉搜索树它有什么特别的地方呢,了解过二叉搜索树的基本都清楚,在按顺序向插入二叉搜索树中插入值,最后会形成一个类似链表形式的树,而我们设计二叉搜索树的初衷,显然是看中了它的查找速度与它的高度成正比【O(logn)】,如果每一颗二叉树都像链表一样,那就没什么意思了。【如果遇见最差的情况,比如以下这棵树:】对于上面这样的情况,所以就设计出来了平衡二叉树,

2020-11-27 23:15:10 518 2

原创 无锁线程安全栈的实现-AtomicReference类的使用

这个栈的实现不使用传统的锁机制来保证线程安全,而是利用AtomicReference的CAS操作来原子地更新栈顶节点,从而实现无锁的线程安全。通过这个示例,你可以看到AtomicReference如何在实现无锁数据结构时发挥作用,使得并发数据结构的设计既高效又线程安全。:入栈和出栈操作在遇到并发冲突时会通过循环重试,直到成功为止。这种基于CAS的重试机制是无锁编程常用的策略之一。:由于没有使用锁,避免了线程阻塞和唤醒带来的开销,特别是在高并发场景下,无锁数据结构通常能提供更好的性能。

2024-03-31 18:16:02 197

原创 多线程并发/多线程协作 以及volatile关键字的使用-问题拆解

因此我们可以不需要借助悲观锁的方式解决,借助volatile+自旋的方式解决即可;那如果说问题升级为一个foo方法存在多并发的场景呢?直接用一个lock锁住对应的代码块就行,或者说直接加一个synchronized关键字加在方法或者同样代码块的方式即可;分析如下:我们可以知道当前只有两个线程,我记为线程A和线程B,对于这两个线程,分别去执行foo()和bar()方法;对于上面的问题,我们可以知道,是解决两个线程协作的问题;线程 A 将会调用 foo() 方法,而。,所以该问题只是简单的归类为协作问题;

2024-03-31 16:30:30 161

原创 volatile使用场景总结

总的来说,volatile修饰符主要用于保证变量修改的可见性和防止指令重排序,特别适用于变量的读写操作是无锁操作(如简单的标志位控制)或进行CAS操作的场景。volatile关键字在Java中用于确保变量的可见性以及防止指令重排序,特别是在没有使用锁定机制时对变量进行读写的多线程环境中。在这个例子中,running变量被声明为volatile,确保了线程中的循环可以正确地看到stopRunning()方法对running变量所做的修改。

2024-03-30 22:44:26 278

原创 乐观锁的简单感悟

我们可以分析到,无论是CAS,或者说是数据库层面上的基于版本号控制,其实都有一个关键技术,就是要确保修改的原子性,在读取这个版本号(比较期望值)或者说是读取内存中的值(比较期望值),之后如果判断成功是,则开始尝试去修改它,而修改这个操作需要是原子性的;当多个线程或进程同时访问相同的数据时,各自会获取到当前的版本或时间戳,并在操作完成后,比较自己的版本或时间戳与数据库中的版本或时间戳是否一致(在进行数据更新时,检查当前的版本号是否与自己持有的版本号一致,若一致则进行更新,否则表示已经有其他线程修改了数据。

2024-03-30 19:05:10 352

原创 写递归函数的一些思考

定义递归的基本情况:确定递归函数应该在何时终止,即递归的基本情况。这是一个递归的出口条件,确保递归不会无限进行下去。基本情况应该是可以直接求解或返回的简单情况。确定递归的问题规模:考虑如何将原问题分解为规模更小的子问题。递归函数应该在每一次递归调用时减小问题的规模,使得递归最终会达到基本情况。利用递归调用解决子问题:在递归函数中调用自身来解决子问题。递归调用应当是朝着基本情况逼近的方向进行的,以确保问题规模不断缩小。整合子问题的结果:在递归函数中,将子问题的解合并为原问题的解。

2023-12-17 15:51:09 104

原创 并查集<基于ranks 的优化,基于Path Spliting的优化>

Quick Union 的 union(v1, v2):让 v1 的根节点指向 v2 的根节点或者v2的根节点指向v1的根节点,这里就有优化的空间了,到底是谁嫁接到谁身上呢?我们的想法是树低的嫁接到树高的节点,这样不会让树的高度变高,搜索的效率可以提高。因此我们还需要维护一个树的高度的数组ranks。Quick Union 的 find(v1):找到 v1 的根节点,这里就有优化的空间了,在往上找的过程中,可以降低树的高度,采用路径分裂的思路,将路径上的每一个节点都指向其祖父节点,从而降低树的高度。

2023-12-17 15:15:50 96

原创 第三方组件自定义扫描规则

第三方例如dubbo自定义扫描组件规则方式注入进容器。例如@DubboService注解的类注入进容器中,实现ImportBeanDefinitionRegistrar接口,并通过@Import注解注入。@Import除了注入ImportBeanDefinitionRegistrar类,还可以注入配置类Configuration和实现ImportSelector接口的类。其中实现ImportBeanDefinitionRegistrar接口更灵活,可以注入动态代理生成的bean。

2023-12-06 22:11:40 152

原创 可重入锁解释

在main方法中,我们首先获取了外部锁,并输出"Outer lock acquired"。然后调用了innerMethod方法,在该方法中再次获取了同一个锁,并输出"Inner lock acquired"。最后,我们释放了内部锁和外部锁,并分别输出"Inner lock released"和"Outer lock released"。这证明了同一个线程可以多次获取同一个锁,并且在释放锁之后,其他线程才能获取该锁。这种可重入的特性使得线程在同一个锁的临界区域内可以嵌套调用,避免了死锁情况的发生。

2023-07-13 10:07:05 137

原创 LockSupport

LockSupport解惑

2023-07-13 09:07:59 112

原创 为什么可见性无法保证原子性

可见性和原子性是多线程编程中的两个不同概念。

2023-07-08 15:19:47 106

原创 conda下jupyter lab 多kernel

【代码】conda下jupyter lab 多kernel。

2023-06-15 17:16:53 451

原创 python中sys.path

对于我当前环境来讲,存在多个python的版本,但是系统默认会走3.8.7的版本(排在第一位)。对于anaconda3的python版本是3.8.16。在python3.8中为安装pytorch,而在anaconda3的虚拟环境名为“PyTorch”中安装了pytorch。现在的问题是我要在python3.8.7环境中使用到3.8.16版本中的pytorch包该如何操作呢!

2023-04-19 10:31:09 120

原创 用python的openCV实现一个摄像头识别物料颜色,并将物料信息发送给树莓派

python

2023-02-15 13:15:46 1336

原创 统一Prim(最小生成树)和Dijkstra(单源最短路径)代码(Java)

两者都采用到了贪心的策略,并且两个算法都一直维护着一个数组dist (Dijkstra),lowCost(最小生成树)其中:lowCost[i]表示:当前构建的生成树集合到顶点i的最低代价dist [i]表示:当前节点k到各个顶点的最短路径算法思路:不断从不在当前最优集合中去寻找和当前最优集合的最小代价,通过当前选中的最优决策来不断更新维护该数组(dist,lowCost),直到所有顶点都被标记为止。—直接上代码看743. 网络延迟时间(最短路径算法)//Dijkstra算法 :从 k 点出发

2022-04-04 20:54:35 1620

原创 Kruskal 算法《图算法》

连接所有点的最小费用问题拆解:size个顶点求最小生成树(无向图)思路:先模拟,将所有边加入到edges 中,按照weight权值排序(从小到大),之后依次遍历已排序的边,加入该边,判断是否与当前的图结构成环(并查集判环),否则加入该边,是则continue,直到加入了size-1条边为止跳出循环class Solution { public int minCostConnectPoints(int[][] points) { int size = points.leng.

2022-03-24 19:27:43 437

原创 图最短路径算法《Floyd,Dijkstra》

743. 网络延迟时间有 n 个网络节点,标记为 1 到 n。给你一个列表 times,表示信号经过 有向 边的传递时间。 times[i] = (ui, vi, wi),其中 ui 是源节点,vi 是目标节点, wi 是一个信号从源节点传递到目标节点的时间。现在,从某个节点 K 发出一个信号。需要多久才能使所有节点都收到信号?如果不能使所有节点收到信号,返回 -1 。//Floyd:对于每一个顶点k,检查dist(i,k)+dist(k,j) < dist(i,j);是否成立// 邻接矩阵

2022-03-23 19:43:20 909

原创 KMP代码《C++版》

#include<iostream>#include "Main.h"using namespace std;//next数组:和当前的字符无关,和之前的字符有关//求解next数组int* getNext(char *pattern,int len2) { int* next = new int[len2]; if (len2<2) { return NULL; //没有必要 } next[0] = -1; //手动为-1 next[1] = 0;

2022-03-21 10:38:01 1318

原创 2021中国大学MOOC 机器学习(温州大学) 最新中国大学MOOC满分章节测试答案

引言 引言课后测试1、 问题:哪一个是机器学习的合理定义?选项:A:机器学习从标记的数据中学习B:机器学习能使计算机能够在没有明确编程的情况下学习C:机器学习是计算机编程的科学D:机器学习是允许机器人智能行动的领域答案: 【机器学习能使计算机能够在没有明确编程的情况下学习】2、 问题:一个计算机程序从经验E中学习任务T,并用P来衡量表现。并且,T的表现P随着经验E的增加而提高。假设我们给一个学习算法输入了很多历史天气的数据,让它学会预测天气。什么是P的合理选择?选项:A:计算大量历史气象

2021-12-29 22:02:29 25590 2

原创 go get 配置终端代理失效的原因

阅读get.go源码会发现,go get命令通过git clone命令将远程仓库的代码拉取到本地。根据官方 golang/go - GoGetProxyConfig | Github 的说明,需要设置git的代理:git config [--global] http.proxy http://proxy.example.com:port然而并没有起作用。。即使在本地也设置了Linux和Windows的机器上都开启了Shadowsocks/clash代理,本地端口为1080 / 7890,最终在St

2021-09-13 22:35:21 1074

原创 spring中IOC的理解

前言:对于IOC:控制反转,听着官方解释不少人表示晦涩难懂,这里我以我的理解来解释一番对于spring中使用到的三个技术可谓耳熟能详,工厂模式,反射,xml解析spring中为了降低耦合性,其中代表性的是使用到了java中的反射,这里我一一道来首先是工厂模式,相当于是对一个数据需要依赖的另一个数据或者第三方模块的二次封装,为什么需要这样做呢,我直接new不是更爽嘛,其实对于很多前端框架而言,当你需要使用到另一个第三方模块的时候,我们不是直接将其引入然后直接使用,为什么呢?因为耦合性太高了,谁也无法保证

2021-08-22 15:16:02 114

原创 types.js?a742:39 Uncaught TypeError: Cannot read property ‘prototype‘ of undefined at eval (type

vue安装Element第三方组件库浏览器界面报错:types.js?a742:39 Uncaught TypeError: Cannot read property 'prototype' of undefined at eval (types.js?a742:39) at Object../node_modules/element-ui/lib/utils/types.js (chunk-vendors.js:3189) at __webpack_require__ (app.

2021-08-21 15:33:23 1467

原创 vue3避免Eslint报错

vue.config.js中加入lintOnSave: falsemodule.exports = { // 避免Eslint报错 lintOnSave: false .......其他项}

2021-08-21 14:50:54 472

原创 jar读取

@Test public void test() throws Exception { //格式:jar:file .....jar!.... URL url = new URL("jar:file:/E:/mysql_jar包/mysql-connector-java-5.1.49.jar!/com/mysql/jdbc/Driver.class"); InputStream inputStream = null; int len =...

2021-08-06 11:26:52 90

原创 MySQL默认隔离级别的记录锁和间隙锁

准备工作,先准备一张表create table t3(id int not null primary key,value int,index(value));insert into t3 values(1,0);insert into t3 values(2,3);insert into t3 values(3,5);insert into t3 values(4,7);insert into t3 values(5,20);insert into t3 values(6,41);inser

2021-07-18 13:14:15 271

原创 泛型方法<E>

/** * @author 拾光 * @version 1.0 */ /** * 泛型方法:接受其他泛型类传递的泛型(可以泛指很多泛型类,因此可以使用泛型 <E> 的形式来接受其他泛型类的泛型参数) * 旨在传递:【泛型的泛型,】 * @param <E> */interface cause<E>{ <T> void test(result<T> res,E e);}interface result<T&gt

2021-07-10 21:51:25 117

原创 模拟CAS和CAS自旋

/** * @author 拾光 * @version 1.0 */public class CAS实现test { //用 volatile 修饰,线程可见性 static volatile int value = 0; public static void main(String[] args) throws InterruptedException {// test1(); test2(); } //模仿cpu级别尝试修

2021-07-04 17:13:38 89

原创 为什么MySQL数据库底层数据结构采用使用b+树

前言:大部分人都知道,MySQL底层使用的是B+树这个数据结构,但是你们知道为什么是B+树呢?为什么不是哈希索引,为什么不是平衡二叉树(AVL,甚至红黑树)呢?或者说为什么不是B树呢?这里我就带大家一步一步来解释为什么是B+树,废话不多说,现在开始~为什么不是Hash索引?首先这里说的是面试中常问到的,为什么不是Hash索引?因为对应hash值,它是一个无序的这么一个值(底层计算就不解释了,位运算等~),既然是无序,那么就有一个致命的缺陷,那就是不能进行范围查找。因为数据库操作中常常需要进行范围的查找的

2021-06-13 20:52:26 896 4

原创 java实现回调函数

在一些动态语言中,如python,JavaScript等比较灵活,有函数指针的概念【C语言中的函数指针】。其意思是把一个函数当成一个参数传递到另一个函数中,在合适的时候,为指定参数提供运行入口,实现隐式控制内部参数。引出问题这里引出问题:假如需要设计一个要求,需要对二叉树中每一个节点设计一个自定义访问的要求,即需要外界传递一个要求【抽象为函数】,对内部遍历每一个节点实现自定义访问,你会如何设计呢??在python等动态语言中,可能你会想到使用一种叫回调函数的设计方式。简单用代码解释以下这里对一个数组

2021-06-07 23:28:51 555 2

原创 Mysql单表查询语句执行顺序

对于mysql查询语句往往对于新手来说比较混淆,没有一个直接的顺序来写select语句,这里总结一下单表查询的MySQL底层函数执行顺序先创建一个表SET NAMES utf8;SET FOREIGN_KEY_CHECKS = 0;-- ------------------------------ Table structure for `employee_tbl`-- ----------------------------DROP TABLE IF EXISTS `employee_t

2021-06-04 09:42:59 637

原创 port scanner【python】

该文档来自维基百科(WIKI)端口扫描工具(Port Scanner):指用于探测服务器或主机开放端口情况的工具。常被计算机管理员用于确认安全策略,同时被攻击者用于识别目标主机上的可运作的网络服务。端口扫描定义是客户端向一定范围的服务器端口发送对应请求,以此确认可使用的端口。虽然其本身并不是恶意的网络活动,但也是网络攻击者探测目标主机服务,以利用该服务的已知漏洞的重要手段。[1]端口扫描的主要用途仍然只是确认远程机器某个服务的可用性。类型TCP扫描最简单的端口扫描工具使用操作系统原生的网络功能,且

2021-06-03 12:19:31 674

原创 编程规约【参考与阿里巴巴java开发手册】

(一) 命名风格【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name / name / name/name/namename / name_ / namename/name/​name / name【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,纯拼音命名方式更要避免采用。正例:renminbi / alibaba / taobao / youku / han

2021-05-26 11:07:17 82

原创 java中ArrayList<E>动态数组的基本实现

GitHub地址:https://github.com/github-HDC/Data-Structure/blob/main/Arraylist%E4%BC%98%E5%8C%96/Update_Arraylist.javapackage Arraylist优化;/** * 简单手动实现ArrayList<E>动态数组的基本功能 【参考至小码哥的恋上数据结构】 * @param <E> */@SuppressWarnings("unchecked")publ

2021-05-19 14:57:36 120

原创 fidder开着代理的情况下,无法抓取某些软件数据包问题

对于抓包应用程序中的软件数据包过程,有时候会出现无法联网的情况,这里解释部分原因前言对于win10中微软应用商场安装的软件称为UWP软件Win10 所有 UWP 应用均运行在被称为 App Container 的虚拟沙箱环境中,App Container 可以保证应用安全性,但同时也阻止了网络流量发送到本机(即 loopback), 使大部分网络抓包调试工具无法对 UWP 应用进行流量分析。同样的,该机制也阻止了 UWP 应用访问 localhost,即使你在系统设置中启用了代理,也无法令 UWP 应

2021-05-18 15:29:24 506

原创 网络笔记<一>

设备介绍光纤接入光猫:光信号转为电信号(一般改为桥接模式,桥接模式是将光信号转为电信号),光猫改成桥接模式好处有:工作负荷小,路由器拨号带机量比光猫大,网络延迟小,可以实现更多功能。一般结构就是光猫,光猫的LAN口接路由器的WAN口,路由器的LAN口接电脑笔记本,二级路由器等设备网线接入路由器:是连接两个或多个网络的硬件设备,在网络间起网关的作用以此实现了硬件设备的准备,但是为了实现上网,我们需要还一个IP地址,下面就介绍两个协议获取IP地址DHCP服务器:路由器内部已经实现了DHCP协议,用来

2021-05-17 20:35:19 130

原创 java开发手册笔记--OOP 规约

【强制】避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。【强制】所有的覆写方法,必须加@Override 注解。说明:getObject()与 get0bject()的问题。一个是字母的 O,一个是数字的 0,加@Override 可以准确判断是否覆盖成功。另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错。【强制】相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object。说明:可变参数必须放..

2021-05-17 11:04:55 144

原创 代理笔记

对于各大代理软件的层层出现,不少小伙伴对代理的知识还有所欠缺,这里我结合自己的理解和其他资料的解释进行整理~代理方式分为应用层上的代理,和Socks(介于应用层和网络层之间的一个接口)代理,应用层代理会出现一个很致命的弊端,就是防火墙问题,虽然也有方式进行突破,但是相对于Socks层的代理来说没那么任意,应用层的协议较多,而Socks而已,Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求),所以Socks代理服务器比应用层代理服务器要快的,而对于大多数操作系

2021-05-16 11:48:26 110

原创 Python虚拟环境

前序:当你的项目比较复杂,对模块版本要求不一时,不需要安装多个 Python,只需要配置虚拟环境即可。提起虚拟环境,很多人都会想到 Virtualenv,实际上从 Python3.3 版本开始内置了 Venv模块 用以建立轻量级的虚拟环境。虚拟环境的优点1. 不同的虚拟环境相互独立,不会影响到其他应用。2. 防止出现包管理混乱和版本冲突。3. 不会影响全局的python环境。4.独立的一个python环境 对于virtualenv模块我们这里不介绍,自行百度。。Venv 的用法和机制

2021-05-16 10:33:41 110

原创 使用Win10内置SSH客户端

上个星期重装了一下电脑,发现windows10功能选项中有个应用与功能中有个可选功能,发现windows10只带一个ssh连接功能,查了一下资料,在 Windows 10 April 2018 Update 更新后,SSH-Client 已经默认是操作系统的内置功能了,所以无需其他配置就可以直接使用 ssh、scp 等命令,对于开发者来说是一件不错的事情,毕竟在弱需求的情况下,可以替代 Xshell 等客户端了ssh 是一个命令行工具,所以我们需要先打开终端,打开终端后就可以输入命令使用 ssh 了。

2021-05-16 10:15:45 2679

原创 深度优先搜索搜索对处理最短路径和找到一个可行路径的深思

引出题目:从起点(0,0)出发,到达P点的一条可行路径和最短路径的步数 【" * "表示可走,"X"表示不可走,"P"表示终点】 {'*','*','*','*','*','*','*','*'}, {'X','X','X','X','X','X','*','*'}, {'*','*','*','*','X','*','*','*'}, {'*','*','X','*','X',

2021-04-30 23:42:24 573 1

空空如也

空空如也

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

TA关注的人

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