自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 jenkins+gitlab实现Android自动打包填坑之旅

1.首先你需要知道你想要实现的Android自动打包的Android项目的一些环境配置及需要使用的一些开发版本。声明:本文 Android项目基于:1.jdk11 2.SDK无要求 3.gradle无要求(同Manven一样为项目自动化构建开源工具)注:本文适用于 任何版本 jdk SDK Gradle。了解Android项目使用到的东西就可以开始干活了.......... xixi。

2024-01-24 17:10:56 1578 2

原创 TypeScript基础语法

TypeScript在JavaScript的基础上加入了静态类型检查的功能,因此每一个变量都有固定的数据类型。

2024-05-11 14:36:45 1038

原创 Python+Appium自动化测试(ios+Android)

生成测试报告需要下载allure包 和 allure-pytest 库, 测试报告是通过allure-pytest生成,通过本地的allure包展示测试报告。python get-pip.py(若你下的是Python3以上命令是:python3 get-pip.py)需要手动在官网下载代码,配置好后,局部替换Appium中的WebDriverAgent。方式1:通过pip命令下载 前提:有下载了pip命令(一般下载python后都有)可通过:pip --version命令检查。

2024-04-11 08:49:26 982

原创 jenkins+gitlab实现iOS自动打包的坎坷之路(本文包含CI\CD过程中的一些坑点以及一些理解及建议)

本文须知:本文成功案例是配置jekins所在服务器配置打包环境,并非在jenkins中配置打包环境。关于为何不采用在jenkins中配置打包环境将会在文中具体讲解。最后因为是基于jekins所在服务器配置的打包环境,按照本文所诉,实现ios自动打包将更易成功。

2024-01-27 16:28:37 1655 1

原创 shell编程

name="ni"变量名变量类型:bash默认把所有的变量都认为是字符串bash变量是弱类型,无需事先声明类型,是将声明和赋值同时进行。ni[root@localhost ~]# cho $name #可以省略花括号ni单引号:不识别特殊符号双引号:可以识别特殊符号反引号:会将命令的执行结果返回给变量无引号:连续的符号可以不加引号,有空格则有歧义,最好使用双引号本地变量,只针对当前的shell进程pstree检查进程树。

2023-12-28 19:27:13 1244

原创 CSS元素的显示模式

元素显示模式就是元素(标签)以什么方式进行显示;比如:独占一行,一行可以显示多个HTML元素一般分为块元素和行内元素两种类型。

2023-11-22 16:08:18 519

原创 选择器知识点詳解

选择器分为基础选择器和复合选择器两个大类单个选择器标签选择器类选择器id选择器通配符选择器。

2023-11-22 14:21:51 326

原创 eclipse启动无法找到类(自定义监听器)

