自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

大鹏小站的博客

一个外企工作的小职员

  • 博客(332)
  • 问答 (1)
  • 收藏
  • 关注

原创 SAP-CAP 介绍

SAP CAP是cloud application programming model的简称SAP设计CAP的目的是为了让开发人员更加注重业务逻辑的实现,减少对技术的依赖CAP支持很多开源的技术和工具,同时也支持SAP自己的技术和工具。

2022-06-17 16:18:26 830 1

原创 2022,程序员

疫情之下的程序员

2022-06-06 17:01:46 351 1

原创 node特点

node特点:1. 异步单线程:我们知道php和java这些后端语言是多线程 但为什么node却采用了异步单线程呢 这样做的好处是什么呢优点:节约服务器内存(线程越多占用的内存越多)节约上下文切换的时间(由于多线程实现原理是通过切换时间片来实现的 所以线程越多 需要切换的次数就越多 耗费的时间越长)不存在锁的问题 (java通常会通过给进程加锁来解决多个线程访问同一资源的问题 而单线程就不存在这个问题)2. 非阻塞:有些朋友第一次接触这个词汇可能分不清阻塞和同步,非阻塞和异步的区别,下面我就

2022-05-14 11:19:12 468

原创 ThreadLocal原理分析

1、ThreadLocalThreadLocal 提供了线程本地的实例。它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。ThreadLocal 变量通常被private static修饰。当一个线程结束时,它所使用的所有 ThreadLocal 相对的实例副本都可被回收。总的来说,ThreadLocal 适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。ThreadLocal提供了线程本地变量,它可以保证访问到

2021-12-20 22:04:07 213

原创 Transactional注解 isolation propagation

