自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一种不停服的数据迁移方案

好的方案是一步步演进出来的。当前最优的系统方案,可能在下一个月、三个月或半年后,就会遇到瓶颈,需要调整自身以便适应新的业务场景。系统的演进就是一个快进版的人类进化史。我之前负责的一个系统,一开始基本没啥数据量,短短几个月数据量就达到了30w+/天,也就是1个月后核心业务表就接近1千万(MySQL数据库),为此对系统进行了从单个数据库到分片库的升级改造。

2023-06-13 16:20:38 2291 1

原创 ibox pc端数据爬取逆向总结

本文总结了针对ibox平台的PC端数据爬取的思路及方式。虽然最终并没有达到目标,但是通过对这么严格的网站的爬取,也有不少收获,特此做篇总结,在此抛砖引玉。爬取的目标是‘市场’这个tab页下每张图片的具体信息(图1),刷新几次页面,在devtools页面能看许多Ajax请求(图2),针对每个请求的request、response数据观察,初步断定目标请求为,因为该请求的出入参均为乱码,极有可能为关键数据,否则不至于这么隐蔽。至于究竟是什么宝藏,接着分析。针对第一步的请求,观察该对应的调用链,即网络面板下的启动

2022-07-12 20:56:30 3650 9

原创 【ibox app逆向之生成wtoken】

要实现对这款app数据的爬取,有个关键的环节,就是实现wtoken这个加密参数的生成,,而wtoken这个参数是由阿里云的WAF的防护模块控制的,具体实现放在so层,安全系数很高。逆向的思路有2个,一是通过反汇编so层,进而破解其生成逻辑,难度系数很大;二是黑盒调用so层逻辑,不管其加密逻辑如何复杂,黑盒调用即可;本文介绍的是第2种方案,采用AndServer RPC的方式实现,具体来说就是自己开发个app,只实现ibox中wtoken的生成逻辑,将该app安装在真机上,并且对外提供生成wtoken的htt

2022-06-09 22:58:06 2289 7

原创 愿你读懂此书,依旧善良。

有这么一本书,学好了,你可能进大厂,也可能进监狱。在这里你不仅可以面向对象编程,也可以面相监狱编程。学会了它,你的人生从此迎来改变,学废了它,你的人生照样迎来改变!鉴于此,作者在书的末尾,专门介绍了相关的法律问题,防止读者走火入魔误入歧途。好了,不绕弯子了,这本书就是《Python3网络爬虫开发实战(第2版)》,介绍了大量爬虫与反爬虫的技术内幕。作者崔庆才,北航硕士,目前就职于微软,主要研究网络爬虫、Web开发、机器学习等方向。18年出版了本书的第一版,赢得10万爬虫爱好者的青睐。随着移动互联网的发展,

2022-06-01 05:02:28 238 2

原创 Java 日记框架

结绳记事,总结、思考,方有成长~日志框架发展史对于一个应用来说,日志是必不可少的一部分。程序一旦发布到线上,如果没有日志信息,那它就像个黑盒,而有了日志,就相当于有了一双洞察程序执行逻辑的眼睛。Java领域存在多种日志框架,现有的日志框架阵营包括:Slf4j、Logback、Commons Logging、Log4j 1、Log4j 2、Java util logging。虽然有这么多,但...

2020-04-22 07:27:59 350

原创 开发过程中如何快速定位问题