打开Navigator看classes里面没有编译文件(就算有编译文件也可能有问题,因为本人git上拉取代码后同时也把编译文件一并拉取下来了,所以判断是否是这问题,你需要先clean,然后在build。5.如果项目中引入了某个不用的jar包,而那个包又被你删除了,就会出现不报错但怎么也编译不出来class文件的情况。1.先clean掉原来编译的文件,然后点Build Automatically去编译一下代码(建议可以多点几次,确保是否真的无法编译生成编译文件)4.上面没有检查编译路径的检查一下编译路径。

2023-11-17 09:28:55 1641

原创 表格&表格细线边框

当cellspacing设置为0像素时,单元格与单元格之间的距离是0像素,单元格之间的线条会重叠,导致边框变粗。如图:border-collapse属性控制浏览器绘制表格边框的方式。它控制相邻单元格的边框。语法: 使用CSS的方式

2023-11-15 09:16:47 94

原创 盒子模型-详解

所谓盒子模型:就是把HTML页面中的布局元素看作是一个矩形的盒子也就是一个盛装内容的容器。css盒子模型本质是一个盒子,封装周围的HTML元素,包括边框、外边距、内边距和实际内容。margin:外边距 用于控制盒子与盒子之间的距离border:边框 盒子的边框padding:内边距 用于控制内容与边框之间的距离content:内容。

2023-11-14 15:51:37 88

原创 JAVA加密解密异常之java.security.NoSuchAlgorithmException: Cannot find any provider supporting DES/CBC/PKCS7

网上最接近的解决办法:最后解决办法:1.在jdk中的jre\lib\security修改java.security文件,替换security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider。并将原有的#security.provider.7=com.sun.security.sasl.Provider 注释掉2./jdk/jre/lib/ext下添加jar包bcprov-jdk15on-1.58.jar下载地址:https://mv

2023-11-01 14:39:01 1814

原创 gitlab查看、修改用户和邮箱,gitlab生成密钥

将秘钥复制,然后打开GitLab,单击settings->SSH Keys,把内容粘贴到key中,点击Add key按钮添加完成。

2023-10-25 19:45:16 3520

原创 nginx版本更新1.9.9 -> 1.18.0

当前nginx版本:1.9.9 目标版本1.18.0。

2023-10-19 14:37:03 243

原创 gitLab更新11.11.3->16.1.5

gitlab当前版本11.11.3 postgreSQL当前版本 9.6.11。

2023-10-17 17:27:30 1374

原创 RESP无法连接linux上redis问题

永久关闭防火墙:systemctl disable firewalld.service。查看防火墙服务状态:systemctl status firewalld。重启防火墙: service firewalld restart。开启防火墙: service firewalld start。关闭防火墙: service firewalld stop。2.未关闭linux系统的防火墙导致无法连接redis。没有打开服务(这只是无法ping通虚拟机的一种原因)1.本机无法ping通虚拟机IP。

2023-09-10 12:03:30 331

原创 mysql中的加密函数以及在高版本中被移除的加密函数

加密函数是MySQL用来对数据进行加密的函数。

2023-09-04 16:03:21 711

原创 mysql基于AES_ENCRYPT&&AES_DECRYPT实现密码的加密与解密

执行语句结果 加密过后的字符串是一串很奇怪的字符。尝试使用上面加密过后的字符解密。结果 并未成功的解密。

2023-09-04 15:40:35 1286

原创 关于blob类型的字段使用mybatis进行对mysql数据库的读取,修改properties文件后缀名为yml的问题,报不能bound statement的错的解决

org.apache.ibatis.type.BlobTypeHandler是MyBatis框架中的一个类型处理器(TypeHandler),用于处理数据库中的BLOB(binary large object)数据类型。在数据库中,BLOB类型通常用于存储较大的二进制数据,如图像、音频、视频等。BlobTypeHandler的作用就是在Java对象和数据库之间进行转换,确保BLOB类型数据在数据库和Java代码之间的正确处理。

2023-07-30 18:10:54 769

原创 @Transactional和synchronized同时使用时的一些问题以及解决

该方法创建一个单一工作线程的线程池,如果此线程在执行过程中失败了,会有一个新的线程来继续完成未完成的工作。newSingleThreadExecutor()创建单线程化的线程池。任务会被保证是顺序执行的(串行),并且再任意时间都不会超过一个活跃线程。由于事务用的是spring的事务,是基于aop实现的,ok找到问题了。然业务代码还是要加@Transactional的!传入一个Callable 任务,返回执行完成的返回值。说到这里,问题就比较容易分析了。其次我逻辑代码也没有问题。首先我的输入没有问题。

2023-03-25 18:27:55 1719 1

原创 spring事务管理中,使用Synchronized修饰事务方法,同步为什么会失效

首先我们的环境是只有一台服务器,一个工程的情况,这种情况下使用synchronized修饰事务方法,同步效果会失效吗?在Controller中,我模拟了5个并发请求保存用户的场景,Service中的保存方法使用了synchronized关键字修饰,运行结果如下:可以看到数据库里面保存了三条相同的数据,这是为什么呢?

2023-03-25 16:32:13 1281 1

原创 缓存失败了怎么办?

我们创建一个重试表,表中有个字段记录重试次数,初始值为0,同时设置一个最大的重试次数,用一个定时任务异步的去读取重试表中的数据,然后去执行删除缓存操作,每删除一次,重试次数加1,如果其中有任意一次成功了,则返回成功。但是呢,这种方案还会出现删除失败的情况,因为基于binlog实现的删除只会删除一次,所以我们最终还是需要依赖于基于定时任务或者mq的重试机制。mq消费者读取mq消息,重试5次删除缓存。当然,如果你在接口中直接同步重试,该接口并发量比较高的时候,可能有点影响接口性能,这个我们不怕,可以改为异步。

2023-03-22 15:50:46 1136

原创 回顾:数据库操作和redis缓存中的事务回滚问题

注:@Transactional只会回滚MySQL的异常,其后发生的Redis异常并不会让其回滚数据库。Redis也不会回滚(这个和Redis采用的设计策略有关:不对回滚支持,保证操作的简单快速)但是MySQL操作成功,而Redis异常,此时缓存数据不一致,如何回滚Mysql操作又是一个问题。2、Redis的事务并不支持回滚功能,Redis命令在事务处理期间发生错误,原先的操作并不会回滚。1、数据库开启事务,即可在操作失误时,回滚之前的已经做过的操作,保证操作原子性。

2023-03-22 15:05:03 1703

原创 Spring事务失效的N种场景

Spring团队建议在具体的类(或类的方法)上使用@Transactional注解,而不要使用在类所要实现的任何接口上。在接口上使用@Transactional注解,只能当你设置了基于接口的代理时它才会生效。因为注解是不能继承的,这就意味着如果正在使用基于类的代理时,那么事务的设置将不能被基于类的代理所识别,而且对象也将不会被事务代理所包装。

2023-03-17 21:35:31 633

原创 Java中的异常

RuntimeException表示编译器不会检查是否对RuntimeException进行了处理,在程序中不必去捕获RuntimeException异常,也不必在方法体抛出RuntimeException异常类。throw 抛出具体的问题对象,执行到 throw,功能就已经结束了,跳转到调用者,并将具体的问题对象抛给调用者。非运行时异常:也叫编译异常,就是Exception下除了RuntimeException以外的异常。是必须进行处理的异常,编译器会进行异常提醒的。分为运行时异常和非运行时异常。

2023-03-17 21:26:14 678

原创 事务的4大特性、事务隔离级别、事务传播行为

另一方面, PROPAGATION_NESTED 开始一个 “嵌套的” 事务, 它是已经存在事务的一个真正的子事务. 潜套事务开始执行时, 它将取得一个 savepoint. 如果这个嵌套事务失败, 我们将回滚到此 savepoint. 潜套事务是外部事务的一部分, 只有外部事务结束后它才会被提交。(一事务写时禁止其他事务读写、一事务读时禁止其他事务读写)使用 PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。

2023-03-16 20:19:28 1420

原创 Redis实现全局唯一id,实现优惠卷秒杀的下单功能

因为是在集群下,所以就会有把这一个项目部署到多台机器上,这也会导致每个机器都有自己的JVM,我们前面synchronized锁的是当前JVM下常量池中的userId对象。所以在集群下,就会失效。这里我们判断stock>0,就是不管是否有线程安全问题,只要有票就会把票买了。只有没票了才会考虑线程安全问题。当我们当我们判断锁标识一致后要去释放锁的时候却发生了阻塞,结果锁又超时释放了,然后阻塞结束后就直接释放锁了。所以我们要确保判断锁标识和释放锁是一个原子操作。该锁是自己写的,仍然有缺陷:不可重入,不能重试。

2022-12-30 15:42:22 1127

原创 基于redis缓存查询店铺

布隆过滤器可以简单的理解为:是一个bite数组,里面存的是二进制位,不是把数据库里面的数据存储到布隆过滤器里面,而是把这些数据基于某种Hash算法计算出Hash值,然后再将这些Hash值转换成二进位保存到布隆过滤器里面,当我们要去判断数据库里面的数据是否存在的时候,其实就是判断对应的位置是0还是1.缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效,这些请求都会打到数据库(一些别有用心的人就会利用这一点不断的发出这样的请求,导致服务器压力变大)。*优点:实现简单,维护方便。

2022-12-26 16:24:06 841

原创 基于Redis实现登录

生成的验证码需要保存到redis中,用于后面登录时的判断。保存到redis中的数据类型选为String类型。为了保证每个用户对应的验证码的唯一性,所以使用电话作为key.

2022-12-23 12:54:16 2721

原创 Linux基本命令及Linux文件类型

1.普通文件它最常使用的一类文件,其特点是不包含有文件系统的结构信息。通常用户所接触到的文件,如图形文件、数据文件、文档文件、声音文件等都属于这种文件。这种类型的文件按其内部结构又可细分为文本文件和二进制文件。2.目录文件目录文件是用于存放文件名及其相关信息的文件。它是内核组织文件系统的基本节点。目录文件可以包含下一级目录文件或普通文件。在Linux中,目录文件是一种文件。但Linux的目录文件和其他操作系统中的“目录”的概念不同,它是Linux文件中的一种。

2022-10-22 11:20:49 1716

原创 Redis相关知识介绍,在Linux操作系统中Redis键(Key)操作命令,Redis常用数据类型

单键多值Redis列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边)。它的底层实际是个双向链表,对两端的操作性能很高,通过索引下标的操作中间的节点性能会较差。Redis set对外提供的功能与list类似是一个列表的功能,特殊之处在于set是可以自动排重的,当你需要存储一个列表数据,又不希望出现重复数据时,set是一个很好的选择,并且set提供了判断某个成员是否在一个set集合内的重要接口,这个也是list所不能提供的。

