自定义博客皮肤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)
  • 收藏
  • 关注

原创 Systrace工具解析

Systrace工具解析文章目录Systrace工具解析前言1 Systrace 简介2 Systrace 预备知识3 Why 60 fps4 SystemServer 解读5 SurfaceFlinger 解读6 Input 解读7 Vsync 解读8 Vsync-App :基于 Choreographer 的渲染机制详解9 MainThread 和 RenderThread 解读10 Binder 和锁竞争解读11 Triple Buffer 解读12 CPU Info 解读前言本文为学习syst

2020-08-19 19:54:25 4231

原创 基于问题学习安卓系统架构

基于问题学习安卓系统架构文章目录基于问题学习安卓系统架构1 原理1.1 什么是安卓系统架构APP层Framework层Native/ArtNative: C/C++ArtHAL层Kernal层1.2 Android8源码与系统架构的关系源码目录结构源码目录描述1.3 为什么安卓系统架构要这么设计1 原理本节要了解、弄懂安卓系统架构的原理,首先将安卓系统架构完全分析清楚,再根据下载好的Android8的源码,将源码目录中的内容与系统架构联合在一起,最后总结为什么安卓系统架构要这么设计。1.1 什么是安

2020-08-12 10:25:38 1441

原创 没有实体手机,拿到华为手机源码

没有实体手机,拿到华为手机源码前言因为部门有职责要不断学习行业先进技术,所以要学习行业领先产品的软件技术结构。由于反编译效果会根据安卓版本变化,在反编译华为安卓10拿到比较少的源码后,出现新的需求:反编译华为安卓9的源码。在没有华为安卓9的实体手机的情况下,参考这篇文章:Android反编译之各大手机厂商的系统(adb pull和Rom包),文章中的第一部分是根据Rom包提取出framework和app等文件夹,这样就能满足新的需求。步骤step1:百度搜索:花粉俱乐部,进入华为的花粉俱乐部网页;

2020-08-12 10:20:53 937

原创 安卓应用架构

