0%

微博目前关注了好几个做安全的大佬
不要问我为什么关注
问就是想观摩下有钱人的微博!

其中有一个经常发 Java 相关的内容
今天看到一个稍微熟悉一点关于 FastJson 漏洞

窃以为Fastjson入门的最佳篇章非Mi1k7ea这个系列莫属,郑重推荐: Mi1k7ea
共有5篇,从第3篇开始,成体系地由旧到新展示了1.2.25之后各版本的补丁绕过,
直至思路惊艳的1.2.47绕过方案及1.2.48的修补方案,相当完备。
可以看出此君是动手实践派、整理归纳派,要我说,新学东西时就得这套路,无它。

今天看了这两篇文章,不得不说对 Java 是异常的熟悉。
想做好安全,想必要对用的东西了如指掌,知道坑在哪里,怎么填坑。

Read more »

写这种博客总感觉很低级
但是不得不承认自己从来没有认真的了解过打日志这件事
这里开个头,先从常见的日志配置文件开始,后续再深入了解

“I wish i had” vs “I’m glad i did”
人生会不会留下遗憾,在 20 年之后的这两句话中就能看出。
希望 20 年后的自己,能够很自豪的说:I’m glad i did.

一、self4j

这是一个只定义了标准的日志组件

二、logback

常见配置:logback.xml

Read more »

时间是公平的,对每个人都一样,不同之处在于每个人单位时间的产出值会有差异。
一直在寻找适合于自己的学习方法以提高时间的利用效率,以便不影响诗和远方==
奈何目前也没有太多满意的答案,或许生命的意义就是在于探索未知而又刺激的世界。
分享一些文字,提到了一些好的学习方法,抛砖引玉,共勉。

《贫穷的本质》告诉我们,贫穷的本质是认知。其实很多时候真的是认知,方法论决定了一个人可以走多远。

《刻意练习》原地踏步的练习是没意义的,大众眼里一万小时定律基本上是错误的,需要的是有进步练习;

《学习之道》十个不错的方法:运用回想、知识组块、简化类比、方法交替、间隔重复、注意休息、心理对照、自我测试、保持专注、困难先行;

《如何阅读一本书》里面有提到主题阅读,不同的人对同一主题会有不同的看法,可以对比吸收;

《程序员的职业素养》有提到卡塔练习,提高我们的肌肉反应,让写代码像聊天打字一遍的顺畅;

早些天看到一篇不错的帖子
对我感触最深的就是:4
标题:如果高效学习有什么秘诀的话,那就都在这里了:)

Read more »

零、概览

2015 年刚毕业的我懵懵懂懂看书都想睡觉
很开心来到北京遇到了许多美好的人和事
受到环境的影响一路走来成长加速收获颇丰

从 2016 开始慢慢喜欢上了阅读
从开始看书就想睡觉到现在一个6层书架都放不下的纸质书
从开始的『kindle voyage』到现在的『kindle oasis』第三代
从开始的只是在北京地铁5号线看下电子书到现在有点时间就看
慢慢地养成了阅读的习惯,生活也没有那么无聊,工作慢慢步入正轨
非技术书籍喜欢用 kindle 看,技术书还是纸书比较合适翻阅

简单统计
2020 51本
2019 71本
2018 38本
2017 48本(2017以及之前)

一、常见问题

Q:看书想睡觉怎么办?
A:先找有兴趣/好奇的主题

Read more »

零、摘要

2019
1.【完成】换一份合适的工作
2.【完成】信息系统项目管理师
3.【完成】坚持阅读,数量质量超过2018

2020
1.羽毛球/骑行/等锻炼项目
2.通过一项含金量较高的考试项目
3.持续阅读/5本华章CS/其它不限
4.深入了解公司内部组件/知其所以然

2019预料之中夹着惊喜,正反馈激励我前行。
2020充实得度过每一天,有所追求有所进步。

一、成长

自己想要什么样的生活?

Read more »