2022-10-20 21:28:57 859

原创 JWT Token与session

我们知道,http协议本身是一种无状态的协议,而这就意味着如果用户向我们的应用提供了用户名和密码来进行用户认证,那么下一次请求时。用户还要再一次进行用户认证才行,因为根据Http协议,我们并不能知道是哪个用户发出的请求,所以为了让我们的应用能够识别是哪个用户发出的请求,我们只能在服务器存储一份用户登录的信息(session),然后在客户端的cookie中保存一份sessionid,客户端以后每次请求都会携带这个cookie到服务器找到对应的session。(为了解决这个问题:我们需要进行集群间的共享。

2022-10-14 21:55:01 716

原创 Nosql数据库简介

NoSQL(NoSQL = Not Only SQL),"不仅仅是SQL”,泛指非关系型数据库。NoSQL不依赖业务逻辑存储,而已简单的Key-value等模式存储(共有四种方式这只是其中一种)。因此大大的增加了数据库的拓展能力。* 不遵循SQL标准。* 不支持ACID(原子性,一致性,隔离性,持久性)* 远超于SQL的性能。

2022-10-09 21:40:16 588

原创 semaphore信号量、CountdownLatch计数等待

信号量,用来限制能同时访问共享资源的线程上限。

2022-10-09 19:24:21 187

原创 ReentrantReadWriteLock、StampedLock读写锁

当读取操作远远高于写操作时,这时候使用读写锁让读-读可以并发(即然多个线程的读取是可以并行的),提高性能。类似于数据库中的 select ... from ... lock in share mode提供一个数据容器类,内部分别使用读锁保护数据的read()方法,写锁保护数据的write()方法注意事项:1.读锁不支持条件变量,写锁支持2.重入时升级不支持,即同一个线程第一次获取的是读锁,然后又去获取写锁,会导致获取写锁永久等待(阻塞住了)如下:3.重入时支持降级:即先获取写锁,然后获取读锁。

2022-10-07 15:48:50 520

原创 JDK、JRE、JVM之间的区别

我们写Java代码,用txt就可以写,但是写出来的Java代码,想要运行,需要先编译成字节码文件,那就需要编译器,而JDK中就包含了编译器javac,编译之后的字节码,想要运行,就需要一个可执行的的字节码的程序,这个程序就是JVM,专门用来执行Java字节码文件。另外,JVM在执行Java字节码时,需要把字节码解释为机器指令,而不同的操作系统的机器指令可能是不一样的,所以就导致了不同操作系统上的JVM是不一样的,所以我们在安装JDK时需要选择操作系统。JDK中包含了JRE,JRE中包含了JVM。

2022-10-01 19:49:41 640

原创 ThreadLocal

1. ThreadLocal是Java中所提供的线程本地存储机制,可以利用该机制将数据缓存在某个线程的内部,该线程可以在任意时刻、任意方法中获取缓存的数据2. ThreadLocal底层是通过ThreadLocalMap来实现的,每个Thread对象(注意不是ThreadLocal对象)中都存在一个ThreadLocalMap,Map的Key为ThreadLocal对象,map的value为需要缓存的值。

2022-09-24 18:54:21 1016

原创 面试之HashMap

1.初始大小:HashMap默认初始大小是16,这个默认值是可以设置的,如果事先知道大概的数据量有多大,可以通过修改默认初始大小,减少动态扩容的次数,这样会大大提高HashMap的性能2.动态扩容:最大 装载因子默认是0.75,当HashMap中元素个数超过0.75*capacity(表示hashmap中元素的个数)的时候。就会启动扩容,每次扩容都会扩容为原来的两倍大小。3.

2022-09-23 19:38:11 325

原创 线程池概念2

ExecutorService:是一个线程池最基本的接口,提供了提交任务,关闭线程池这些基本的方法。ScheduledExecutorService:扩展接口,在基础线程池的功能上又新增了任务调度的功能,可以用来定时执行任务。

2022-09-23 17:58:16 301

原创 JUC并发包下

AtomicStampedReference可以给原子引用加上版本号,追踪原子引用整个的变化过程,如:A -> B -> A -> C,通过AtomicStampedReference,我们可以知道引用变量中途被更改了几次。但是有时候我们有时候并不是想修改引用本身而是想修改对象里面的内容,例如:数组(要对数组里面的元素保证线程安全)* AtomicReferenceArray(保护的数组里面元素是引用类型的)之前的原子引用保护的是多个线程对一个对象引用进行修改时的线程安全性。

2022-09-20 17:38:01 424

原创 cas与volatile

在通过cas实现的AtomicInteger类的源代码中,共享的成员变量就有volatile修饰。

2022-09-19 13:07:41 283

空空如也

空空如也

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

TA关注的人

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