结绳记事,总结、思考,方有成长作为一枚程序员,工作中的经验会不断积累,已知的区域不断扩大,在面对各种程序问题,处理起来会越来越游刃有余。但即使经验再丰富的程序员,也不可能面面俱到,未知的区域仍然会很大,吾生有涯而学无涯。所以面对未知,如何快速定位问题,抓住主要矛盾,避免像无头苍蝇一样乱撞,迟迟找不到问题的解决方案,同样有一套方法论(不一定适合所有人)。面对程序中出现的各种异常(比如序列化、...

2020-04-19 16:18:53 1107

原创 Java8部分特性及list的常见操作

结绳记事,总结、思考,方有成长本文主要记录如何使用Java8中的流式处理,简洁的处理各种常见的操作。注意:数组转集合,体现的是适配器模式,只是转换接口,后台的数据仍是数组。所以使用集合相关的操作add、remove、clear会抛异常:UNSupportOperationException。List<String> list = Arrays.asList("官僚","买办...

2020-04-18 10:13:55 624

原创 根据已有工程生成maven archetype脚手架

结绳记事,记录、思考,方有成长~在实际开发过程中,我们经常会遇到创建新的代码工程的情况,大多数情况下会把之前的代码工程拷贝一份,删除旧的代码,作为新代码工程,在其上进行新需求的开发。也可以使用IDEA里已有的脚手架,便捷的生成新的代码工程,减少了我们的工作量。但是这样的代码工程往往太干净了,以至于我们要加很多东西。那要想基于当前团队中约定的代码工程,生成一个新的工程,有什么便捷的方法呢?这...

2020-04-13 00:35:04 663

原创 程序设计方法论-数据库设计

结绳记事,总结、思考,方有成长~本人普通开发一枚,平常的工作就是接需求,设计,开发,测试,上线。而其中的设计,更多的指的就是偏向于数据库的设计。虽然现在DDD(领域驱动)大火,但还在学习阶段,鉴于当前的设计方式,进行了总结回顾,以便进行任何业务场景的开发,都有章可循。设计包含逻辑数据库设计 和 物理数据库设计,下面分别展开。逻辑数据库设计:构建需求对应的数据模型。根据需求文档,其中结构化...

2020-03-28 17:32:49 473

原创 Spring AOP基础

结绳记事,总结,思考,方有成长~AOP是什么AOP是Aspect Oriented Programing的简称,即面向切面编程。它为程序开发提供了一个崭新的思考角度,可以将重复性的横切逻辑抽取到统一的模块中。通过OOP的纵向抽象和AOP的横向抽取,程序才可以真正解决重复性代码问题。AOP术语连接点(Joinpoint):类中具有边界性质的特定点,比如类中某个方法调用前、调用后、方法抛...

2020-03-21 20:48:14 132

原创 MySQL执行计划EXPLAIN

结绳记事,总结,思考,方有成长~MySQL执行计划调用方式EXPLAIN SELECT ……执行计划包含的信息及解读如下是一个显示执行计划的例子:EXPLAIN SELECT * FROMorder_info a, sku_info bWHERE a.order_id = b.order_id AND a.order_id = 202003090015该EXPLAIN命令的...

2020-03-15 22:18:31 167

原创 ElasticSearch复杂查询-指标聚合、桶聚合

结绳记事,思考、记录,方有成长~1.前言ElasticSearch的聚合(Aggregations)功能非常强大,允许在数据上做复杂的统计。聚合分析功能主要有指标聚合、桶聚合、管道聚合和矩阵聚合四大类,管道聚合和矩阵聚合官方说明是在试验阶段,后期会完全更改或者移除。以下demo会从restful接口、java的API接口及SQL含义3个层面来阐述ES的聚合概念。size如何理解2.指标...

2020-03-08 19:33:52 2095

原创 msgpack序列化异常和Beanutils.copyproperties集合的坑

结绳记事,总结、思考,方有成长~分布式环境下,服务间RPC调用是很常见的方式,比如Dubbo这样的RPC框架,我们只需采用拿来主义进行业务逻辑的开发即可,序列化、反序列化、网络传输、服务注册的事情对业务开发来说是透明的,就像JVM的内存管理一样,无需开发人员在底层投入过多精力,开发效率提升了,但有时候框架本身报错了,我们还是需要关注的。比如最近在联调RPC服务的时候,consumer端接收...

2020-03-01 23:16:43 2841 2

原创 序列化与反序列化

结绳记事,记录、思考,方有成长~什么是序列化,有何用把对象转为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。这样讲可能会比较抽象,考虑我们的程序在实际运行中,各种对象在内存中进行“生老病死”这样的一个周期,但内存并不是它唯一的归宿,可能它需要跟其他服务进行交互,比如分布式服务Dubbo中的订单服务要跟商品服务进行数据交互,当两个进程进行远程通信时,彼此可以...

2020-03-01 15:46:33 198

原创 ElasticSearch踩坑记录

结绳记事,记录,思考,方有成长~环境信息:ElasticSearch 7.X使用term查询text分词的字段,实现模糊查询,返回结果为空。比如我打算根据中国来搜索我是中国人这条记录,但并未查到。"query": { "term": { "title": "中国" }}原因:在创建mapping时未指定分词器,虽然text字段在保存到ES前会先分词,构建倒排索引...

2020-02-22 21:53:54 304

原创 Mysql基础

结绳记事,记录、思考,方有成长~VARCHAR 和 CHAR的区别及应用场景类型相似,但保存和检索数据的方式不同。CHAR(M)和VARCHAR(M)类型生命的长度标识要保存的最大字符数为M,不是字节数,例如:CHAR(30)可以占用30个字符,默认UTF8字符集存储,即90个字节。如果分配的长度超过了M个字符,则对值进行裁剪以使其长度适合。CHAR是固定长度的字符串,它的长度固...

2020-02-20 23:57:26 160

原创 Mysql如何支持emoji表情

结绳记事,记录、思考,方有成长~什么是字符集字符集(charcter set)是一套符号 和 编码。校对规则(collation)是在字符集内用于比较字符的一套规则,即字符集的排序规则。假设我们有一个字母表使用了4个字母:‘A’、‘B’、‘a’、‘b’。现在为每一个字母赋予一个数值:‘A’=0, ‘B’=1, ‘a’=2, ‘b’=3,字母’A’是一个符号,数字0是’A’的编码,那...

2020-02-20 23:22:44 902

原创 数据库设计

结绳记事,记录、思考,方有成长在做数据库设计时,有时我们需要保存一些树形的数据结构,比如组织架构、话题讨论、知识管理、商品分类、省市县,这些数据存在一种递归关系。...

2020-02-20 22:06:46 344

原创 Elasticsearch常用命令

Elasticsearch查询语法cat API查询当前ES集群相关的消息,包括集群中index数量、运行状态、当前几圈所在的ip,目的在于将查询的结果以更有好的方式输出_cat: 输出_cat api中所有支持的查询命令;_cat health: 检查es集群运行的状态_cat count: 可以快速的查询集群或者index中文档的数量_cat indices: 查询当前集群中所...

2020-02-08 19:20:41 231

原创 Java中equals和hashcode方法的来龙去脉

结绳记事,唯有记录、思考,方能成长~我们在开发过层中,经常用到要重写某个对象的equals方法和hashcode方法,并且在开发规约中,也会强制“只要重写了equals方法,就必须重写hashcode方法”,尤其针对map的键及set存储的对象。今天就梳理下equals和hashcode的来龙去脉。WHY 为什么要重写equals和hashcode方法Object类是java中的万类之祖...

2020-01-23 10:39:53 188

原创 Vue路由包含#号导致的Nginx无法转发问题

要解决的场景现有2个前端应用A和B,域名不同,页面相同(B对A进行了重构),后续页面功能的开发都会在B应用中,但由于A应用页面的入口已经对外开放,故不能A应用不能下线,期望通过跳转的方式,将所有打到A应用的请求,转发到B应用上。部署情况A应用为纯VUE静态工程,使用Nginx进行负载,URL采用Hash模式,即采用#方式,比如https://xxx.xx.com/myreport/#/myR...

2020-01-18 18:59:06 10540 1

原创 Redis数据结构及应用场景

Redis数据结构类型字符串类型散列(hash)类型列表类型使用的场景:字符串类型字符串类型是Redis中最基本的数据类型,它能存储任何形式的字符串,包括二进制数据。一个字符串类型键允许存储的数据的最大容量是512MB。字符串类型是其他4中数据类型的基础,其他数据类型和字符串的差别从某种程度上来说只是组织字符串的形式不同。例如,列表类型是以列表形式组织字符串,而集合类型是以集合的形式组织字符...

2020-01-14 08:07:22 320

原创 Charles-抓包工具的使用

Charles是一个常用的HTTP/HTTPS抓包工具,这在抓取PC端、移动端APP、M端的web请求时非常实用,当然更多地用来抓取移动端APP中的web请求,因为PC端完全可以在浏览器F12来跟踪网页的请求。如果想抓取UDP/TCP请求,Charles这个工具并不适合,不过可以使用Wireshark这个网络协议分析工具,当然前提是需要对计算机网络有一定了解,否则看到网络请求一定会眼花缭乱,一...

2019-11-02 08:40:23 1117

原创 如何使用Vue从头搭建前端应用 之 “后端视角”

使用Vue从头搭建前后端分离的应用一、搭建基础环境1.1 安装node.js环境1.2 初始化vue前端项目二、vue项目基本配置介绍三、跨域问题解决方案四、其他问题简介:前后端分离一直是前端、后端同学所期望的方式,当然如果你所在的团队中分工比较明确的话,毕竟解耦不仅是我们程序上的一种追求,工作方式同样如此。那么首先从整体上了解下项目整体情况吧:后端项目:springboot(2.0+)前...

2019-04-27 16:19:47 602 1

原创 SpringBoot集成Groovy、Mybatis注解 实现动态SQL,帮你摆脱繁琐的XML配置

SpringBoot的超简洁配置,为我们省去了宝贵的配置时间。Mybatis3在这方面也提供了很好的支持,通过注解让我们摆脱了繁琐的mapper xml,写DAO层的时候再也不用在java接口和xml配置来回切换了,无疑提升了代码的可读性。但很不幸,Mybatis3在复杂的动态SQL方面的支持,需要再写**Provider来构建SQL语句,这样的设计感觉有点顾此失彼,本来好端端的通过注解省去了...

2019-02-03 14:29:18 5391 6

原创 springboot Junit单元测试之坑--@SpringBootTest注解无法加载src/main/resources目录下资源文件

Springboot微服务框架是目前越来越流行的框架,省去了很多繁琐的xml配置。最近新启了个项目,采用SpringBoot框架从头搭建,中间也遇到过各种坑,现在先描述一下 Junit4单元测试之坑吧。结论:@SpringBootTest注解,只会加载test路径下的资源文件(即xml配置),并不会加载main路径下的资源文件,这点很坑。。。环境及问题描述:1.SpringBoot版本:...

2019-02-02 17:30:23 46691 7

原创 Socket、Servlet、Tomcat的关系

一、协议在阐述标题涉及到的3个关键词之前,非常有必要介绍下相关的协议,因为协议是指导做事的原则TCP/IP协议:这其实是两个协议,因为它们之间相互依赖,所以通常一起称呼。IP协议就是对网络中的每个节点进行标识,而标识的依据就是为每个节点分配一个唯一的IP。有了唯一的标识,节点间如何进行数据交互呢?于是就约定了TCP传输协议,就是节点间首先需要三次握手建立连接,再进行数据传输,最后通过四次挥...

2019-01-23 15:30:36 2862 1

转载 饿了么异地多活技术实现

饿了么技术团队花了1年多的时间,实现了业务的整体异地多活,能够灵活的在多个异地机房之间调度用户,实现了自由扩容和多机房容灾的目标。本文介绍这个项目的整体结构,还简要介绍实现多活的5大核心基础组件,为读者建立基本的概念模型,后续会有系列文章陆续介绍每个组件的实现细节。读者能够从中了解到做异地多活的大方向,为实现自己的异地多活,或者是容灾备份提供参考。背景:为什么要做异地多活?饿了么要做多活,是受...

2019-01-22 15:16:40 475

原创 IDEA使用技巧--将本地项目和git远程项目关联

之前开发没有从头儿搭建过新项目,都是从IDEA配置下项目的git地址,pull代码之后进行开发,提交。这次需要将本地新建的项目push到在git上同样是新建的空项目上去(git上的项目只有工程名和readme文件),两者之前并没有关联,发现如果按照之前的模式处理,会有问题。比如:先拉取(pull) git上的项目,然后再在此基础上添加新的子模块,会导致子模块无法关联到父模块上,也就是无法引用父p...

2019-01-15 19:40:50 10867

原创 ThreadLocal源码分析

文章目录一、ThreadLocal概览二、源码分析2.1)ThreadLocal的类结构2.2)ThreadLocalMap分析2.3)ThreadLocal的set方法2.4)ThreadLocal的get方法三、总结一、ThreadLocal概览ThreadLocal字面翻译是“本地线程”,但其实并非如此,它其实是一个“线程局部变量”,或许把它翻译为ThreadLocalVariable更...

