- 博客(157)
- 资源 (34)
- 问答 (14)
- 收藏
- 关注
原创 Redis分布式锁正确的实现方法
那么为什么执行eval()方法可以确保原子性,源于Redis的特性,简单来说,就是在eval命令执行Lua代码的时候,Lua代码将被当成一个命令去执行,并且直到eval命令执行完成,Redis才会执行其他命令。2. 如果锁已经存在则获取锁的过期时间,和当前时间比较,如果锁已经过期,则设置新的过期时间,返回加锁成功。答案是肯定的,比如客户端A加锁,一段时间之后客户端A解锁,在执行jedis.del()之前,锁突然过期了,此时客户端B尝试加锁成功,然后客户端A再执行del()方法,则将客户端B的锁给解除了。
2024-08-15 15:40:19 896
原创 Redis 备忘单
与 XRANGE 相比,以相反的顺序(从较大到较小的 ID)返回流中的元素范围,其中 ID 与指定的 ID 间隔匹配。从流中删除指定的条目。返回实际删除的项目数,如果某些 ID 不存在,则可能与传递的 ID 数不同。查询表示地理空间索引的排序集以获取框或圆区域内的成员,并将结果存储在另一个键中。从一个或多个排序集中删除并返回分数最低的成员,或阻止直到有一个可用。从一个或多个排序集中删除并返回得分最高的成员,或阻止直到有一个可用。返回排序集中的成员范围,按字典序范围,从高到低的字符串排序。
2024-08-15 15:39:26 552
原创 redis面试题汇总
比如,客户端A和B都在同一时刻读取了mykey的原有值,假设该值为10,此后两个客户端又均将该值加一后set回Redis服务器,这样就会导致mykey的结果为11,而不是我们认为的12。RENAME命令的另一种可能是,尝试将一个带生存时间的 key 改名成另一个带生存时间的 another_key ,这时旧的 another_key (以及它的生存时间)会被删除,然后旧的 key 会改名为 another_key ,因此,新的 another_key 的生存时间也和原本的 key 一样。
2024-08-15 15:37:18 595
原创 碧蓝航线游戏脚本
全自动免配置跨平台开箱即用的Fate/Grand Order助手.启动脚本,上床睡觉,养肝护发,满加成圣诞了解一下?,明日方舟小助手,全日常一键长草,现已加入Alas豪华午餐 ->,EN服的碧蓝航线脚本,已不再维护,Alas 模仿了其架构。,星铁速溶茶,崩坏:星穹铁道脚本,基于下一代Alas框架。,Alas 引入了其中的单应性变换至海图识别模块中。,基于 Alas 实现的碧蓝航线掉落统计平台。,与 Alas 对接的碧蓝航线反和谐。,Alas 使用的 GUI 库。
2024-05-13 09:37:12 1146
原创 Oracle与SQLServer的SQL语法差异
sum(rn) over(partition by v order by v1 range 1 preceding) range_p1_1 , --将本行之前的rn差额不超过1,本行之后的的rn等于当前行的所有rn值相加,省略了between,因此,oracle认为结束行时当前行,而开始行为1 precding。--但当表中没有满足条件的数据时会报""no_data_found""的异常,当表中有多条满足条件的记录时,会报""too_many_rows""异常。
2024-04-24 08:48:00 707
原创 MySQL数据库规范
MySQL数据库与 Oracle、 SQL Server 等其它数据库相比,有其独特的优势与劣势。我们在使用MySQL数据库的时候需要遵循一定规范,扬长避短。本规范旨在帮助或指导RD、QA、OP等技术人员做出适合线上业务的数据库设计。在数据库变更和处理流程、数据库表设计、SQL编写等方面予以规范,从而为公司业务系统稳定、健康地运行提供保障。以下所有规范会按照【高危】、【强制】、【建议】三个级别进行标注,遵守优先级从高到低。对于不满足【高危】和【强制】两个级别的设计,DBA会强制打回要求修改。
2024-02-27 09:54:19 820
原创 9、前端话术
vue呢在我的理解中,就是一个轻量级的前端js框架,最重要的就是它的MVVM思想,就是model和view之间可以通过view-model监听来进行数据到视图之间,以及视图到数据的双向绑定操作,我们在写前端代码的过程中,不需要关注任何dom操作,比jQuery方便很多vue常用的指令都有v-forv-ifv-show等,绑定事件用v-on,可以省略为符号,绑定属性用v-bind,可以省略为冒号,还有就是vue的生命周期,常用的基本上就是created。
2024-02-27 09:53:50 177
原创 spring
关于Spring的话,我们平时做项目一直都在用,不管是使用ssh还是使用ssm,都可以整合。Spring里面主要的就三点,也就是核心思想,IOC控制反转,DI依赖注入,AOP切面编程我先来说说IOC吧,IOC就是spring里的控制反转,把类的控制权呢交给spring来管理,我们在使用的时候,在spring的配置文件中,配置好bean标签,以及类的全路径,如果有参数,然后在配置上相应的参数。这样的话,spring就会给我们通过反射的机制实例化这个类,同时放到spring容器当中去。
2024-02-24 16:12:58 512
原创 工作流话术
流程部署好了呢,如果说实际有人去发起一个请假流程,这时候需要去启动一个新的流程实例,每个流程实例会有一个独立的id。可以是全局的,也可以是局部的。嗯,实际在工作中使用的时候,activiti用的居多,当然还有一些其他的工作流引擎,嗯,在网上看了也大概看了一下,其他的像JBPM以及workflow等用的情况来讲不是很多,所以说activity目前来讲用的比较多的,它最新的版本是5.0,那他在用的时候在数据库里边儿需要,嗯,有23张表,然后在23张表里边儿会记录着所有的这些工作都是相关流程相关所有的数据。
2024-02-24 16:12:23 198
原创 前端UI框架
vue呢在我的理解中,就是一个轻量级的前端js框架,最重要的就是它的MVVM思想,就是model和view之间可以通过view-model监听来进行数据到视图之间,以及视图到数据的双向绑定操作,我们在写前端代码的过程中,不需要关注任何dom操作,比jQuery方便很多vue常用的指令都有v-forv-ifv-show等,绑定事件用v-on,可以省略为符号,绑定属性用v-bind,可以省略为冒号,还有就是vue的生命周期,常用的基本上就是created。
2024-02-24 16:11:08 241
原创 redis
Redis是一个非关系数据库,我们项目中主要用它来存储热点数据的,减轻数据库的压力,单线程纯内存操作,采用了非阻塞IO多路复用机制,就是单线程监听,我们项目中使用springdata-redis来操作redis我们项目中使用redis的地方很多,比方说首页的热点数据,数据字典里的数据等都用热地说存储来提高访问速度。
2024-02-24 16:10:22 875
原创 nginx
Nginx 是一个高性能的 HTTP 和反向代理服务器,具有反向代理和负载均衡以及动静分离等功能我先来说说反向代理功能吧反向代理是指以代理服务器来接受用户的请求,然后将请求,分发给内部网络上的服务器,并将从服务器上得到的结果返回给用户,此时代理服务器对外就表现为一个反向代理服务器。反向代理总结就一句话就是:代理端代理的是服务端。反向代理的话,只需要配置对应的server模块就行了,里面配置上server_name和对应监听的端口,然后在配置location路径转发规则就行,当然也可以配置代理静态资源。
2024-02-24 16:09:52 320
原创 授权认证(登陆注册)的逻辑
我们系统规定的是用户名不得重复,注册的时候,会去做一下重复校验,向后台提交注册信息的时候,密码都会经过md5加密传输,到后台会首先用加密工具生成32位的盐值,然后把用户名通过md5加密之后,用户名的md5和密码的md5和盐值结合之后,生成md5值,然后一起存入数据库,用户登录的时候,按照首先根据用户名去数据库查找用户,找出来用户之后,根据相同的逻辑计算加密之后的密码和数据库的密码对比,对比一致则登陆成功。微信开放平台,主要用于app端以及web端扫码登录等开发,app中,微信登陆,微信支付,微信分享等。
2024-02-24 16:09:20 851
原创 rabbitmq
RabbitMQ是Erlang语言开发的基于AMQP的一款消息中间件,核心思想是生产者不会将消息直接发送给队列,消息在发送给客户端时先发送给交换机,然后由交换机转发给对应的队列。对路由(Routing),负载均衡(Load balance)、数据持久化都有很好的支持。它里边有5种数据传递方式第一种是简单模型,一个生产者,一个队列,一个消费者,队列只能被一个消费者监听,所以生产者将消息发给队列之后,只能有一个消费者收到消息。
2024-02-24 16:08:46 1189
原创 页面静态化
我们项目中服务端的请求和前端的请求,都是通过nginx做的反向代理,那么我们在项目中的方案是基于两个点去解决的,首先呢是结合模版引擎技术,用户在首次访问某个数据的详情页的时候,我们使用thymeleaf给生成静态页面,响应给用户,同时放到指定的nginx代理的目录下,那么用户在第二次访问这个数据详情页是,通过nginx中的配置,nginx首先会去该目录下查看是否有这个数据静态页面存在,如果存在的话,直接就访问静态html文件了,如果不存在,才会放行到我们微服务里去请求数据。首先说说为什么要进行页面静态化。
2024-02-24 16:08:13 190
原创 ElasticSearch话术
Java开发的基于lucene分布式全文搜索引擎。基于restful Web接口。在检索领域相当优秀,在我们项目中主要是负责检索商品信息。商品信息构成是比较复杂的,并且数据量巨大,至少会有几十万,如果使用mysql做检索,效率会非常低,并且对mysql造成很大的压力。在使用过程中主要需要做几件事:1、Es服务的安装,中文分词器使用IK分词器,这个主要是运维负责;2、在项目中集成springDataElasticSearch框架,用来操作ES;
2024-02-24 16:07:37 476
原创 Nodejs Playwright 2Captcha 验证码识别实现自动登陆
日常工作当中,为了提高工作效率,我们可能会写脚本来自动执行任务。有些网站因为需要用户登陆,所以脚本的自动登陆功能必不可少。不过我们在登陆网站的时候经常会出现验证码,验证码的目的就是为了防止机器登陆、自动化脚本操作,那么有没有办法让脚本能自动识别验证码实现登陆呢?接下来我以 B 站为例给大家讲解下,如何解决自动登陆脚本中最关键的验证码问题。
2024-02-24 15:42:30 1260
原创 springcloud话术
Spring Cloud 是一系列框架的集合,它利用 Spring Boot 的开发便利性简化 了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。他的设计目的是为 了简化 Spring 应用的搭建和开发过程。该框架遵循“约定大于配置”原则,采用特定的方 式进行配置,从而使开发者不用定义大量的 XML 配置。Spring Cloud 并不重复造轮子,而是将市 面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。
2024-02-24 15:19:35 860
原创 springboot相关面试题
SpringBoot是Spring项目中的一个子工程,其实人们把Spring Boot 称为搭建程序的脚手架。其最主要作用就是帮我们快速的构建庞大的spring项目,并且尽可能的减少一切xml配置,做到开箱即用,迅速上手,让我们关注与业务而非配置。
2024-02-24 15:18:51 837
原创 centos7部署Java、mysql
然后回车,提示你输入密码,就把刚才复制的密码粘贴上,回车,注意:这里粘贴之后之不会有任何效果,直接回车就行。按照安装过程中的第3步,把想要安装的mysql的版本的enabled改为1,其他的改为0即可。systemctl status mysqld 查看mysql状态。systemctl status mysqld 查看mysql状态。默认是上图中的1,就是中等强度,必须是带数字、字母、特殊字符等的8位以上的。systemctl enable mysqld 添加开机自启。
2024-02-24 15:14:03 646
原创 python数据结构上课笔记
s={10,30,70,60,30,50,60} 集合不能有重复的元素 且集合内容无序。5.条件表达式 条件为真 执行if前面的语句 条件为假 执行else后面的语句。s2=set([11,12,13,14,15]) 将列表转成集合。函数递归:自己调用自己 必须书写结束条件 结束条件一般写在开头。文本文件--->预处理--->编译--->汇编--->链接。s3=set((33,44,55)) 将元组转成集合。字典:一个无序的可变序列,以键值对的形式存在。什么是函数: 函数是一个功能描绘的过程。
2023-10-07 16:46:11 139
原创 Java如何显示不同字体的文字?
在Java的GUI编程中,如何显示不同字体的文字?上述代码示例将产生以下结果。上述代码示例将产生以下结果。方法显示不同字体的文本。以下示例演示如何使用。
2022-08-26 11:12:43 811 1
原创 Python 断言的使用
尽管有这些需要注意的事项,但的断言依然是功能强大的调试工具,且常常得不到充分的利用。了解断言的工作方式及使用场景有助于编写更易维护和调试的程序。学习断言有助于将你的知识提升到新的水平,让你成为一个全方位的高手。我确信这一点,因为断言让我在调试过程中节省了大量时间。关键要点断言语句是一种测试某个条件的调试辅助功能,可作为程序的内部自检。断言应该只用于帮助开发人员识别bug,它不是用于处理运行时错误的机制。设置解释器可全局禁用断言。...
2022-08-26 11:05:29 1311
原创 Python 逗号的巧用
如果需要在中的列表、字典或集合常量中添加或移除项,记住一个窍门:在所有行后面都添加一个逗号。还不太明白?来看一个示例。在修改这个名字列表时,通过git diff查看改动可能有点不方便。大多数源码控制系统都是基于行的,因此无法标出同一行中的多个改动。这样每项独占一行,因此可以清楚地从源码控制系统的diff中看出哪里进行了添加、删除和修改操作。虽然只是一个小改动,但我发现这有助于避免很多愚蠢的错误,也让团队成员能够更方便地审阅我的代码改动。...
2022-08-26 11:04:57 907
原创 WinForm事件中的Object sender和EventArgs e参数
通过强大的IDE,双击控件就能直接添加一个该控件默认的事件。双击Button,自动生成的是Click事件,事件的命名是控件名字加下划线加操作名字命名的。该事件还有两个参数,一个是object类型的sender,还有一个是EventArgs类型的e。简单来理解就是记录事件传递过来的额外信息。一般用于传递用户点击的位置啊,键盘按下的键等事件的额外信息。由于sender指的是事件源对象,sender是object类型,用的时候记得转一下类型才可以用。在事件里可以通过e点出来,不过不同的事件传递的信息也会不同。..
2022-08-26 10:51:45 1272
原创 内存中堆和栈的区别
Java程序在运行时都要开辟空间,任何软件在运行时都要在内存中开辟空间,Java虚拟机运行时也是要开辟空间的。JVM运行时在内存中开辟一片内存区域,启动时在自己的内存区域中进行更细致的划分,因为虚拟机中每一片内存处理的方式都不同,所以要单独进行管理。JVM内存的划分有五片:栈内存: 栈内存首先是一片内存区域,存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量),for循环内部定义的也是局部变量,是先加载函数才能进行局部变量的定义,所以方法先进栈,然后再定义变量,变量有自己的作用域,一旦离
2022-08-26 10:36:30 326 1
原创 C#中 ??、 ?、 ?: 、?.、?[ ] 问号
“运算符返回的可以是NULL,当返回的成员类型是struct类型的时候,”?.“和”."运算符的返回值类型是不一样的。从这个例子中我们也可以看出它的基本用法:如果对象为NULL,则不进行后面的获取成员的运算,直接返回NULL。如果此运算符的左操作数不为null,则此运算符将返回左操作数,否则返回右操作数。b 当a为null时则返回b,a不为null时则返回a本身。引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空。如果x为false,则返回z,是省略if{}else{}的简单形式。...
2022-08-26 10:34:43 197
原创 Commons Collections
Commons Collections增强了Java Collections Framework。它提供了几个功能,使收集处理变得容易。它提供了许多新的接口,实现和实用程序。
2022-08-25 14:01:56 518
原创 Apache Ant
ANT代表Another Neat Tool。它是Apache的基于Java的构建工具。在深入了解Apache Ant的细节之前,让我们先了解为什么我们首先需要构建工具。
2022-08-25 14:00:02 604
原创 Spring Cache 带你飞(二)
接着上一篇讲了 Spring Cache 如何被 Spring Aop 代理加载对应的代码,以及何如注入相关界面逻辑。
2022-08-25 13:44:50 380
原创 Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)
最早的程序员都是直接用机器语言编程,但是很麻烦,需要查大量的表格来确定每个数字表示什么意思,编写出来的程序很不直观,而且容易出错,于是有了汇编语言,把机器语言中一组一组的数字用助记符(Mnemonic)表示,直接用这些助记符写出汇编程序,然后让汇编器(Assembler)去查表把助记符替换成数字,也就把汇编语言翻译成了机器语言。jad很好用,但是无奈的是很久没更新了,所以只能用一款新的工具替代他,CFR是一个不错的选择,相比jad来说,他的语法可能会稍微复杂一些,但是好在他可以work。
2022-08-25 11:22:31 556
原创 Spring Cache 带你飞(一)
Spring 3.1 版本引入基于 annotation 的 cache 技术,提供了一套抽象的缓存实现方案,通过注解方式使用缓存,基于配置的方式灵活使用不同缓存组件。代码具有相当的灵活性和扩展性,本文基于 Spring 5.x 源码一起分析 Spring Cache 的代码艺术。
2022-08-25 10:22:06 303
原创 从头带你撸一个Springboot Starter
SpringBoot 通过 Starter 机制将各个独立的功能从 jar 包的形式抽象为统一框架中的一个子集,从而使得 SpringBoot 的完整度从框架层面达到了统一。其实现的机制也不复杂,SpringBoot 在启动时会从依赖的 starter 包中寻找文件,然后根据文件中配置的启动类完成 Starter 的初始化,同 Java 的 SPI 机制类似。考虑到 SpringBoot Starter 机制的意义本身就是对独立功能的封装,这些功能要求改动少,可以作为多个项目的公共部分对外提供服务。
2022-08-25 10:18:58 165
原创 Android:Socket使用攻略
Socket的使用在Android网络编程中非常重要今天我将带大家全面了解Socket及 其使用方法即套接字,是应用层 与TCP/IP协议族通信的中间软件抽象层,表现为一个封装了 TCP / IP协议族 的编程接口(API)1、Socket不是一种协议,而是一个编程调用接口(API),属于传输层(主要解决数据如何在网络中传输);2、即:通过Socket,我们才能在Andorid平台上通过 TCP/IP协议进行开发;3、对用户来说,只需调用Socket去组织数据,以符合指定的协议,即可通信;...
2022-08-18 15:44:29 1714
原创 Stata 数据处理系列:日期与时间数据
日期(Date)与时间(Time)(后文统称为“时期数据”)在时间序列与面板数据分析中经常出现,在 Stata 中掌握处理这类数据的函数很有必要。
2022-08-18 15:39:34 29303
原创 Java反射:Web学习的灵魂
而我们知道,Java中一个类在源代码阶段,是存储在硬盘中的,而编译后,就已经被加载到内存中区,那么有没有一种方法可以在这种情况下,获取或者修改它的方法或者属性呢?通过修改配置文件,达到不改变该类的任何代码,可以创建任意类的对象,可以执行任意方法,避免了每一次都修改类文件的缺点,同时提高了程序的扩展性。中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;...
2022-08-18 15:33:55 122
原创 C#语法糖
Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。需要声明的是“语法糖”这个词绝非贬义词,它可以给我们带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。2.取List中的值。...
2022-08-18 15:28:37 954
原创 #Java的语法糖
所谓语法糖就是提供给开发人员便于开发的一种语法而已。但是这种语法只有开发人员认识。要想被执行,需要进行解糖,即转成JVM认识的语法。当我们把语法糖解糖之后,你就会发现其实我们日常使用的这些方便的语法,其实都是一些其他更简单的语法构成的。有了这些语法糖,我们在日常开发的时候可以大大提升效率,但是同时也要避免过渡使用。使用之前最好了解下原理,避免掉坑。...
2022-08-18 15:26:35 236
C# .net core开发的分布式游戏服务端
2021-08-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人