- 博客(90)
- 资源 (3)
- 收藏
- 关注
原创 爬取网易buff CSGO饰品数据 - 优化篇
文章目录思路回顾配置优化RawConfigParser处理配置列表价格取舍价格过滤饰品类别限定内部实现优化:结合价格筛选和饰品类别筛选其他限定?命名The End继上周末搞了csgo饰品的爬虫之后,最近一周一直在根据社区小伙伴的意见建议进行优化。不得不说,玩家才是最好的产品经理,很多提出来的建议都让人为之一振,这也直接优化了最终的程序效率、实现方式等,同时也增加了一些新的功能。在这里就以优化篇记...
2019-12-07 12:58:01
14594
12
原创 linux小记:找到最占磁盘的文件(夹)
查看占用情况最大文件夹top10结论最大独立文件夹top10结论最大文件top10结论附:find命令格式按照文件名查找按照正则表达式匹配文件路径按照文件类型查找按照目录深度查找按照文件时间戳进行搜索按照文件大小进行搜索查找条件或与非参数传递其他最近突然发现我的家目录已经用了70%+了,所以想知道到底是什么东西占了我这么多地方。主要用...
2018-07-28 00:27:02
3638
原创 google protobuf 生成的Java对象结构
介绍.protoJava对象中的方法methods in interfacemethods in objectmethods in Builder示例介绍介绍日后再补,总之想要了解protobuf的工作原理,需要首先知道编程中的“Builder模式”——由于类属性过多而出现的一种较好的解决方式。没有共有构造函数,设置属性仅能通过Builder的set类方法等等。...
2018-06-28 01:56:44
10058
3
原创 Java处理InterruptedException
机制在Java中,一个线程是不能终止另一个线程的,除非那个线程自己想退出,或者JVM退出了。比如:Thread loop = new Thread( new Runnable() { @Override public void run() { while (true) { } } });loop.start();这个线...
2018-06-14 00:04:19
31604
6
原创 Java并发编程:并发任务执行及结果获取
Executor:任务执行ExecutorExecutorService任务生命周期管理对任务提交方法的拓展Future:未来对任务结果的获取CompletionService:及时获取已完成任务的结果Executor:任务执行关系:Executor <- ExecutorService => AbstractExecutorService =&
2018-06-13 17:54:25
4176
原创 ThreadLocal原理及内存泄露预防
前言原理为什么key使用弱引用内存泄露线程池参阅:http://www.importnew.com/22039.html前言ThreadLocal提供了线程独有的局部变量,可以在整个线程存活的过程中随时取用,极大地方便了一些逻辑的实现。常见的ThreadLocal用法有: - 存储单个线程上下文信息。比如存储id等; - 使变量线程安全。变量既然成为...
2018-05-24 13:38:21
74309
70
原创 “树”据结构三:B树
前言起源问题时间消耗索引加速B树 vs. 多级索引定义数据结构参考前言之所以写“树”据结构这一系列的文章,就是因为有一天突然看到了一句话:心里要有B树……是的,做人心里要有B数,做程序员心里一定要有B树。之前无论是在学校里学B树,还是自己看B树,总是感觉理解的不够好,事实证明也的确理解的不够到位,否则也不至于达到“看概念懵逼,过一段时间基本等于没看过...
2018-05-15 01:35:39
828
原创 “树”据结构二:AVL树
前言定义节点高度平衡因子算法数据结构二叉树的旋转左旋转右旋转失衡类型及其调整L-LL-RR-LR-RRebalance增rebalance after addrotate leftrotate right删rebalance after delete参阅前言和二叉搜索树比起来,AVL树(平衡二叉搜索树)才...
2018-05-14 23:01:25
356
原创 “树”据结构一:二叉搜索树(Binary Search Tree, BST)
前言定义来源算法数据结构查遍历增删总结前言想写两篇关于AVL树和B树的较为详细的介绍,发现需要先介绍二叉搜索树作为先导。定义二叉搜索树(Binary Search Thee, BST),也被称为二叉排序树(Binary Sort Tree, BST),无论哪种定义,都能表明其特点:有序,能够用于快速搜索。个人更倾向于称其为二叉搜索树。二叉搜...
2018-05-14 00:27:40
523
原创 Java IO的实现
从一个方法看javaIO: public byte[] compress(IWritable value) { if (value == null) return null; try { ByteArrayOutputStream bos = new ByteArrayOutputStream(); Da...
2018-04-20 14:44:01
806
原创 DelayQueue实现的Comparable接口
DelayQueueComparable接口和Delayed接口外话-线程池外话-静态内部类DelayQueueDelayQueue是JDK对BlockingQueue接口的一种实现类。对于DelayQueue的介绍,可以参考一篇很不错的文章。Comparable接口和Delayed接口DelayQueue队列保存的元素必须实现Delayed接口,而Delayed接口又实现了Comparabl
2017-11-28 02:31:34
757
1
原创 对Java8中distinct()的思考
list的转map的另一种猜想使用distinct给list去重直接使用distinct失败原因distinct依赖于equals重写equals的注意事项引申结论list的转map的另一种猜想Java8使用lambda表达式进行函数式编程可以对集合进行非常方便的操作。一个比较常见的操作是将list转换成map,一般使用Collectors的toMap()方法进行转换。一个比较常见的问
2017-11-16 23:59:34
25628
7
原创 mock
mock的由来一开始,没有mock的时候,人们测试的时候只能自己mock。比如需要一个PersonDao类的对象,其中有连接数据库查询数据库当前存储人数的方法getPersonNum()。但是可能因为数据库不存在等问题,其中的操作并不能正确执行,这时候一般:public PerSonDaoMock extends PersonDao{ @Override public int get
2017-10-25 22:45:02
2282
原创 Spring xml配置文件头解析
最简洁xml文件头详解命名空间头解析模式内容Spring的xml配置虽然比较繁琐,不如推荐使用的注解方式简介,但是能读懂xml配置文件还是很重要的,尤其是对于一些老系统的维护,几乎不可避免要面对xml配置文件的问题。现在我们就从默认的xml文件头说起。最简洁xml文件头以下可谓是最简洁的spring文件头的内容,然而看起来依旧一大坨,令人眼花缭乱。其实细细分析,就会觉得东西其实并不多。<?x
2017-10-20 03:17:42
1031
2
原创 Java Map初始化的一个错误:new HashMap().put("a", "b");
今天在使用PowerMock进行代码测试用例编写的时候,需要新建一个map,当时脑一抽,写成了:Map<String, Object> testMap = new HashMap().put("a", "b");然后收到了IDE的友善提醒:Incompatible types. Required: java.util.Map<java.lang.String, java.lang.Object>
2017-09-16 19:34:53
14453
2
原创 Archlinux安装UEFI Grub
最近换了电脑,以前的老电脑使用的是旧BIOS架构启动,新电脑都变成了新的BIOS架构即UEFI启动(UEFI是新BIOS架构,自从UEFI出来之后,老的BIOS架构便被称为legacy),在安装grub时比之前稍微麻烦了一点。准备参考教程:https://wiki.archlinux.org/index.php/GRUB 虽然Arch的wiki有简体中文的翻译,但是一定要看英文的!!!中文的翻译不
2017-08-27 03:45:07
16229
1
原创 使用枚举实现单例模式
前言单例模式的实现方式有多种,从最基础的非LazyLoad的懒汉式,到LazyLoad但需要双重检查的饿汉式,再到比较简单实现LazyLoad的静态内部类方式,均可实现单例模式。(忘了的可以查查资料:D 友情链接:http://blog.51cto.com/devbean/203501)不过使用枚举实现单例模式,可称之为实现单例模式最简单的方法。实现public enum MyS...
2017-08-10 11:32:20
1251
1
原创 Future/FutureTask & Callable/Runnable & Executor/ExecutorService/Executors
用途:笔记。 各类具体方法参阅JDK API。Callable/Runnable接口Runnable用于实现线程。大多数情况下,如果只想重写 run() 方法,而不重写其他 Thread 方法,那么应使用 Runnable 接口。这很重要,因为除非程序员打算修改或增强类的基本行为,否则不应为该类创建子类。Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的
2017-07-31 17:03:01
374
原创 Java异常处理
Java的异常处理有两种方式: - 默默解决。使用try...catch。 - 甩锅。使用throw和throws。通常,我们喜欢用try/catch捕获异常,然后对异常进行处理。但是有时候,我们也会不予理会,直接将异常扔出去,让调用者自己去处理异常。当然对调用者来说,它也有两种同样的选择:自己处理掉,或者再往外扔,交给自己的调用者,由新的调用者继续背锅。以下是几种正常与不正常的异常处理方式示例
2017-07-28 14:02:35
334
原创 快速排序及优化(三路划分等)
快速排序, 是最经典的排序算法之一。快速排序拥有良好的时间复杂度,平均为O(nlog2n)O(nlog_{2}n),最差为O(n2)O(n^2)。在这里,我们不妨略略深入讨论一下快速排序:时间复杂度分析首先说平均时间复杂度。以比较常用的从两头进行扫描的算法为例,算法主要分两步: 1. 是快排的核心:“分趟”。就是“每一趟”下来,找到某一个元素应该待的位置,这个元素一般被称为pivot; 2.再分
2017-04-19 00:36:02
12888
1
原创 使用StrongSwan配置IPSec
使用StrongSwan对IPSec进行研究,是一种很好的理解IPSec的实践。然而StrongSwan在使用的过程中实在是有太多的坑,网上的教程也多有不完整的地方,几乎没有能彻彻底底说明白每一步的,导致我在使用StrongSwan的过程中各种抓耳挠腮。程序员自然要造福程序员,在这里特将StrongSwan使用中所遇到的完整步骤记录下来,希望有所帮助。准备工作准备工作可不是简单地装个StrongSw
2017-03-22 13:55:38
52429
20
原创 C++ 输入输出运算符重载 感想
在C++中,经常会对输入输出运算符进行重载,而在重载的时候用到了友元(Friends)和引用返回(Returning References),这里对为什么会这么用发表一些思考。 比如,下面的类是一个简单的Student类,其中重载了<<和>>。//// Created by lgl on 17-3-14.//#include <iostream>#include <string>#inc
2017-03-14 17:39:29
6003
2
原创 操作系统(modifying)
操作系统OS对资源的管理,就是对硬件+软件两种资源的管理。 硬件:CPU+存储(主存)+设备 软件:文件(系统) 这就是操作系统的四个章节。进程线程单核达不到程序级并行,但可以达到指令级并行(pipeline)。进程基础概念: 目的:为了实现并发,要不然直接傻瓜调度就行了,就不需要进程了。 进程与程序的区别:动态vs静态;进程有PCB;二者多对多(一个进程可以涉及多个程序–>通过系统调用;
2016-09-20 00:11:37
1569
原创 Java打log日志
最近写Java工程,需要在客户端打上log,以便进行出错追踪。刚开始试了一些log4j之类的包,想着功能强大点儿。但是由于配置、版本不兼容、傻叉Windows等一系列问题,最终放弃,干脆直接采用Java自带的log好了。关于Java内置Logger的介绍,比较好的有这篇,可以学习一下其基本用法。但是如果按照那篇博客的“(六)如何使用JDK内置logger ”写一个LogUtil的话,在我的需求下会出
2016-08-31 17:37:42
28488
原创 Java解析json——Jackson
在Java下,想要解析json文件,已经有了现成的Jackson框架。有几个关于Jackson的基础例子,或者也可以看本文最后的附录。看过之后也就大致了解Jackson的基本用法了。至少Java对象和json的直接转化还是比较简单的。在这里,我主要记录一下自己使用readTree从服务器接收json并解析的过程。需求写一个客户端程序,客户端从服务器接收json,并解析为Java自己的对象,进行处理。
2016-08-29 18:33:01
3498
原创 linux小记:Ubuntu和Arch下的Apache
Apache2在Ubuntu和Arch下,配置文件的组织方式差别还是挺大的。小记一下,因为我过不久肯定就会忘的=.=Ubuntu在Ubuntu下,配置目录在/etc/apache2。在此目录下,主要配置文件是apache2.conf,但是为了更清晰,在Ubuntu上Apache的配置文件是拆分了的,最后在apache2.conf中都Include了进来。比如:# Include module con
2016-08-28 17:07:52
2174
原创 工厂的模式们
DIYSimpleFactoryFactoryMethodAbstractFactory1.DIY没有工厂的年代,客户需要自己造打印机:public class PrinterLgl { private String name = null; public PrinterLgl(String name) { this.name = name; Sy
2016-08-09 13:51:28
530
原创 linux小记:恍然大明白,sed命令中[commands]的格式
sed是我在linux上最喜欢的命令之一!之前一直觉得sed的格式乱乱的,又是sed '1,2p' fileName,又是sed 's/old/new/g' fileName的,格式千差万别,毫无规律可循!直到今天看到了这篇文章,终于看到了统一点!sed的用法就是:sed [options] [commands] [input-file]options就是带杠的参数,input-file就是文件的名
2016-06-05 21:39:55
1374
2
原创 linux小记:makefile(随使用程度持续更新)
格式生成多个可执行程序PHONY[我的笔记,仅限自己看懂=.=,也会随着我对makefile的需要程度和认知程度乱序更新]格式makefile的格式:target : prerequisites command //任意的shell 命令注意这个command可以是任意的shell命令。也就是说,如果clean: echo "I love you"当你在命令行中make clea
2016-05-21 15:40:25
461
转载 RMS's gdb Debugger Tutorial
How do I use gdb1 How do I compile with debugging symbols2 How do I run programs with the debugger3 How do I restart a program running in the debugger4 How do I exit the debugger5 How do I get hel
2016-05-18 13:09:11
1301
原创 linux小记:查看dd进度
经常使用dd命令制作linux系统盘,相当方便迅速。但是用了这么久,突然就想,要是能够知道dd现在的进度该多好,于是查了查,果然找到了。刻盘的时候,我们先在一个shell中使用dd,比如我们把Arch Linux的镜像刻到U盘/dev/sdc中:lgl@pArch ~/Downloads $ sudo dd if=archlinux-2016.04.01-dual.iso of=/dev/sdc此时
2016-05-01 14:29:27
21480
2
原创 康托展开 全排列
今天找到了一篇非常好的介绍康托展开的文章!!! http://www.cnblogs.com/1-2-3/archive/2011/04/25/generate-permutation-part2.html根据这篇文章,写出生成按序排列的全排列非常的简单:#include <iostream>#include <vector>#include <string>#define N 4using
2016-04-27 15:59:36
469
原创 C++使用stringstream进行数据类型转换
(参阅:http://www.cppblog.com/sandywin/archive/2007/07/13/27984.html) 在写程序的过程中,我们经常需要进行数据类型的转换,也经常搞混。但是如果使用stringstream的话,就在也不用担心了。sstreamstringstream在头文件<sstream>中,<sstream>库定义了三种类:istringstream、ostring
2016-04-27 12:26:19
3315
2
原创 Linux上使用iptables设置防火墙
因为老师留作业要对Netfilter内核模块进行扩展编程,因此在此之前先学习了一下iptables的用法,笔记一下,忘了就来看看。首先推荐一篇不错的博客,作为参考补充: http://www.cnblogs.com/JemBai/archive/2009/03/19/1416364.htmliptables和netfilter先说一下iptables和netfilter的关系:netfilter在
2016-04-17 15:35:28
7051
原创 复习——查看历史命令前十
呃,其实这是一个很久很古老的话题了。之所以拿来写篇博客,是为了让自己一定一定要记住cut/sort/uniq/tr/sed的用法,别再忘了……(拜托我自己,记性好点儿吧……) 首先,查看自己所有用过的命令历史记录,发现只有这一点儿……lgl@pArch ~ $ cat .bash_history pacman -S zshsudo pacman -S zshexit cd /home/
2016-04-03 12:55:34
861
原创 使用GPG对文件进行加密解密批处理
在日常生活中,我们一定有许多文件是放在自己电脑里不想让别人看到的。就拿照片举例吧,现在有一个文件夹,里面全是我们拍过的照片,下面让我们一步一步来看看如何使用GPG对它们进行批量加密。 GPG的使用方法可以参阅http://blog.csdn.net/puppylpg/article/details/50901779 先把最终的成果放上来—— 批量加密脚本EncryptionBatch:#
2016-03-18 03:35:00
10139
原创 使用GPG学习非对称加密
非对称加密需要公钥和私钥: 你的公钥的作用:别人用来给你发加密的信息&别人验证你的签名,即加密&验证(别人来做) 你的私钥的作用:你用来创建签名&解密别人发给你的信息的,即解密&签名(你来做) 具体而言,A要想发送加密信息到B,则: A有A的签名私钥和B的加密公匙 B有A的签名公匙和B的加密私钥 使用GPG可以很好的演示这一点:gpg...
2016-03-16 03:27:07
8981
转载 Everything You Need To Know To Start Using GnuPG with Mutt
======================================================================== Everything You Need To Know To Start Using GnuPG with Mutt============================================================
2016-03-16 01:32:48
1728
原创 return临时变量的问题
1. return临时变量问题#include<iostrea>int a,i;int fun(){int b=1,c=2;a=b+c;return a;}i=fun()想问下,是a赋值给i,还是a的临时副本赋值给i?我试过了,会产生临时副本的。兄弟们,我的意思是问,既然a是全局变量了,又不会消失,怎么还会产生临时副本。如果a是局部变量 ,还好理解,因为a出了函数的作用域就会消失,所
2016-01-29 16:16:40
2219
1
原创 HTML中的-head-标签及其内容
headtitlebasemetalinkscriptstyle<head> <head> 标签用于定义文档的头部,它是所有头部元素的容器。<head> 中的元素可以: - 引用脚本 - 指示浏览器在哪里找到样式表 - 提供元信息 - 等等 文档的头部描述了文档的各种属性和信息,包括文档的标题、在 Web 中的位置以及和其他文档的关系等。绝大多数文档头部包含的数据都不会
2016-01-29 16:14:35
1005
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人