2019-01-12 20:03:13 191

原创 ZooKeeper的会话机制Session

为什么会有会话机制Session首先我们看下ZooKeeper的架构图,client跟ZooKeeper集群中的某一台server保持连接,发送读/写请求,读请求直接由当前连接的server处理,写请求由于是事务请求,由当前server转发给leader进行处理。同时,client还能接收来自server端的watcher通知。而所有的这些交互,都是基于client和ZooKeeper的se...

2019-01-10 18:07:14 4791 3

原创 synchronize关键字

java线程相关的3个关键字synchronize、ThreadLocal、volatile也许在我们平常保持数据一致性场景中用到不多,因为它们都是基于JVM的特征,而我们的应用一般都是集群部署,分布式环境下线程的一致性几乎用不到它们,但在一些底层的源码中,还会看到他们的身影,比如ConcurrentHashMap、StringBuffer中,synchronize为线程安全保驾护航,那么接下来看...

2019-01-07 17:12:14 1049

原创 ZooKeeper leader选举 源码分析

Leader选举算法在ZooKeeper中,提供了3种Leader的选举算法,分别是LeaderElection、 UDP版本的FastLeaderElection、TCP版本的FastLeaderElection,可以通过再配置文件zoo.cfg中使用electionAlg属性来指定。从3.4.0版本开始,ZooKeeper废弃了前2种算法,只保留了TCP版本的FastLeaderElecti...

