自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 简单且实用的spring security认证和授权(国庆day3)

1 认证Spring Security认证分为两种:表单认证(如用户名、密码),HTTP基础认证,就是把账号信息放到请求头。1.1 认证过程认证过程如下图,我们可以按照下图来编写认证的代码,构建Authentication是框架帮我做的,我们接着往下写代码。1.2 表单认证1.2.1 配置AuthenticationManagerpublic class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowir

2020-10-05 15:20:06 243

原创 简单且实用的多线程@EnableAsync(国庆day2)

使用多线程,往往是创建Thread,或者是实现runnable接口,用到线程池的时候还需要创建Executors,spring中有十分优秀的支持,就是注解@EnableAsync就可以使用多线程,@Async加在线程任务的方法上(需要异步执行的任务),定义一个线程任务,通过spring提供的ThreadPoolTaskExecutor就可以使用线程池。1 线程池配置WebApiThreadConfig@Configuration@EnableAsyncpublic class WebApiThrea

2020-10-04 22:08:22 170

原创 简单且实用的本地缓存(国庆day2)

1 整体流程2 代码实现2.1 查询的整体实现代码 /** * 获取记录等级列表 * * @param businessId 租户id * @return List<RecordLevelParam> */ @Transactional(rollbackFor = Exception.class) public List<RecordLevelParam> getRecordLevelList(Strin

2020-10-04 20:03:02 140

原创 简单且实用的参数校验注解(国庆day2)

##1 常用参数校验注解@AssertTrue 用于boolean字段,该字段只能为true @AssertFalse 该字段的值只能为false@CreditCardNumber 对信用卡号进行一个大致的验证@DecimalMax 只能小于或等于该值@DecimalMin 只能大于或等于该值@Digits(integer=,fraction=) 检查是否是一种数字的整数、分数,小数位数的数字@Email 检查是否是一个有效的email地址@Future 检查该字段的日期是否是属于将来的日

2020-10-04 13:31:51 934

原创 简单且实用的Lombok注解(国庆day2)

1 Lombok注解1.1 @Getter和@Setter@Getter 和 @Setter 就是为成员变量自动生成 get 和 set 方法。1.2 @ToString该注解需应用在类上,为我们生成 Object 的 toString 方法。1.3 @EqualsAndHashCode该注解需应用在类上,使用该注解,lombok会为我们生成 equals(Object other) 和 hashcode() 方法,包括所有非静态属性和非transient的属性,同样该注解也可以通过 excl

2020-10-04 13:15:52 167 1

原创 非常简单且实用的函数式编程(国庆day1)

函数式:用Lambda表达式实现函数的方式1 什么时候使用函数式编程?1.1 集合的操作1.1.1 转换list set map之间转换1.1.2 聚合操作count:获取数据数量max:获取按照规则约定的最大值min:获取按照规则约定的最小值avg:获取平均值1.1.3 循环处理foreach:对数据进行循环处理1.1.4 转换为Stringjoining:字符串数据指定分隔符1.1.5 分组groupingBy:按照特定功能处理分组1.1.6 获取数组toArray:数

2020-10-03 17:37:26 191

原创 消息队列-超简单的RabbitMQ

1 五种模式1.简单模式一个生产者,一个消费者,消息通过FIFO模式排队;2.work模式一个生产者,多个消费者,消费者接受到的消息是不同的;普通的work模式采用轮询的方式向不同的消费者发送消息;“能者多劳”的work模式采用回复确认机制,将消息置为手动确认模式,且将预置队列数为1(prefetchCount=1);一个消费者接收到一条消息,直到处理成功确认后才会收到第二条消息;即处理能力强的消费者将接收更多的消息。3.订阅模式一个生产者,一个交换机,多个队列,多个消费者,一个消息经过队列后

2020-09-08 19:44:25 181

原创 全文检索-超简单的ES

1 ES中的概念index: 数据库type: 数据库表mappings:表结构(字段,分词器)properties:字段doc:每一条记录2 ES中的操作对应关系型数据库中的操作2.1 创建索引index和映射mapping创建数据库和表2.2 删除索引index删除数据库2.3 创建,修改,删除文档document创建,修改,删除一条记录2.4 查询文档-根据id查询根据id查询记录2.5 查询文档-querystring查询模糊查询-查询语句会进行分词2.6 查询

2020-09-08 15:02:03 283

原创 缓存解决方案-超简单的redis

缓存采用spring data redis,非常之简单1 redis的五种数据类型Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合)。1.1 值类型public class TestValue {@Autowiredprivate RedisTemplate redisTemplate;@Testpublic void setValue() { redisTemplate.boundVa

2020-09-08 12:14:48 219

原创 保护微服务(spring security+OAuth2)

1 Spring 和 OAuth2结合验证和授权的流程(A)客户端注册到OAuth服务,注册的客户端才能访问资源(B)配置用户,用户不同的角色拥有不同的权限,不同权限对应不同的资源以及能对资源进行的操作。(C)用户打开客户端以后,客户端要求用户给予授权。(D)用户同意给予客户端授权。(E)客户端使用上一步获得的授权,向认证服务器申请令牌。(F)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。(G)客户端使用令牌,向资源服务器申请获取资源。(H)资源服务器确认令牌无误,根据用户角色以

2020-09-07 19:18:29 175

原创 01 零基础学算法(栈、队列和堆)

1 栈、队列和堆1.1 两个队列实现栈栈:1 2 3 4 5 出栈顺序 5 4 3 2 1, 相应的队列(先进先出)应该为 5 4 3 2 1。通过两个队列来实现栈:假设队列1已经有了 1 2 3 4,这是来了个5。我们让5进入队列2,然后把队列1(4,3,2,1)中的数据赋值给队列2,此时,队列2为 5 4 3 2 1。最后,我们把队列2中的数据赋值给队列1,队列1中的数据为5 4 3 2 1./** * 通过临时队列来实现栈 */class MyStack { ...

2020-08-16 18:50:15 140 1

原创 docker教程

1 构建自己的镜像容器相当于一个Linux系统(不光有应用还有运行环境),镜像相当于创建容器的模板。既然容器相当于linux系统,那么镜像肯定可以像Linux系统一样构建。1.1 Linux系统常见的操作 指定系统的镜像(cenos或者redhat) 设置系统的用户名和密码 给系统安装必要的软件(例如,Vim等) 配置系统的IP地址和端口 配置系统终端的默认路径 从宿主机中copy文件到系统中 将系统中的文件挂载到宿主机上 .

2020-08-09 15:53:13 125

原创 2020-08-05

(1)用户第一次注册到服务器,我们需要提供给亚峰:用户名 密码 设备id我们: 查询设备管理获取用户名和密码(2)之后,我们提供接口给亚峰,亚峰轮询各台设备,如果设备发生变化则调用我们的方法。我们负责把设备发生变动的消息发送到各个客户端。...

2020-08-05 19:12:47 96

原创 Docker的使用

1 基本概念(1)镜像和容器镜像就想到于一个模板,根据这个模板可以实例化出多个容器。(2)注册中心存放镜像的地方2 使用示例(搭建一个Nginx服务器)2.1 启动dockersystemctl startdocker2.2 拉取镜像docker pull nginx2.3 运行容器docker run -di --name=mynginx -p 80:80 nginx -i:表示运行容器 -d:在run后面加上-d参数,则会创建一个守护式容器在后.

2020-08-01 19:54:03 70

原创 周末搞点事情

1 微服务部署2 Spring Security JTW OAuth23 Zuul4 Hystrix

2020-07-31 18:15:21 85

原创 Spring OAuth2.0认证和授权用户

1 OAuth2.0的使用场景假设,A网站是一个打印照片的网站,B网站是一个存储照片的网站,二者原本毫无关联。如果一个用户想使用A网站打印自己存储在B网站的照片,那么A网站就需要使用B网站的照片资源才行。B:A凭什么访问我的资源,我的资源只能被授权过的人访问A: A告诉用户,你和B关系那么好,你去跟B要个令牌(token)给我啊,我带着token去访问B的资源。B包括两个部分:(1)资源服务(2)认证服务1 B系统1.1 资源服务(1)资源标记好(2)不同访问方式操作资..

2020-07-31 17:51:21 244

原创 01 Java内存优化之jvm三代关系

1 jvm的新生代、老年代、永久代关系(1)新生代新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1)。通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中。Java虚拟机每次使用新生代中的Eden和其中一块Survivor(From),在经过一次Minor GC后,将Eden和Survivor中还存活的对象一次性地复制到另一块Survivor空间上(这里使用的复制算法进行GC),最后清理掉Eden和刚才用过的Survivor(F

2020-07-26 11:50:24 303

原创 02 Glide

Glide1 常用方法with(Context context) - 需要上下文load(String url) - 这里我们所使用的一个字符串形式的网络图片的 URL,后面会讲解 load() 的更多使用方式into(ImageView imageView) - 你需要显示图片的目标ImageView.placeholder(R.drawable.place_image)-图片加载出来前,显示的图片.error(R.drawable.error_image)-图片加载失败后,显示的图片.th

2020-07-22 14:02:30 77

原创 Android常用框架使用指南

Android开发常用框架:BaseQuickAdapter Glide GreenDao RxJava MMKV OkHttp Retrofit Easypermissions Fragmentation MVP EventBus SmartRefreshLayout Butterknife Autosize Bugly JobScheduler Doraemonkit Leakcanary BadgeView PowerfulViewLibrary Photo

2020-07-22 11:37:21 548

原创 02 验证和授权

2 公司中实际开发情况验证授权不需要我们去管,我们只要和平台交互即可。3 后端开发正在上传…重新上传取消

2020-06-24 11:33:41 121

原创 01 Nexus私有仓库

1 Release和SNAPSHOT版本Release是稳定版本,构建的时候,如果本地仓库有,就不去远程仓库下载。SNAPSHOT是快照版本,构建的时候,如果本地仓库有,也去远程仓库下载。2 引入私有仓库maven conf文件配置 <!--<servers> <server> <id>releases</id> <username>deployment</username> <p

2020-06-24 10:20:27 134

原创 jaeger

一 jaeger基础1 基本介绍jaeger的开发语言是golangjaeger支持OpenTracing协议,同属于CNCF基金会jaeger支持各种各样的客户端,包括Go、Java、Node、Python、C++等jaeger支持udp协议传输,当然也支持httpjaeger的官网是 http://www.jaegertracing.io/OpenTracing的官网是https://opentracing.io/2 能够解决的问题分布式事务监控性能分析与性能优化调用链,找到

2020-06-06 21:43:02 1085 1

原创 分布式跟踪

1分布式调试1.1 存在的问题服务的分布式特性意味着你必须跨多个服务,物理机器和不同的数据存储来跟踪一个或多个交易,所以试图调试问题发生的地方会令人发狂。1.2 使分布式调试成为可能的方法和技术方法:使用关联 ID 将多个服务之间的交易链接在一起。 可视化跨多个服务的用户交易流程,并了解交易每个部分的性能特点。对应的技术:Spring Cloud Sleuth :SpringCloud Sleuth 是一个 Spring Cloud 项目,它使用关联 ID 处理 HTT...

2020-06-03 18:08:06 170

原创 mybatis学习教程

mybatis: 简单映射 自动映射 复杂映射 利用嵌套结果映射: :1对一 :1对多 配置缓存 动态sql 日志<resultMap id="detailedBlogResultMap" type="Blog"> <constructor> <idArg column="blog_id" javaType="int"/> </constr...

2020-06-02 17:11:06 85

原创 01 mybatis 使用(只讲怎么去用)

1 引入Jar包 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency&g

2020-06-02 15:58:07 358

原创 01Android相机开发(开关相机)

开关相机分为以下几个步骤:申请授权-->选择相机-->打开相机-->关闭相机1申请授权在使用相机 API 之前,必须在 AndroidManifest.xml 注册相机权限 android.permission.CAMERA。静态授权<uses-permission android:name="android.permission.CAMERA" />需要注意的是 6.0 以上的系统需要我们在程序运行的时候进行动态权限申请,所以我们需要在程...

2020-05-23 17:36:55 1187

原创 人脸识别详细教程

1 人脸拍照人在摄像头前面走,摄像头会把每一帧的数据传给人脸识别SDK,SDK会根据每一帧的数据绘制人脸框并返回人脸信息(faceInfo),当返回的人脸信息的质量分数超过给定的分数,就可以调用相机进行拍照。1.1 将每一帧的数据传给SDK...

2020-05-20 21:10:15 6414

原创 04 安卓开发之SharedPreferences存储

1 获取SharedPreferences对象pre = PreferenceManager.getDefaultSharedPreferences(this);2 获取editor对象 editor =pre.edit();3 保存数据 editor.putBoolean("isRemeber",true); editor.putString("password",password); editor.putString("account",account);4

2020-05-09 13:24:39 94

原创 03 安卓开发之广播机制

开发流程:(1)发布广播信息(指明Action) Button forceOffline = (Button) findViewById(R.id.force_offline); forceOffline.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent inten

2020-05-09 11:22:17 94

原创 02 安卓开发之生命周期

1 Activity四种状态Active/Running:Activity处于活动状态,此时Activity处于栈顶,是可见状态,可与用户进行交互。Paused:当Activity失去焦点时,或被一个新的非全屏的Activity,或被一个透明的Activity放置在栈顶时,Activity就转化为Paused状态。但我们需要明白,此时Activity只是失去了与用户交互的能力,其所...

2020-05-08 12:14:58 128

空空如也

空空如也

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

TA关注的人

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