Java SE8 的流库

JAVA中,流旨在创建一种关注“做什么而非怎么做”的设计理念,我们无需关心流内具体的实现,而把更多精力放在流需要做什么上面。例如我们需要计算一个字符串数组中,长度大于10的有多少,参见下面的代码清单: public static void main(String args[]) throws IOException{ String contents = new String(Files.readAllBytes(Paths.get("/Users/liebes/Desktop/open.route")), StandardCharsets.UTF_8); List<String> words = Arrays.asList(contents.split("\\PL+")); long count = 0; // 怎么做 for(String s : words){ if(s.length() > 10) count++; } System.out.println(count); // 做什么 count = words.stream().filter(s -> s.length() > 10).count(); System.out.println(count); count = words.parallelStream().filter(s -> s.length() > 10).count(); System.out.println(count); } 第一种方式,是很容易想到的一种,循环遍历计算的一种方法,而第二种则是使用了流的概念。 Stream,流。我们可以理解为水流,所有的流操作都是惰性的,即当你访问数据的时候,相关操作才会执行。我们在水流的行进方向设置我们想要完成的操作,当水流经过时,就会执行相关的操作。例如上面的 count = words.stream().filter(s -> s.length() > 10).cou...     阅读全文
Liebes's avatar
Liebes 5月 03, 2018

hexo 设置相册、主页并使用七牛云加速图片加载

据换完博客主题之后也有一段时间了,但总觉得哪里不对的样子,别人家都是主页和博客分开的,或者把博客放在主页的子目录下,而自己的却只有一个博客,反正自己也有域名,为什么不整个单独的主页出来呢。 这篇文章记录了海痴是如何在 google 上扒模版,如何利用 travis 来将博客的内容同步到主页上,又如何与某涛互相比较,解决图片加载慢的问题。 我们可以看看最终的效果:https://www.liebes.top 在一切开始之前,海痴已经准备好了用 hexo 搭建起来的博客,一个自己的域名,以及使用 travis 将博客部署到自己的服务器的脚本。可以参见上一篇博客:Hexo 更换 materail 主题,使用 Travis 持续集成 一份靠谱的主页模板关于如何找到一份高端上档次的主题模板,大家可以各显神通,当然,最快的还是 google 上搜一下:“主页 模板 bootstrap”,请一定加上 bootstrap 这个关键字,因为经过实践,这样搜出的结果最靠谱。 准备好之后,就可以将模板文件放在博客的根目录下,随便起个名字,就像这样: ├── _config.yml ├── db.json ├── liebes.top <- 这个是模板文件 ├── liebes.top.py <- 这个是之后会用到的脚本文件 ├── node_modules ├── package-lock.json ├── package.json ├── public ├── pyyaml ├── scaffolds ├── source ├── themes └── travis.enc 根据你的需要来修改你的主页模板...     阅读全文
Liebes's avatar
Liebes 2月 07, 2018

机器学习之 darknet YOLO 训练 VOC 数据集

最近被安排到中汽研实习(就算是实习吧),做了一些基于深度学习的图像识别工作,其实说起来自己对深度学习也没什么太深入的了解,都是现学现卖,跑人家的例子。不过还是在这边记录一下,以后回首可以稍稍感慨一下年轻时的无知。 关于机器学习,基础知识是看周志华的西瓜书(清华大学出版社的机器学习)来学习的,不过大致是囫囵吞枣,没有静下心来安安稳稳地钻研(时间也不允许)。 之后看了网易云课堂中吴恩达的机器学习教程,受益匪浅,推荐刚入门的同学去看看,讲的很好。 在吴恩达的视频中,大致了解了卷积神经网络和深度学习大致的套路,其实说到底就是各种卷积层(convolution layer),池化层(pooling layer),全连接层(fool connected layer)不断组合。 感觉机器学习想要深入了解,可能需要看很多相关的论文,之后的学习路程就记录在之后的博客中好了。 先说说甲方的需求:需要在行车过程中动态识别出前方交通标志,如果是限速标识,需要识别中里面的数字。 最近只做了第一部分,也就是交通标志的识别。对卷积神经网络有过了解的话能感觉出来这就是一个分类问题,好在公司已经标好了数据,并且是按照 VOC 格式标记的,接下来就是使用现成的网络训练就可以了。 我用的是 YOLO 在darknet 网站上有 v1 和 v2 两个版本。 https://pjreddie.com/darknet/yolo/ 以上是 YOLO darknet 版本的官网,上面的说明非常详细,也非常人性化,即使没有 GPU 也可以使用,可以简单的按照上面的教程进行安装。 注意,darknet 默认是不开启 GPU     阅读全文
Liebes's avatar
Liebes 1月 30, 2018

Hexo 更换 materail 主题,使用 Travis 持续集成

是的,我折腾了一天把博客的模版换了一下。怎么说呢,之前用的 Next 主题,很简约,看起来也很舒服,但总觉得少点什么,后来逛了逛其他人的站,感觉 Next 主题没有图,视觉上没什么冲击力,灰蒙蒙的感觉,于是采用了 material 这个主题,也很简洁,相比之下色彩丰富一些。 之前在使用 github pages 有一些不爽的地方就是地址不是自己的域名,然而宝宝是买了域名的,为什么要在 github 下弄呢,之前尝试过使用CNAME进行域名解析,但是在处理 https 的问题上比较麻烦,想着弄一套 CI流程出来。试过 hexo 的 deploy 插件,用 rsync 进行自动部署,然而未果,各种奇怪的问题弄的头痛。最近心血来潮 google 一番,发现好多人都在用Travis CI 来自动化部署,于是尝试了一下,效果很不错。 大致整理整理安装的过程吧,在阅读下面的文字之前,你需要自己安装过一次hexo,并了解hexo。 HEXO MATERIAL 主题更换从 github 上下载 material 主题:https://github.com/viosey/hexo-theme-material 下载 release 或者直接克隆项目均可,将主题包移动到 hexo 项目的 theme 中并修改博客配置文件 _config.yml theme: material 此时运行 hexo s 在本地就可以预览到 material 主题的样式了。接下来的步骤,完全可以按照官方的教程一项一项设置,不要嫌麻烦,因为很多特性默认都是没有的,需要自己去打开。 官方文档:     阅读全文
Liebes's avatar
Liebes 1月 25, 2018

Mysql 增量备份,全部备份实现方法以及自动化脚本

前情摘要自己作死干了一件特别蠢的事情(具体略) 然后开始研究如何进行增量备份 增量备份原理mysql 有个 binlog 的功能,会记录所有的用户的操作,可以依靠这个,配合全备份,将数据库回滚到某一个特殊的时刻。hhh 简单来说,比如我们每周做一次全备份,每天做一次增量备份,当数据库发生问题的时候,我们就可以先将数据库回滚到上一周我们的全备份的时间,然后再通过每天的增量备份(其实就是模拟所有的数据库操作,全部执行一遍),将数据恢复到我们想要的时间点。 配置mysql 的 binlog 功能需要在配置文件中打开,在 my.cnf 或者 mysqld.cnf 中添加以下几行: server-id = 1 # binlog存放路径 log_bin = /var/log/mysql/mysql-bin.log # binlog记录的格式,有row、statement、mixed三种选项 binlog-format = row # binlog写缓冲区设置大小,由于是内存,写速度非常快,可以有效提高binlog的写效率,如果数据库中经常出现大事务,可以酌情提高该参数。 binlog_cache_size = 32m # 最大缓存区大小 max_binlog_cache_size = 512m # binlog文件最大的大小 max_binlog_size = 1000m # 需要备份的数据库名,如...     阅读全文
Liebes's avatar
Liebes 10月 20, 2017

编辑器带来的XSS漏洞问题解决方案

接上一篇编辑器的使用,自己尝试着写了一段js代码,本以为laravel的 {{ $item }} 渲染可以完美的避免 XSS 的攻击(确实可以避免),但是由于 Editor 生成的时候,重新渲染了一遍,导致了可能出现的XSS漏洞。 可以看到,Editor已经帮助我们做了html的编码,于是我觉得不需要进行二次编码,就直接存到了数据库里,并且直接在前端进行了渲染。 Controller $res = Notification::updateById($notice_id, [ 'content' => $content, 'title' => $title, 'fileName' => $file_name, 'filePath' => $file_path ]); view <textarea id="editor" name="editor" rows="10" cols="80"> {{ $notice['content'] }} </textarea> 看起来一点问题也没有对不对!! 然而当渲染的时候缺弹出了一个框框······ 查看代码发现变成了整个样子     阅读全文
Liebes's avatar
Liebes 7月 11, 2017

Trumbowyg 轻量级的 WYSIWYG 编辑器(附带 Laravel 文件上传)

假期写代码,整理一些关于Editor,文件上传相关的东西。 editor 文件上传(Laravel) Trumbowyg Editor Trumbowyg 是一款轻量级的编辑器,可以高度DIY,界面也很简洁。 官方网站:Trumbowyg 首先下载官方包,在官网可以直接下载。 目录结构如下: 其中只需要留下 dist 文件夹即可,其余的是文档,例子,直接删除即可。 使用方法很简单,在 view 界面引用相关的 css 文件与 js 文件,这里默认已经引用了Jquery <link rel="stylesheet" href="/Trumbowyg/dist/ui/trumbowyg.min.css"> <script src="/Trumbowyg/dist/trumbowyg.js"></script> 同时需要创建一个 textarea 作为 editor 的容器 <textarea id="editor" name="editor" rows="10" cols="80"></textarea> 接下来就可以使用Trumbowyg 创建一个编辑器出来 <script> ...     阅读全文
Liebes's avatar
Liebes 7月 10, 2017

SQL injection 学习

在国哥的安排下,对着 kali渗透测试之 SQL injeciton 视频教程一顿撸(虽然没什么卵用),记录下来自己的一些实验过程和经历。 提前准备 本地的 lemp 环境,搭建可参考:Centos 7 Nginx + php + mysql Web服务器搭建 和 Unbuntu16.04 Nginx + php + mysql Web服务器搭建 当然 xampp 也是极好的。 用于攻击的 php 脚本和数据库,下面会给出 编写脚本找个能够访问的地方,编写如下 php 脚本 <html> <head></head> <body> <form action="./login.php" method="post"> ID<input name="id" type="text"><br/> <input type="submit" value="提交"> </form> <div> <p> ...     阅读全文
Liebes's avatar
Liebes 5月 22, 2017

Vagrant : Windows下开发小助手,告别双系统

不知道广大程序员们是怎么处理 Windows 和 Linux 的,最开始在 Windows 下面跑 Linux 的虚拟机,卡的自己怀疑人生。后来做了个双系统,自己 250 的固态表示根本不够用,而且动不动关机重启,别问我为什么,毕竟 office 割舍不了。后来一个学长点了我一下,既然想用 Linux 搞事情,用什么图形化界面,搞个服务器不就好了。然后我就搞了个腾讯云,然而,网络不好的时候真的蛋疼。最后,在宁哥大腿的指引下,尝试了一下 Vagrant 虚拟机,快的飞起,果断放弃双系统。 这里记录一些自己在搭建 Vagrant 环境时的步骤以及踩的坑。 提前准备: Vagrant VirtureBox 首先,我们要选择一个适合我们的 box 也就是操作系统。Vagrant 提供了许多 box 供我们使用:Vagrant Box 。这里,海痴选择的是 ubuntu16.04。 那么,当我们装好了 Vagrant,VirtureBox,并且下载好所需要的box以后,就可以开始搞事情了。当然,为了接下来的发展更加顺利,强烈建议装一个 Git ,毕竟 Git bash 异常的好用。 我们新建一个文件夹,命名为 ubuntu,并且将我们的 box 移到这个目录下。在这个目录打开命令行界面,添加box $ vagrant box add xenial-server-cloudimg-amd64-vagrant.box 添加后的 box 可以使用 vagrant box list     阅读全文
Liebes's avatar
Liebes 5月 17, 2017

网络安全学习之浏览器安全

最近在看《白帽子讲WEB安全》这本书,按着章节记录一下实践和学习的过程。 同源策略 简单来说,同源策略限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性 同源的网站指起host地址是一致的 比如以下几个地址 http://store.company.com/dir2/index.html http://store.company.com/dir1/index.html https://store.company.com/dir1/index.html http://store.company.com:8080/dir2/index.html http://news.company.com/dir1/index.html 其中1,2是同源的,而其他几个则不是。 对于一个网页中加载的javascr...     阅读全文
Liebes's avatar
Liebes 5月 10, 2017