2019-01-06 21:11:30 3025 2

原创 ZooKeeper的ZAB协议

1.了解ZAB协议ZooKeeper Atomic Broadcast (ZAB)协议是ZooKeeper作为数据一致性的核心算法,一种支持崩溃恢复的原子广播协议。ZAB的核心是定义了那些会改变ZooKeeper服务器数据状态的事务请求的处理方式,即:所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为leader,而余下的其他服务器为follower。leader服务器负责将...

2018-12-29 18:42:24 279

原创 快排-java实现

快排是一种高效的排序方式,时间复杂度为n*log(n),一次递归需要比较n次,递归的深度为log(n),最坏的情况下,时间复杂度为(1/2)*n*(n-1),已排序的数组,每次比较的次数为(n-1)+(n-2)+……+1代码实现如下:package com.syj.test.sort;import java.util.Arrays;import java.util.HashMap;/...

2018-12-26 20:17:36 2182 1

原创 B树、B+树

针对大量的数据存储,用二叉树还是B树?在前一节我们有谈过二叉树,其中查询效率最高的为平衡二叉树,既然如此,用它作为数据库存储引擎是否最合适呢?答案是否定的。原因如下:对于大量的存储数据而言,平衡二叉树的树高会很大,很明显的一个缺点,就是树越高,查询效率越低(拿一个树高为3和树高为1000的两棵树对比,答案显而易见);针对平衡二叉树而言,逻辑上相邻的节点(比如父子节点),物理上不一定相邻,这...