一、题目

Valid Sudoku链接

题目要求:
Determine if a 9x9 Sudoku board is valid. Only the filled cells need to be validated according to the following rules:

  • Each row must contain the digits 1-9 without repetition.
  • Each column must contain the digits 1-9 without repetition.
  • Each of the 9 3x3 sub-boxes of the grid must contain the digits 1-9 without repetition.

每一行都不能重复1-9
每一列都不能重复1-9
每个33的小格子(99分为9个3*3)不能重复

二、解题分析

  • 每一行每一列的数据,我们可以通过遍历二维数组解决;
  • 每个33的怎么解决呢?还是遍历二维数组,循环大(99)的二维数组时,符合条件再循环小(3*3)数组;
  • 怎么判断没有重复?方法很多,这里通过数组下标计数,数组初始值为0,根据下标+1,+1之后如果发现>1那么返回错误;

开始解题的时候可以一个大循环解决一个小问题,后续再把循环合并即可;
开始的时候我是写了三个双重for循环:

  1. 解决行重复判断问题;
  2. 解决列重复判断问题;
  3. 解决子矩阵重复判断问题;

当发现每一步都可行之后,尝试着合并,以减少时间复杂度;

三、代码样例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public static boolean isValidSudoku(char[][] board) {
// 处理 9 * 9
for (int i = 0; i < board.length; i++) {
int[] rowFlag = new int[10];
int[] columnFlag = new int[10];
for (int j = 0; j < board.length; j++) {
char row = board[i][j];
char column = board[j][i];
if (check(rowFlag, row)) {
return false;
}
if (check(columnFlag, column)) {
return false;
}
// 处理 3 * 3
if (i % 3 == 0 && j % 3 == 0) {
int[] smallFlag = new int[10];
for (int k = i; k < i + 3; k++) {
for (int l = j; l < j + 3; l++) {
char now = board[k][l];
if (check(smallFlag, now)) {
return false;
}
}
}
}
}
}
return true;
}

四、代码详情

可运行demo

Read more »

一、说明

做这件事的目的是为了了解一条数据库记录从创建到使用的一个情况;
查询分布时间计算方式采用Top Percentile方式,就是按一定排序的数据,前面xx%的最大值是多少;
TP999 1ms 代表某接口99.9%的响应都在1ms之内;

最终的目的也就是为了知道数据多久之后可以打入冷宫,使用廉价存储;
冷热数据分级处理有利于在性能和成本上达到一定的平衡;
如把内存缓存时间设置为tp90所处的时间,那么90%的数据都能快速返回,其它少量数据回源处理;

关键字
Java格式化输出
Java8
stream
parallelStream
分组
排序
DoubleSummaryStatistics数据分析
TP999

二、效果

日志源数据预览

1
19-10-24.14:47:12.721 [THREAD-22000-18-T-17] INFO  FacadeImpl        - response yw:jiaoyi, orderId:123456, time:2019-10-24T14:46:44
ywcountmin(ms)max(ms)tp50(ms)tp90(ms)tp99(ms)tp999(ms)
hisen1000110000206090130
hisen-1200216000165070110

ps 输出是格式化的数据,并不是表格,可以通过:

world->粘贴输出文本->插入->表格->文本转换成表格->空格

即可完成文字到表格转换

这种过程可能比较low,但是也需要时间去处理,过程中还得配合linux命令等整合文本;

三、代码

完整:github-CallerAnalyze.Java
摘要如下:

Read more »

一些简单的黑产攻防介绍

  1. 修改前置摄像头,直接播放本地视频或者图片(色情诈骗、网约车司机人脸识别);
  2. 恶意注册靶机系统:黑卡猫池、群控、云控、箱控(12个主板,模拟120台手机);
  3. 模拟点击脚本在黑产中使用比例逐年增高,主要是效果好很难区分是否为真实用户;
  4. ROS软路由(可管理250个IP)、秒拨(每次拨号IP改变);
Read more »