安卓应用架构1. 安卓应用目录结构结构图如下:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMQ6ey8M-1596719273619)(https://raw.githubusercontent.com/715220395/figure_cloud/master/Android1.1.jpg)]主要目录说明:build.gradle,项目Gradle构建脚本;gradle.properties,项目Gradle属性文件;local.properties

2020-08-06 21:08:38 650

原创 区块链

区块链文章目录区块链1. 概述2. 比特币2.1 密码学原理2.1.1 比特币使用的哈希函数的性质2.1.2 签名2.2 数据结构2.2.1 Hash pointer2.2.2 merkle tree2.3 比特币的协议2.4 比特币系统实现2.4.1 UTXO2.4.2 比特币区块例子2.4.3 比特币交易的例子2.4.4 出块时间和概率2.4.5 selfish mining2.5 比特币网...

2020-01-19 18:04:09 700

原创 控制台打印完整可执行Sql语句

控制台打印完整可执行Sql语句概述在开发过程中,我们需要通过日志看到请求执行的sql语句是什么,仅仅使用hibernate日志打印参数绑定的sql日志非常不方便:[2020-01-17 18:16:06.970] [http-nio-9080-exec-1 DEBUG] [o.h.SQL] select count(company0_.id) as col_0_0_ from company...

2020-01-17 18:38:01 3317

原创 压测遇到连接池请求等待超时报错分析与解决

压测遇到连接池请求等待超时报错分析与解决1. 概述在对项目进行压测时,我们发现在压测进行一段时间后,会出现连接池等待超时的错误,为了使系统在高并发、请求量激增的时候也能保持稳定,我们必须对这个错误进行分析并解决。最后的解决办法是将springboot的配置文件中添加一条配置:spring.jpa.open-in-view = false。我想从头开始,对出现的问题进行分析,再一步步缩小解决办法...

2020-01-16 20:56:07 14121 2

原创 懒加载和分库分表

懒加载和分库分表文章目录懒加载和分库分表1. 概述:2. 啥是懒加载?3. 啥是分库分表?4. 懒加载和分库分表的联系?1. 概述:很久之前,在项目压测的时候碰到过一个问题,就是当并发时请求数量上来,会抛出超过数据库连接等待时间的异常。最后查出来是因为Spring Boot中的一个默认开启的属性:spring.jpa.open-in-view,开启这个属性呢,会为了保证懒加载的数据在出了事务...

2020-01-13 11:08:44 128

原创 SpringDataJpa对拿到的对象进行set,但是不save,数据库也能自动更新

SpringDataJpa对拿到的对象进行set,但是不save,数据库也能自动更新概述今天在进行code review的时候,发现有一段代码很奇怪,就是标题所说的,将数据库的实体拿出来后,执行setXxx()更新,但是最后没有对实体进行save操作,数据库居然也能自动更新了。代码如下:/** * 这是一个举例子的方法,从数据库拿到实体->进行set更新且不save*/@Tra...

2019-12-03 14:51:37 2044 3

原创 读写锁ReadWriteLock

读写锁ReadWriteLock读写锁是什么?ReadWriteLock 维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 writer,读取锁可以由多个 reader线程同时保持。写入锁是独占的。ReadWriteLock 读取操作通常不会改变共享资源,但执行写入操作时,必须独占方式来获取锁。对于读取操作占 多数的数据结构。 ReadWriteLock 能提供比独占锁更高的...

2019-11-18 17:37:27 124

原创 使用Lock和Condition完成线程的按序交替

使用Lock和Condition完成线程的按序交替**题干:**编写一个程序,开启 3 个线程,这三个线程的 ID 分别为A、B、C,每个线程将自己的 ID 在屏幕上打印 10 遍,要 求输出的结果必须按顺序显示。如:ABCABCABC…… 依次递归**思路:**首先要创建3个线程ABC,他们通过标志来进行切换(对应flag=1、2、3),由于要求第一个打印的是A,那么一开始flag的默认值...

2019-11-18 15:19:47 155

原创 Lock锁实现线程安全

Lock锁实现线程安全在Java1.5之前,只能使用synchronized关键字和volatile关键字协调共享对象的访问,Java1.5之后,提供了lock接口,更加的灵活方便。ReentrantLock 实现了 Lock 接口,并提供了与 synchronized 相同的互斥性和内存可见性。但相较synchronized 提供了更高的处理锁的灵活性。值得注意地方:加锁后一定要记得解...

2019-11-18 11:24:01 321

原创 CountDownLatch 阻塞线程,记录线程执行完所花时间

CountDownLatch 阻塞线程,记录线程执行完所花时间1. 什么是CountDownLatch?计数减少的闭锁,是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。我们可以使用闭锁,将线程阻塞,等其他线程完成操作后,再释放线程,这样可以完成线程间的同步,不过要注意刷新当前线程的缓存。其构造方法如下:public CountDownLatch(in...

2019-11-15 20:31:33 400

原创 模仿CAS算法,将数据从0顺序累加到10

模仿CAS算法,将数据从0顺序累加到10模仿代码:package leo.casTest;public class simulateCas { // 模仿CAS算法的思想,完成将数据从0顺序累加到10 public static void main(String[] args) { AtomicsimulateThread atomicsimulateThr...

2019-11-15 16:50:14 267

原创 CAS解决原子性问题

CAS解决原子性问题首先,我们设定一个场景,我们有一个数据,初始值为0,我们要将它使用多线程的形式从0累加到10,要求每个线程只能加一次,并且不能出现两个线程累加后的结果出现重复的情况(比如线程A和线程B同时将数据进行累加后变成8),这就不得不考虑原子性为题。1. 什么是原子性问题?原子性问题指的是多线程并发的情况下,当我们要进行数据的读取与修改时,可能会因为线程同时读取数据,导致进行了重复...

2019-11-15 14:32:51 1292

原创 使用volatile关键字,解决内存可见性的问题

使用volatile关键字,解决内存可见性的问题什么是内存可见性?:我和你在一家公司上班,是领座的同事,到了晚上了需要开灯才能继续进行工作,这个时候我将灯打开了,按照通常的情况下,你也能马上发现灯亮了。也就是说当某个线程正在使用对象状态,而另一个线程在同时修改该状态,需要确保当一个线程修改了对象状态后,其他线程能够看到发生的状态变化。什么是可见性错误?:接着拿我开灯的事情来说,就是当我把灯打开...

2019-11-13 19:39:00 428 1

原创 使用JMeter完成压力测试入门

使用JMeter完成压力测试入门1. 背景在完成了对接口的unit test后,想着要对接口进行高并发测试,有两种方法:自己写一个java测试的类,在里面创建线程,然后调用接口;使用压力测试工具对接口进行测试。这里选择了第二种,用JMeter去对接口进行压力测试,所以这篇文章会简单说一说如何使用JMeter进行压力测试。2. 安装JMeter2.1 环境要求JDK1.8及以上。...

2019-11-07 19:44:14 547

原创 SpringMVC单元测试使用jsonPath取不到数据

SpringMVC单元测试使用jsonPath取不到数据概述:现在接触的项目在写测试,controller层使用的MockMVC做单元测试。今天在写一个关于分页查询的测试,想着使用jsonPath去拿数据进行对比,测试失败并且指明是找不到数据,可是我看控制台的信息,对应的位置是有数据的,最后通过和别的成功的测试进行对比,发现了问题。分页查询测试代码:/** * 分页查询详情接口 ...

2019-10-29 15:45:56 2548

原创 Eclipse如何添加maven依赖项目

Eclipse如何添加maven依赖项目概述在实习过程中,目前接触到的项目是采用微服务架构,也就是一个模块一个项目,这些模块之间有一些需要用maven依赖的形式关联起来,这样的好处是,当A项目需要用到B项目的东西的时候,就可以直接用,并且如果B项目修改了一些地方,在A项目也是实时更新的。最后的效果如下(为了不暴露公司的业务已打码,请见谅):操作步骤:首先,我们需要随便打开一个项目,就一...

2019-10-28 10:56:02 12312 2

原创 mockito测试自己写的update更新语句失败

mockito测试自己写的update更新语句失败问题描述:公司要写单元测试,使用的是springboot + mockito + junit去写单元测试,某天在对自己写的更新语句进行测试的时候发现了问题,明明更新语句执行成功了,但是最后进行数据校验的时候确显示没更新,所以报错。出问题的unit test代码如下:/** * 测试更新 * case1:正确修改; */@Te...

2019-10-24 12:00:17 1104

原创 Junit 捕获真实方法的异常

Junit 捕获真实方法的异常前言最近公司要求对自己写的代码进行单元测试,要分3层(controller、service、persistent)去分别测试,在对方法创建xx()的service层进行测试的时候遇到了问题。问题描述我需要做的测试是,保存数据的时候,有一些参数数据表设定不能为空,但是我传进去了空数据进去,那么肯定会在执行save方法的时候报错。由于需要将三层分割开,所以我一开始...

2019-10-22 12:41:44 1395

原创 BUG-1. json格式传参,个别数据丢失

BUG记录1.json格式传参,个别数据丢失问题描述今天用postman做代码测试的时候,发现传递参数有问题,有一些字符串类型的参数是拿不到的,显示为null,但是其他的字符串类型的参数能拿到,具体就是个别参数数据丢失。参数请求的实体类public class Request { private String appId; private String account; ...

2019-10-15 12:52:44 964

原创 Springboot 学习笔记

Springboot 学习笔记微服务微服务是,把所有的功能独立做成模块,模块之间用http通信,springboot负责将所有的功能做成模块,springcloud负责所有模块中间的通信,springcloud data flow用来处理流式数据计算、批处理。Helloworld将项目打成jar包,并且用java -jar命令去运行它。引入的插件有:<plugin> &...

2019-10-09 18:06:25 131

原创 数据库学习笔记之视图

数据库学习笔记前言:由于最近接到需求要设计一个项目的数据库,在设计的过程中,发现数据库的存储过程、视图几乎不了解,而且索引的设置还想再深入研究一下,所以写下这份学习笔记,2019年9月20日17:12:33,fighting~视图视图是啥?视图(子查询):是从一个或多个表导出的虚拟的表,其内容由查询定义。具有普通表的结构,但是不实现数据存储。对视图的修改:单表视图一般用于查询和修改,...

2019-10-09 18:02:39 218

原创 Git学习笔记

Git学习笔记文章目录Git学习笔记前言Git简介Git安装创建版本库时光机穿梭查看、上传修改的文件版本回退工作区和缓存区管理修改撤销修改删除文件远程仓库分支管理创建与合并分支解决冲突分支管理策略BUG分支参考文档前言Git的强大早就有所耳闻,现在很多企业公司都用到了git做版本的控制,目前在云歌实习,云歌提交项目的方式是用git指令向coding提交自己负责的部分,目前已经提交过两个实习培...

2019-10-09 18:00:41 202

原创 Kafka学习笔记

Kafka学习笔记文章目录*Kafka*学习笔记*Kafka*是啥?*Kafka*有啥用?*Kafka*用在哪里?*Kafka*的优点和缺点是什么?*Kafka*的架构*Kafka*工作流程分析生产消息如何写入分区(*Partition*)?为什么需要分区呢?副本(*Replication*)有啥用?数据写入的流程Broker 保存消息储存方式存储策略zookeeper储存结构消费消息高级API...

2019-10-09 17:56:03 206

原创 如何将MySQL中的每一张表的设置属性导出?

如何将MySQL中的每一张表的设置属性导出?前言由于实习接触的项目需要设计数据库表,所以在2个星期的设计后,大概出来差不多30张表,这些表是需要做文档说明的,文档中有一块是要展示每张表的属性,包括每一栏字段、注释、默认值、是否为空、数据类型、长度、索引,所以问题来了:如何快速的将它们导出来做成表格呢?收集信息在获得疑问后,我设计了两版数据库,写了两版文档,我的第一版文档的各表汇总中,我是使...

2019-09-24 14:44:07 786

原创 mmall数据库学习笔记

mmall数据库学习笔记文章目录mmall数据库学习笔记唯一索引产品表购物车表支付信息表订单表订单明细表收货地址表外键唯一索引在用户表中,设置了用户名作为唯一索引,理由如下:用户名是不允许重复的,那么当不是分布式开发的时候,我们可以用锁机制或者同步方法来处理这个问题,但是当分布式开发时,就不能用这个机制了,所以我们把它设为了唯一索引,让mysql为我们做处理。产品表内部存放图片地址时...

2019-09-18 09:21:38 310

原创 Token学习笔记

Token文章目录TokenToken产生的背景?Token是什么?Token的作用?生成Token的方法有哪些?验证Token的注意事项?使用Token的基本流程Token产生的背景?在客户端与服务端的交互过程中,客户端频繁地向服务端请求数据,服务端频繁地去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,并作出相应提示,但是如果总是需要对比用户名和密码,会在一定程度上加大安全问...

2019-09-18 09:14:12 336

原创 Golang学习笔记

Golang学习笔记文章目录Golang学习笔记Go是啥?Go语言的用途Go语言的特点Go基本语法基本数据类型Go变量的定义查看数据类型查看字符的码值字符串数值类型转换注意事项基本类型转 string 类型string 类型转基本数据类型指针数组数组的定义数组在内存布局四种初始化数组的方式切片切片是什么?切片的定义方式切片在内存中形式切片的遍历MapMap集合定义Map集合的使用Map操作map...

2019-09-09 18:50:59 327

空空如也

空空如也

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

TA关注的人

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