2018-12-26 19:52:31 3324

原创 链表逆序、逆转

链表逆序、逆转链表分为单链表、双链表,此次讨论单链表的情况。之前有思考链表如何逆转,直到看了HashMap 1.7的resize操作,才发现原来逆转有这样简洁的写法(1.8虽然没有逆转,但实现也很经典,感兴趣可以自己研究)。特此记录分享下:要实现的效果如下:节点定义package com.syj.test.linkedtest;import lombok.Data;/** * ...

2018-12-25 18:27:25 249

原创 二叉树前序、中序、后续、广度优先遍历

二叉树遍历二叉树的遍历之前也看过,但好记性不如烂笔头,记录下吧二叉树定义:二叉树遍历:有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁,而对于广度遍历来说,需要其他数据结构的支撑,比如堆了。所以,对于一段代码来说,可读性有时候要比代码本身的效率要重要...

2018-12-25 17:55:54 343

转载 二叉树

二叉树二叉树定义满二叉树完全二叉树二叉树定义二叉树是一种特殊的树。二叉树的特点是每个结点最多有两个儿子,左边的叫做左儿子,右边的叫做右儿子,或者说每个结点最多有两棵子树。更加严格的递归定义是:二叉树要么为空,要么由根结点、左子树和右子树组成,而左子树和右子树分别是一棵二叉树。 下面这棵树就是一棵二叉树。满二叉树二叉树中还有连两种特殊的二叉树叫做满二叉树和完全二叉树。如果二叉树中每个内部结...

2018-12-19 14:56:59 237

原创 HBase原理分析

HBase原理分析参考: https://blog.csdn.net/u010330043/article/details/51291934 https://blog.csdn.net/chlaws/article/details/16918913 https://www.cnblogs.com/163yun/p/9014762.html https://blog.csdn.net/wa...

2018-12-18 21:31:00 234

空空如也

空空如也

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

TA关注的人

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