1、Transactional@Transactional是spring中声明式事务管理的注解配置方式,相信这个注解的作用大家都很清楚。@Transactional注解可以帮助我们把事务开启、提交或者回滚的操作,通过aop的方式进行管理。通过@Transactional注解就能让spring为我们管理事务,免去了重复的事务管理逻辑,减少对业务代码的侵入,使我们开发人员能够专注于业务层面开发。2、Transactional注解里面的字段事物传播行为介绍:  @Transactional(prop

2021-11-11 11:05:41 3720

原创 Spring中的@Transactional(rollbackFor = Exception.class)

1、spring默认回滚在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚2、异常的分类error是一定会回滚的这里Exception是异常,他又分为运行时异常RuntimeException和非运行时异常如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。如果不想终止,则必须

2021-09-14 14:09:33 1158

原创 Spingboot1.5和2.0健康检查

1、springboot1.5健康检查在 pom 文件中添加 Actuator 的坐标<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency>因为默认的访问安全限制是开启的,所以,没法获取其检查信息,因此需要先关闭安全限制。在appl

2021-08-11 15:49:14 780

原创 深入理解java注解的实现原理

1,什么是注解注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解一般常用的注解可以分为三类:一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@SuppressWarnings(标明要忽略的警告),使用这些注解后编译器就会进行检查。一类为元注解,元注解是用于定义注解的注解,包括@Retent

2021-06-23 22:00:33 261

原创 阿里云oss——OSSObject

一、OSSObject是阿里云oss的基础对象对象是OSS存储数据的基本单元,也被称为OSS的文件。对象由元信息(Object Meta)、用户数据(Data)和文件名(Key)组成。对象由存储空间内部唯一的Key来标识。对象元信息是一组键值对,表示了对象的一些属性,例如最后修改时间、大小等信息,同时您也可以在元信息中存储一些自定义的信息。The entity class for representing an object in OSS.In OSS, every file is an OSSObj

2021-06-18 16:10:08 1454

原创 java IO流的概念与分类

1、概念流是一个相对抽象的概念,所谓流就是一个传输数据的通道,这个通道可以传输相应类型的数据。进而完成数据的传输。这个通道被实现为一个具体的对象。流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读

2021-06-09 22:51:09 265

原创 RabbitMQ学习1——组件

RabbitMQ 是 AMQP(高级消息队列协议)的标准实现:从 AMQP 协议可以看出,Queue、Exchange 和 Binding 构成了 AMQP 协议的核心Producer:消息生产者,即投递消息的程序。Broker:消息队列服务器实体。Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。Binding:绑定,它的作用就是把 Exchange 和 Queue 按照路由规则绑定起来。Queue:消息队列载体,每个消息都会被投入到一个或多个队列。Consumer:消息

2021-05-07 21:41:57 360

原创 RabbitMQ学习1——概述、优缺点

RabbitMQ是一个异步消息通信中间件,用erlang语言开发,实现了AMQP(Advanced Message Queue )协议,是一个开源产品,官方网站:http://www.rabbitmq.com/。应用场景:对于一个大型的软件系统来说,它会有很多的组件或者说模块或者说子系统或者(subsystem or Component or submodule)。那么这些模块的如何通信?这和传统的IPC有很大的区别。传统的IPC很多都是在单一系统上的,模块耦合性很大,不适合扩展(Scalability)

2021-05-06 21:42:31 391

原创 Java处理参数中带特殊符号

使用get方式时参数中不能有特殊字符,如:,空格,%,#,&,=等等;尤其是一些图片带有特殊字符,查询图片url的时候解决办法:用URL转义符替换。下面列出如下:URL 中+号表示空格 %2B空格 URL中的空格可以用+号或者编码 %20/ 分隔目录和子目录 %2F? 分隔实际的URL和参数 %3F% 指定特

2021-04-26 22:29:32 2547

原创 PageHelper分页插件源码debug

最近在写一个分页查询接口用到了分页插件PageHelper,代码很简单,原来没有看懂原理,就debug进去看了一下源代码,记录一下@Override public PageInfo<ProductZTDTO> getListByCategory(ProductXJZTParamDTO productXJZTParamDTO){ List<String> categoryCodes = this.getCategory(productXJZTParamDTO

2021-04-03 23:01:03 396

原创 SpringBoot 五、Spring Boot 启动全过程run方法源码分析

1、今天分析springboot启动的run方法先看下源码/** 运行Spring应用程序,创建并刷新一个新的 * Run the Spring application, creating and refreshing a new * {@link ApplicationContext}. * @param args the application arguments (usually passed from a Java main method) * @return a runn

2021-03-21 11:05:55 529

原创 Spring常用注解总结

踩到一个坑,有一个接口,在这个接口的实现类里,需要用到@Autowired注解,一时大意,没有在实现类上加上@Component注解,导致了Spring报错,找不到这个类一旦使用关于Spring的注解出现在类里,例如我在实现类中用到了@Autowired注解,被注解的这个类是从Spring容器中取出来的,那调用的实现类也需要被Spring容器管理,加上@Component@Component("conversionImpl")//其实默认的spring中的Bean id 为 conversionImp

2021-03-20 20:36:22 113

原创 SpringBoot 四、Spring Boot 启动全过程构造器源码分析

本篇基于 Spring Boot 2.4.3 版本进行分析Spring Boot 的入口类@SpringBootApplicationpublic class SpringBootBestPracticeApplication { public static void main(String[] args) { SpringApplication.run(SpringBootBestPracticeApplication.class, args); }}做过 Sp

2021-03-19 22:55:16 421

原创 SpringBoot 三、@SpringBootApplication 注解

新建springboot项目后,项目自动生成一个Application 类 ,今天我们主要讲下SpringBootApplication注解import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class BootApplication { public

2021-03-14 19:38:00 242 4

原创 二叉树遍历(前序、中序、后序)——Java实现

一、前序遍历访问顺序:先根节点,再左子树,最后右子树;上图的访问结果为:GDAFEMHZ。1)递归实现public void preOrderTraverse1(TreeNode root) { if (root != null) { System.out.print(root.val + "->"); preOrderTraverse1(root.left); preOrderTraverse1(root.

2021-03-14 10:25:57 216

原创 SpringBoot 二、SpringBoot模块组成

1、spring-boot模块该模块提供了一些特性用来支持springboot中其他模块,这些特性包含如下。SpringApplication类提供了静态方法以便于写一个独立了spring应用程序,该类的主要职责是create和refresh一个合适的Spring 应用程序上下文(ApplicationContext)给web应用提供了一个可选的web容器(目前有Tomcat或Jetty)一流的外部配置的支持(application.properties)提供了便捷的应用程序上下文(Applica

2021-03-08 22:30:14 1325

原创 SpringBoot 一、Springboot产生背景及介绍

一、spring boot诞生的背景长期以来 Java 的开发一直让人所诟病:·Java 项目开发复杂度极其高;· Java 项目的维护非常困难;· 在云时代如何实现项目的快速部署以及快速启动;· 即便使用了大量的开发框架,发现我们的开发也没少多少;· 当所有的人认为 Spring 不在前进的时候,Spring 推出了微架构实现的两个重要开发框架:SpringBoot、SpringCloud。  但是如果要想在 Spring 之中整合 RabbitMQ、Kafka、ActiveMQ、MySQL

2021-03-08 21:45:28 1573

原创 深入理解幂等性

什么事幂等性所谓幂等性设计,就是说,一次和多次请求某一个资源应该具有同样的副作用。用数学的语言来表达就是:f(x) = f(f(x))。比如,求绝对值的函数,abs(x) = abs(abs(x))。为什么我们需要这样的操作?说白了,就是在我们把系统解耦隔离后,服务间的调用可能会有三个状态,一个是成功(Success),一个是失败(Failed),一个是超时(Timeout)。前两者都是明确的状态,而超时则是完全不知道是什么状态。比如,超时原因是网络传输丢包的问题,可能是请求时就没有请求到,也有可

2021-02-02 17:39:14 120

原创 RabbitMQ和Kafka对比(二)

RabbitMQ可靠性我们通过前文知道,RabbitMQ的队列分为master queue和mirror queue,mirror queue 在master queue宕机之后,会被提升为master queue,如下图所示。队列A的consumer在消费的时候,机器宕机,此时客户端和服务端分别做如下动作:服务端:把mirror queue提升为master queue客户端:连接到新的master queue 所在的节点进行消费或者生产当master queue 所在节点宕机后,其正在被消费

2021-01-31 18:27:39 201

原创 RabbitMQ和Kafka对比(一)

RabbitMQ:rabbit作为传统意义上的消息队列,基于AMQP协议开发,倾向于做按各种规则的消息转发。Kafka:kafka更倾向于一个流式管道的概念,消息从一处流向另一处,吞吐量比rabbit更高。RabbitMQ架构首先来看RabbitMQ,他通过broker来进行统一调配消息去向,生产者通过指定的规则将消息发送到broker,broker再按照规则发送给消费者进行消费,消费者方可以选择消费方式为pull或者是broker主动push,支持的消费模式也有多种,点对点,广播,正则匹配等。R

2021-01-31 18:15:32 885 3

原创 mysql5.7创建新用户并给授权指定的数据库权限

1、使用 root 管理员登陆 mysqlmysql -uroot -p;2、创建新用户CREATE USER ‘CPSAdmin’@’%’ IDENTIFIED BY ‘CPSAdmin123’;‘%’ - 所有情况都能访问‘localhost’ - 本机才能访问’111.222.33.44‘ - 指定 ip 才能访问3、给该用户添加权限grant all privileges on gps_data.* to ‘CPSAdmin’@’%’;all 可以替换为 select,delete

2021-01-12 10:27:08 1450

原创 Nginx配置proxy_pass转发的/路径问题

在nginx中配置proxy_pass时,如果是按照^~匹配路径时,要注意proxy_pass后的url最后的/,当加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。location ^~ /static_js/{proxy_cache js_cache;proxy_set_header Host js.test.com;proxy_pass http://js.test.com/;}如上面的配置,如果请求的ur

2020-12-25 15:13:47 504

原创 String 里面的 lastIndexOf和indexOf区别

lastIndexOf :从后往前遍历查找对应字符串,找到对应字符串结束返回数据,返回值为int类型,返回查找字符串首个字符位置(从0开始查找),未找到返回 -1;indexOf :从前往后遍历查找对应字符串,找到对应字符串结束返回数据,返回值为int类型,返回查找字符串首个字符位置(从0开始查找),未找到返回 -1;String str = “12345654321”;int a = str.indexOf(“3”); // a为2int b = str.lastIndexOf(“3”); //

2020-12-20 11:54:32 509 2

原创 IDEA 2020 03 CVS git 改进

1、最近idea的注册码过期了,就下载了一个最新的idea版本,新版本的idea 哟很大的改动 比如 例如调试时的交互式提示,Git暂存支持,对Java 15记录和密封类的扩展支持等等。它简化了端点,框架和事件探查器的日常工作。通过基于机器学习技术的更好的代码完成,更直观和有用的新的“Welcome”界面以及更好的拼写和语法检查,整个UX得到了改进。简而言之,一切都更好!但是还是有些改动比较烦恼,比如之前拉去项目从VCS中拉去现在换成git的clone了url填写后点击clone...

2020-12-16 17:39:01 502

原创 页面http 405错误排查

问题:这两天pre环境前端发版后,pre就访问不到了,页面会报405错误分析HTTP 错误 405405 不允许此方法 一般是方法是GET你用POST请求了对于请求所标识的资源,不允许使用请求行中所指定的方法。请确保为所请求的资源设置了正确的 MIME 类型。一般情况只要修改请求方式就可以了,http请求方式如下表;然而当我看nginx日志发现前端项目代码nginx竟然没有权限访问,然后找到前端代码发现前端代码所在的文件夹是nobody用户nobody在linux中是一个不能登陆的帐号

2020-12-10 10:54:01 7386

原创 Fegin 错误 Could not extract response: no suitable HttpMessageConverter found for XXX

问题:这两天用Fegin 调用其他小组的下载接口报错feign.codec.DecodeException: Could not extract response: no suitable HttpMessageConverter found for response type [class com.XXX…manager.dto.HaloResponse] and content type [application/octet-stream;charset=UTF-8]原因:对方返回的结果用pos

2020-11-27 11:44:07 6404 1

原创 Java常用类——Character 类

Character 类用于对单个字符进行操作,该对象中包装一个基本类型 char 的值。Character 类提供了一系列方法来操纵字符。你可以使用Character的构造方法创建一个Character类对象,当你将一个char类型的参数传递给需要一个 Character 类型参数的方法时,这时编译器会自动将char类型参数转化为 Character 类型参数,这样我们可以称其为装箱,反之为拆箱。Character 类的常用方法:1、isLetter() 方法isLetter() 方法用于判断指定字

2020-11-14 16:22:46 388

原创 拓扑排序

介绍拓扑排序,很多人都可能听说但是不了解的一种算法。或许很多人只知道它是图论的一种排序,至于干什么的不清楚。又或许很多人可能还会认为它是一种啥排序。而实质上它是对有向图的顶点排成一个线性序列。至于定义,百科上是这么说的:对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Or

2020-11-06 17:25:04 957

原创 初识 BFS和DFS

树的遍历BFS:A B C D E F G H IDFS: A B C E F D G H I图的遍历从A出发BFS:A B C D E F (其中一种)DFS:A B D F E C (其中一种)数据结构BFS: 队列(先进先出)步骤:1、首先A入队列, 2、A出队列时,A的邻接结点B,C相应进入队列 3、B出队列时,B的邻接结点A,C,D中未进过队列的D进入队列 4、C出队列时,C的邻接

2020-10-28 22:16:29 246

原创 mysql中如何使用合适的字段和字段长度

下面是mysql一个字段中含有哪些信息一般重要的字段为类型,长度,属性,非空,索引,自增等等。注:A_I:auto_increment,代表自增。字段的类型有好多种,先说下字段中比较常用的类型和长度整数型1、整数型的数值类型已经限制了取值范围,有符号整型和无符号整型都有,而M值并不代表可以存储的数值字符长度,它代表的是数据在显示时显示的最小长度;2、当存储的字符长度超过M值时,没有任何的影响,只要不超过数值类型限制的范围;3、当存储的字符长度小于M值时,只有在设置了zerofill用0来

2020-09-26 11:39:55 1897

原创 五大常用算法之一:贪心算法

一、基本概念所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性(即某个状态以后的过程不会影响以前的状态,只与当前状态有关。)所以,对所采用的贪心策略一定要仔细分析其是否满足无后效性。二、贪心算法的基本思路建立数学模型来描述问题把求解的问题分成若干个子问题对每个

2020-09-20 23:33:00 319

原创 Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)

位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。1.与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。public class data13{public static void main(String[] args){int a=129;int

2020-09-05 17:27:16 216

原创 快速排序

简述快速排序是一种排序执行效率很高的排序算法,它利用分治法来对待排序序列进行分治排序,它的思想主要是通过一趟排序将待排记录分隔成独立的两部分,其中的一部分比关键字小,后面一部分比关键字大,然后再对这前后的两部分分别采用这种方式进行排序,通过递归的运算最终达到整个序列有序,下面我们简单进行阐述。快排思路我们从一个数组来逐步逐步说明快速排序的方法和思路。假设我们对数组{7, 1, 3, 5, 13, 9, 3, 6, 11}进行快速排序。首先在这个序列中找一个数作为基准数,为了方便可以取第一个数。遍

2020-08-19 23:38:10 104

原创 URL编码解决中文字符乱码(encodeURIComponent、encodeURI和decodeURIComponent、decodeURI)

1.概念URI: Uniform ResourceIdentifiers,通用资源标识符Global对象的encodeURI()和encodeURIComponent()方法可以对URI进行编码,以便发送给浏览器。有效的URI中不能包含某些字符,例如空格。而这URI编码方法就可以对URI进行编码,它们用特殊的UTF-8编码替换所有无效的字 符,从而让浏览器能够接受和理解。2、encodeURIComponentencodeURIComponent 转义除了字母、数字、(、)、.、!、~、*、’、-和

2020-08-14 17:41:41 4260

原创 linux下查找java进程占用CPU过高原因

1、top命令查询哪个进程占用CPU高2、top -H -p 31667 查看进程下面的线程3、 printf 0x%x 32285 将线程号转换成16进制4、然后再使用jstack查询线程的堆栈信息语法:jstack | grep -a 线程id(十六进制)jstack 31667 | grep -a 32285或者jstack 31667>jstack.txt 将堆栈信息输出到文件里面,去文件里面查找...

2020-08-03 19:17:06 403

原创 redis实现消息队列&发布/订阅模式使用

Redis实现轻量级的消息队列与消息中间件相比,没有高级特性也没有ACK保证,无法做到数据不重不漏,如果业务简单而且对消息的可靠性不是那么严格可以尝试使用。列表类型**队列Redis中列表List类型是按照插入顺序排序的字符串链表,和数据结构中的普通链表一样,可以在头部left和尾部right添加新的元素。插入时如果键不存在Redis将为该键创建一个新的链表。如果链表中所有元素均被删除,那么该键也会被删除。Redis ListRedis的列表List可以包含的最大元素数量为429496729

2020-07-28 15:38:51 2061

空空如也

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

TA关注的人

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