自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

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

原创 docker安装hadoop

那么综上,我们Portainer中看到的所有容器就是下面这个样子。将本机jar文件复制到容器namenode里。在HDFS里面建一个文件夹data。运行WordCount。将文件写入到HDFS。删除output目录。

2024-08-30 10:19:46 671

原创 feign.FeignException$BadGateway: [502 Bad Gateway]

关闭本地代理。

2024-07-24 10:24:17 468 1

原创 锁是实现原子性的一种方案,但是原子性的实现不一定需要通过锁机制保证

在实际开发过程中,我们可能会通过事务来保证原子性,但是很多人存在误解,他们会以为@Transactional 注解原子性就是代表java中的CAS或者锁那种也能保证并发情况下的原子性。其实不是这样的,MySQL的原子性是通过redolog实现的,并不是锁机制实现的。因此对于@Transactional注解中,同时去执行两个操作,数据库更新操作和redis更新操作,是存在并发安全问题的!我们来分析一下。

2024-06-02 12:56:17 411

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

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

2024-03-31 18:16:02 277

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

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

2024-03-31 16:30:30 205

原创 volatile使用场景总结

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

2024-03-30 22:44:26 470 1

原创 乐观锁的简单感悟

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

2024-03-30 19:05:10 398

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

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

2023-12-17 15:51:09 140

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

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

2023-12-17 15:15:50 144

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

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

2023-12-06 22:11:40 191

原创 可重入锁解释

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

2023-07-13 10:07:05 167

原创 LockSupport

LockSupport解惑

2023-07-13 09:07:59 151

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

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

2023-07-08 15:19:47 161

原创 conda下jupyter lab 多kernel

【代码】conda下jupyter lab 多kernel。

2023-06-15 17:16:53 542

原创 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 178

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

python

2023-02-15 13:15:46 1503

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

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

2022-04-04 20:54:35 1673

原创 Kruskal 算法《图算法》

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

2022-03-24 19:27:43 474

原创 图最短路径算法《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 944

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

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

2021-12-29 22:02:29 28798 4

原创 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 1557

原创 vue3避免Eslint报错

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

2021-08-21 14:50:54 513

原创 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 145

原创 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 312

原创 泛型方法<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 154

原创 模拟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 120

原创 java实现回调函数

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

2021-06-07 23:28:51 598 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 689

原创 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 153

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

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

2021-05-18 15:29:24 607

原创 网络笔记<一>

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

2021-05-17 20:35:19 154

原创 代理笔记

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

2021-05-16 11:48:26 142

原创 使用Win10内置SSH客户端

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

2021-05-16 10:15:45 2902

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

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

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

原创 关于Fidder的无法抓包问题

项目场景:对于爬虫在移动端抓包神器Fidder的使用~大家可能或多或少会出现无法抓包问题,不管怎么设置都会发现没有用,我们这里提供另外一种解决方法!!!解决方案:安装一个谷歌插件SwitchyOmega,做一次指定端口本地代理(proxy)!对于SwitchyOmega的安装:下载对于下载的crx文件,可能存在无法导入的方法,出现Chrome插件安装时出现"CRX-INVALID-HEAD"解决方法1.将下载的.crx格式的插件通过重命名的方式修改成.rar文件2.解压缩.rar文件成文件夹

2021-04-16 23:42:16 328

原创 单例模式中双重检测锁(java)

呱啦几句:对于那么久才更新csdn对自己说声抱歉,确实,坚持确实是一件非常非常困难的事情,对于最近又想开始写博客当然是因为有感而发!!!也是开学的原因吧,开始有了一点点自己能够支配的时间了,这个学期我这个专业开始大规模学习专业知识啦!!!有点开心,毕竟不要再学类似大学物理这样毫无相干的学科了,哈哈哈~~~正题对于这个学期学习了操作系统,学习了下原子性这个概念,让我对java多线程的认识更加深刻!!!对于java中单例模式中的双重检查锁而言代码先示例如下:~~~ public stat

2021-03-19 20:17:43 1103

原创 单链表的反转:腾讯面试题

对于单链表的反转我们这里提供三个方法供大家参考1.头插法2.利用Stack栈(先进后出)3.递归实现【和2方法类似,都是通过栈这个数据结构来实现】一丶头插法思路:创建一个新的 new_head 指针 用来记录返回反转后的单链表的头指针。遍历原先的链表,每遍历到一个元素Node,将其插入到 new_head 指针的前面【】,再让 new_head 指针指向新插入的节点【Node】,以此类推……实现了单链表的反转 //反转代码 public Node reserve(){

2020-12-01 22:31:40 235 2

原创 红黑树核心代码实现(JAVA)

红黑色的五条性质(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。删除之后的处理(removeAfter()方法的实现)对于红黑树的删除:因为对于度为二的节点最终都会转化为删除度为一或者删除度为0的节点分为两种:1.删除红色节点对于删除红色节点的情况,因为删除

2020-11-29 21:44:54 1204 2

原创 红黑树核心部分代码实现(JAVA)

import java.util.LinkedList;import java.util.Queue;public class red_black_Tree { //测试代码块 public static void main(String[] args) { red_black_Tree red_black_tree = new red_black_Tree(); int[] arr={72, 50, 38, 14, 2, 85, 68, 91, 11, 8,

2020-11-29 21:33:53 135

空空如也

空空如也

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

TA关注的人

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