- 博客(65)
- 收藏
- 关注
原创 快速搭建linux虚拟机环境
说明:此处的系统资源是采用VMwareWorkstation 虚拟机进行制作的,如果采用virtualbox ,需要进行自己制作系统资源,上面的系统资源账号为lxtx 密码为admin123, 也可以自行进行制作系统资源,资源网上搜索一大堆。一般centos都带有yum,可以通过 yum list 进行检测是否有yum源,如果没有,进行安装。虚拟机开机,采用root账户登录,然后修改网络IP。虚拟机开机,采用root账户登录,然后修改网络IP。选择需要配置的虚拟机,选择。选择需要配置的虚拟机,选择。
2024-05-08 06:46:05 556
原创 【并发编程】ConditionObject
ReentrantLock 提供了同synchronized(wait 和 notify)类似的功能 ,await及signal想要执行await 和 signal ,必须先要有lock锁资源System.out.println("子线程获取锁资源并await挂起线程");try {try {System.out.println("子线程挂起后被唤醒!持有锁资源");}).start();
2024-02-12 21:05:00 959
原创 【并发编程】锁-源码分析
/ 释放锁资源不分为公平锁和非公平锁,都是一个sync对象// 释放锁的核心流程// 核心释放锁资源的操作之一// 如果锁已经释放掉了,走这个逻辑// h不为null,说明有排队的(录课时估计脑袋蒙圈圈。// 如果h的状态不为0(为-1),说明后面有排队的Node,并且线程已经挂起了。if (h!= 0)// 唤醒排队的线程// ReentrantLock释放锁资源操作// 拿到state - 1(并没有赋值给state)
2024-02-10 21:48:11 418
原创 【mysql】InnoDB引擎的索引
N个结点构成的有限集合。树中有一个称为”根(Root)”的特殊结点其余结点可分为M个互不相交的树,称为原来结点的”子树”
2024-01-31 22:49:43 986
原创 【js逆向】scrapy基础
Scrapy到目前为止依然是这个星球上最流行的爬虫框架. 摘一下官方给出对scrapy的介绍scrapy的特点: 速度快, 简单, 可扩展性强.Scrapy的官方文档(英文):在上述案例中, 我们使用字典作为数据传递的载体, 但是如果数据量非常大. 由于字典的key是随意创建的. 极易出现问题, 此时再用字典就不合适了. Scrapy中提供item作为数据格式的声明位置. 我们可以在items.py文件提前定义好该爬虫在进行数据传输时的数据格式. 然后再写代码的时候就有了数据名称的依据了.
2024-01-30 23:36:14 1427
原创 【并发编程】锁
乐观锁:顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。在 Java中 java.util.concurrent.atomic 包下面的原子变量类就是使用了乐观锁的一种实现方式 CAS 实现的。总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁,就是在做操作之前先上锁。
2024-01-13 11:42:28 900 1
原创 【js逆向】请求头
首先, cookie就是保存在客户端(浏览器)上的一个字符串. 在每次发送请求时, 浏览器会自动的带上cookie的信息传递给服务器.尤其在用户登录后, 为了能准确的获取到用户登录信息. cookie一般都会在请求是跟随请求头一起提交到服务器.
2024-01-11 23:57:23 1154
原创 【js逆向】爬虫之进程,线程,协程
进程:运行中的程序. 每次我们执行一个程序, 咱们的操作系统对自动的为这个程序准备一些必要的资源(例如, 分配内存, 创建一个能够执行的线程. )线程:程序内, 可以直接被CPU调度的执行过程. 是操作系统能够进行运算调度的最小单位. 它被包含在进程之中, 是进程中的实际运作单位.这样一种模型, 在程序遇到了IO操作(费时不费力的操作)时, 自动切换到其他任务. 该模型被称为协程.
2024-01-06 11:43:03 1422
原创 【并发编程】并发编程的三大特性
可见性问题是基于CPU位置出现的,CPU处理速度非常快,相对CPU来说,去主内存获取数据这个事情太慢了,CPU就提供了L1,L2,L3的三级缓存,每次去主内存拿完数据后,就会存储到CPU的三级缓存,每次去三级缓存拿数据,效率肯定会提升。这就带来了问题,现在CPU都是多核,每个线程的工作内存(CPU三级缓存)都是独立的,会告知每个线程中做修改时,只改自己的工作内存,没有及时的同步到主内存,导致数据不一致问题。// ....System.out.println("t1线程结束");});
2024-01-06 00:25:16 861
原创 【JS逆向】如何一招彻底解决selenium WebDriver无响应
selenium 无响应,最常见的原因是,webDriver与浏览器版本不匹配导致的。而chrome 目前新的版本都是会自动升级的,这就会导致一段时间不用selenium时,driver就无法使用了。
2024-01-02 00:05:06 3053
原创 【AI】人工智能本地环境集成安装
可以看到CUDA最高支持12.2版本 ,可以安装12.2以下的版本(选择越接近的越好,越接近,兼容性将会越好)下载完成,解压后将bin include lib 拖入到你对应的CUDA安装目录的v12.0目录中。由于我安装的CUDA12.0 的版本,此处选择12.X版本进行安装 ,选择对应安装版本。是建立在numpy基础上的高效数据分析处理库,是Python的重要数据分析库。在高级配置中,添加如下4个配置 ,可以相对路径,也可以采用绝对路径。选择插件安装位置,可以在你之前安装的位置,新建一个。
2023-12-24 21:43:16 1416 1
原创 【AI 问题集】AttributeError: module ‘backend_interagg‘ has no attribute ‘FigureCanvas‘
修改backend 方案,由于是通过 matplotlib引入 ,因此可以将matplotlib.backends进行修改。从问题中可以看到 :module 是设置成 backend_interagg 即 backend 是 agg。从源码中,我们可以看到,matplotlib.pylot 的默认 backend 是设置成agg的。我们修改 backend 配置:matplotlib.use(‘TkAgg’)backends的参数有如下。执行官网例子,将列表画成线。
2023-12-21 23:15:25 2337
原创 【并发编程】线程基础
线程是CPU调度的基本单位,每个线程都是执行一个进程中的某一块代码程序片段。进程多线程是指:一个进程内运行的多个线程,多线程的目的是为了提高CPU的利用率,用以提升程序的执行效率,提高用户体验。串行就是从头到尾一个一个的顺序执行并行就是同时处理这里的并发并不是指三高中的并发问题,是指多线程中的并发概念(CPU调度线程的概念),CPU在极短的时间内,反复切换执行不同的线程,看起来好像在并行。
2023-12-17 22:33:50 1117
原创 【算法】直接插入排序
N个数字要排序完成,总共进行N-1趟比较,第i趟的排序次数为(N-i)次-0次不等,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的插入。
2023-12-17 00:14:02 554
原创 【算法】冒泡排序
N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次,所以可以用双重循环语句,外层控制循环多少趟,内层控制每一趟的循环次数。
2023-12-16 19:07:03 498 1
原创 【算法】选择排序
选择排序逻辑:对数组中的数据,先假定一个最小的数据下标,然后进行循环寻找到最小数据的下标,放在第一层循环的最初始位置例:从0 ~ N-1 寻找到最小值,放在0位置从1~N-1 寻找到最小值 ,放在1位置从2~N-1 寻找到最小值,放在2位置。。。
2023-12-16 18:32:31 461
原创 【Flink】容错机制
目录1、检查点编辑1.1 检查点的保存1.1.1 周期性的触发保存1.1.2 保存的时间点1.1.3 时间点的保存与恢复1.1.3.1保存编辑1.1.3.2 恢复的具体步骤:1.2 检查点算法1.2.1 检查点分界线(Barrier)1.2.2 分布式快照算法(Barrier对齐的精准一次)1.2.3 分布式快照算法(Barrier对齐的至少一次)1.2.4 分布式快照算法(非Barrier对齐的精准一次)1.3检查点配置1.3.1启用检查点 1.3.2检查点存储1.3.3其它高级配置1.3.3.1常
2023-12-03 15:06:41 1018
原创 【SpringBoot】SpringBoot3.X 兼容 mybatis-plus 解决全过程
最近闲来无事,将springboot 2.X 升级到 springboot 3.X,整个3.X的项目springboot 采用3.X后,结果出现各种问题,网上也是一堆的解决方案,可惜很多方案并不适合自己。
2023-12-02 20:05:34 2682
原创 【Redis】Redis的内部设计与实现
Redis 为各种文件事件需求编写了多个处理器,若客户端连接Redis,对连接服务器的各个客户端进行应答,就需要将socket映射到连接应答处理器写数据到Redis,接收客户端传来的命令请求,就需要映射到命令请求处理器从Redis读数据,向客户端返回命令的执行结果,就需要映射到命令回复处理器当主服务器和从服务器进行复制操作时, 主从服务器都需要映射到特别为复制功能编写的复制处理器。假如你的过期 key,靠定期删除没有被删除掉,还停留在内存里,除非你的系统去查一下那个 key,才会被redis给删除掉。
2023-12-02 08:31:45 1166
原创 【Redis】Redis缓存使用问题
只要使用到缓存,无论是本地内存做缓存还是使用 redis 做缓存,那么就会存在数据同步的问题。我以 Tomcat 向 MySQL 中写入和删改数据为例,来给你解释一下,数据的增删改操作具体是如何进行的。
2023-12-02 08:27:45 1204
原创 【Redis】Redis高并发高可用(主从复制、哨兵机制)
在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等需求。Redis也是如此,它为我们提供了复制功能,实现了相同数据的多个Redis 副本。复制功能是高可用Redis的基础,后面章节的哨兵和集群都是在复制的基础上实现高可用的。
2023-12-01 06:56:00 982
原创 【Redis】Redis高并发高可用(集群方案)
分布式数据库首先要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整体数据的一个子集。
2023-12-01 06:50:53 1102
原创 【Redis】Redis底层原理(持久化 分布式锁)
Redis虽然是个内存数据库,但是Redis支持RDB和AOF两种持久化机制,将数据写往磁盘,可以有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复。
2023-11-30 07:08:18 1328
原创 【Redis】Redis高级特性和应用(慢查询、Pipeline、事务、Lua)
许多存储系统(例如 MySQL)提供慢查询日志帮助开发和运维人员定位系统存在的慢操作。所谓慢查询日志就是系统在命令执行前后计算每条命令的执行时间,当超过预设阀值,就将这条命令的相关信息(例如:发生时间,耗时,命令的详细信息)记录下来,Redis也提供了类似的功能。
2023-11-30 07:01:20 1256
原创 【Flink】Standalone运行模式
独立模式是独立运行的,不依赖任何外部的资源管理平台;当然独立也是有代价的:如果资源不足或者出现故障没有自动扩展或重分配资源的保证,必须手动处理。所以独立模式一般只用在开发测试或作业非常少的场景下。提前启动集群,并通过Web页面客户端提交任务(可以多个任务,但是集群资源固定)。
2023-11-23 23:29:58 1049
原创 【Flink】Process Function
它是底层提炼的一个可以自定义处理逻辑的操作,被叫作“处理函数”(process function)。
2023-11-21 23:24:55 596
原创 【FLink】水位线(Watermark)
在Flink中,用来衡量事件时间进展的标记,就被称作“水位线”(Watermark)。说白了就是事件时间戳。
2023-11-21 22:43:27 2178
原创 Redis入门与应用
1970 年布隆提出了一种布隆过滤器的算法,用来判断一个元素是否在一个集合中。这种算法由一个二进制数组和一个 Hash 算法组成。本质上布隆过滤器是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。相比于传统的 List、Set、Map 等数据结构,它更高效、占用空间更少,但是缺点是其返回的结果是概率性的,而不是确切的。
2023-11-20 23:33:09 348
原创 Redis高级特性和应用(发布 订阅、Stream)
足够简单,消费消息延迟几乎为零,但是需要处理空闲连接的问题。如果线程一直阻塞在那里,Redis客户端的连接就成了闲置连接,闲置过久,服务器一般会主动断开连接,减少闲置资源占用,这个时候blpop和brpop或抛出异常,所以在编写客户端消费者的时候要小心,如果捕获到异常,还有重试。其他缺点包括:做消费者确认ACK麻烦,不能保证消费者消费消息后是否成功处理的问题(宕机或处理异常等),通常需要维护一个Pending列表,保证消息处理确认;不能做广播模式,如pub/sub,消息发布/订阅模型;
2023-11-20 23:31:59 365
原创 【Flink】窗口(Window)
窗口(Window)是处理无界流的关键所在。窗口可以将数据流装入大小有限的“桶”中,再对每个“桶”加以处理。本文的重心将放在 Flink 如何进行窗口操作以及开发者如何尽可能地利用 Flink 所提供的功能。我们将窗口理解为一个一个的水桶,数据流(stream)就像水流,每个数据都会分发到对应的桶中,当达到结束时间时,对每个桶中收集的数据进行计算处理Flink中窗口并不是静态准备好的,而是动态创建——当有落在这个窗口区间范围的数据达到时,才创建对应的窗口。
2023-11-19 21:50:57 733
原创 如何快速实现域名访问本地环境
当我们开发微信小程序等应用时,你会发现 一个烦人的操作,就是你必须得弄个域名,才能够进行访问,对于一般的开发者而言,这就麻烦了,要搞openssl,要购买域名等等。这里有一种简单的办法,能够快速实现域名访问本地环境。
2023-11-19 12:54:53 224
原创 【Flink 问题集】The generic type parameters of ‘Collector‘ are missing
java 8 在使用Java API 写 Lambda 的时候,JVM 运行时会擦除类型(泛型类型)Flink 无法准确获取到数据类型,此时就需要我们手动指定类型。
2023-11-18 22:52:58 638
原创 【Flink】核心概念:任务槽(Task Slots)
每个 worker(TaskManager)都是一个 JVM 进程,可以在单独的线程中执行一个或多个 subtask。为了控制一个 TaskManager 中接受多少个 task,就有了所谓的 task slots(至少一个)。每个任务槽(task slot)其实表示了TaskManager拥有计算资源的一个固定大小的子集。这些资源就是用来独立执行一个子任务的。
2023-11-18 17:02:34 383
原创 【框架整合】Redis限流方案
redis实现限流的核心原理在于redis 的key 过期时间,当我们设置一个key到redis中时,会将key设置上过期时间,这里的实现是采用lua脚本来实现原子性的。
2023-11-18 10:04:08 744
原创 【Flink】核心概念:并行度与算子链
当要处理的数据量非常大时,我们可以把一个算子操作,“复制”多份到多个节点,数据来了之后就可以到其中任意一个执行。这样一来,一个算子任务就被拆分成了多个并行的“子任务”(subtasks),再将它们分发到不同节点,就真正实现了并行计算。被称之为其并行度(parallelism)。这样,包含并行子任务的数据流,就是并行数据流,它需要多个分区(stream partition)来分配并行任务。一般情况下,一个流程序的并行度,可以认为就是其所有算子中最大的并行度。一个程序中,不同的算子可能具有不同的并行度。
2023-11-16 22:48:40 604
原创 【Flink】系统架构
DataStream API 将你的应用构建为一个 job graph,并附加到 StreamExecutionEnvironment。当调用 env.execute() 时此 graph 就被打包并发送到 JobManager 上,后者对作业并行处理并将其子任务分发给 Task Manager 来执行。每个作业的并行子任务将在 task slot 中执行。
2023-11-16 22:15:45 207
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人