0%

前言

这篇文章其实是我很久之前总结的,因为之前的笔记都比较零碎,现在统一将他迁移到博客。学习Java并发编程强烈推荐两本书,一本是《Java并发编程实战》,另一本是《Java7 并发实战手册》

第一本书的作者里面有 Joshua Bloch ,这位大牛可是Java Current类库的作者之一哦,类库作者亲手写的书就足够成为你看它的理由啦。Anyway,这本书对并发的理论真的讲得很好,从竞态条件、原子性到内存逸出、乐观锁、悲观锁,内容十分全面,我觉得是每一个Java程序必读的书目,可以帮助你系统地学习Java并发的知识。

Java并发编程实战固然好,但是对于计算机基础薄弱的人来说,很多概念还是略显苦涩。如果你是这样的人的话,不妨先读一下Java7并发编程实战手册。Cook Cook Book嘛,跟着敲代码就行了,另外书中还会介绍一下并发的场景,都是对于新手很友好的哦~

阅读全文 »

本文翻译自DEVELPERS AREALINUX – IO MULTIPLEXING – SELECT VS POLL VS EPOLL

前言

众所周知,在linux的世界里,一切皆文件。每一个进程都拥有一张文件描述符的表,指向文件、socket、硬件还有一些操作系统对象。

典型的拥有很多IO源的系统都会有一个初始化的阶段,然后进入待机模式——等待客户端请求并且响应。

最简单的解决方案就是为每一个客户端创建一个线程(或者进程),一直阻塞直到请求发送或者写入了响应。这种模式在客户端数量很小的时候可以工作,但是我们想要扩展到成千上万的客户端,为每个客户端创建线程(或者进程)是一个很糟糕的主意。

IO多路复用

问题的解决方案是使用内核机制去轮询一系列的文件描述符。在linux系统下,主要有以下三种选择:

  • select(2)
  • poll(2)
  • epoll

以上三种方法的思想都是一致的,新建一系列的文件描述符,告诉内核你对每一个描述符的操作,然后使用线程去阻塞一个函数调用直到至少有一个文件描述符请求的操作是可用的。

阅读全文 »

前言

记录一些linux的常用操作以便查询,暂时先记录,以后有时间再分门别类。

阅读全文 »

用户初始化

git config –global user.name <your name>
git config –global user.password <your password>
ssh-keygen 生成秘钥
vim ~/.ssh/authorized_keys 添加客户端秘钥
cat ~/.ssh/id_rsa.pub 输出公钥

1
2
su git #切换用户
sudo chsh -s /usr/bin/git-shell 更改登录的shell脚本
阅读全文 »

常用软件汇总

前言

因为可能经常换电脑,或者电脑重装系统,所以经常需要重装软件,记录一下使用的软件及其下载地址是很有必要的,方便日后查阅。

以下下载链接都是win下的版本,暂时没收录其他系统。

开发工具

软件 功能 下载地址
idea Community Java开发IDE 下载地址
JDk Java开发工具 下载地址
MySQL 数据库 下载地址
XShell 终端 下载地址
XFTP FTP客户端 下载地址
git git客户端 下载地址
vscode 编辑器 下载地址
postman 模拟HTTP请求工具 下载地址
fiddler HTTP抓包工具 下载地址
frp 反代工具 下载地址
shadowsocks 正向代理工具 下载地址
阅读全文 »

前言

毕业设计做了一个签到系统的服务端,架构使用的Java栈的传统架构,也是最简单的架构。这个架构主要用Nginx做反向代理和负载均衡(我的项目没有使用到这一块),Tomcat作为Servlet的容器,MySQL作为数据库。项目也比较基础,没有太多难点,但是在项目部署过程当中还是遇到了一些问题,所以想着把部署的过程及记录下来,方便自己查看。

系统环境

操作系统:CentOS 7.4 x64
JDK: 1.8.171
MySQL: 5.7
Tomcat: 9.0.8

阅读全文 »

前言

我对于邮箱理解,在很长一段时间里,都是qq邮箱、163邮箱、126邮箱等等的各种第三方邮箱。这些邮箱都是注册一下,然后从web页面登陆进去,就可以收发邮件了。后来上了计算机网络这门课,学习到了有关于邮件的一些协议比如SMTP、POP3、IMAP。但是,当时也只是知道有这几种协议,也没有去实践过,现在想起来真的觉得计算机各方面知识自己都实践得太少了。而且最近在学习java web开发,想着实现一个邮件发送验证码的功能,同时又想拥有一个自己的域名邮箱,所以就决定配置一下邮件服务器。

阅读全文 »

前言

久闻scrapy大名,一直想找机会了解一下这框架,在兴趣的驱动下学习了一下简单的scrapy的使用。虽然上次用java做的一个爬虫,但是后来觉得也算不上什么爬虫吧,只能算模拟http请求和http响应的处理、json的序列化和反序列化、excel文件的读取和写入而已,很多爬虫需要处理的东西也并没有处理。
但是scrapy就不一样了,作为一个成熟的爬虫框架,scrapy有以下几点优势。

  1. 内嵌了CSS选择器和XPath解析器用于提取HTML/XML的信息。
  2. 提供了一个shell控制台用于测试css和xpath的表达式。
  3. 良好的架构设计:middleware、pipeline。
  4. 成熟的请求调度器。

备注: 以上特性来自于scrapy官方文档

scrapy还有很多其他的特性,我在实践中比较常用的就是上面这几项。

另外,上次爬取动态页面的时候,采取的策略是分析AJAX请求的URL然后自己构造请求。这种方法比较麻烦,需要自己去分析请求,这次我们采用selenium+headless-chrome,以浏览器自动化的方式爬取数据。

阅读全文 »

背景

最近女朋友需要利用tableau来做数据可视化的作业,要做数据可视化,那首先可定得要有数据。她们打算用八爪鱼等爬虫软件来抓取数据,结果没成功,原因不明。然后跟我吐槽了一下这个事情,刚好我最近也要学爬虫,本着项目驱动学习的理念,就直接选择了这个项目来练手了。

准备工作

编程环境:

1
2
3
4
5
6
IntelliJ IDEA 2017.1.5
Build #IU-171.4694.70, built on July 4, 2017
Licensed to weapon
JRE: 1.8.0_112-release-736-b21 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

编程环境如上所示,因为我Java语言比较熟悉,所以编程语言选择了Java。虽然Java做爬虫语法上面比较累赘,但是Python还没学会,就凑合着用Java写了。

阅读全文 »

似乎自己从来都没有写过博客,能稍微沾上边的就初中的时候写qq空间的日志吧,感觉已经是半个世纪前的事情了。然后现在为什么又想写博客了呢?原因主要有以下几个。

第一,上了大学以来,似乎都没什么做笔记的习惯了,无论是上课还是看书还是练习都是听了或看了或做了之后就算了,没有经过自己的再次思考去沉淀这些知识,所以想写博客来整理自己的思路和记录自己的思考。

第二,现在网络上有很多资源,有时候看了之后第二次又忘了,所以需要markdown下来方便自己二次查询。

第三,写文章能够让自己的心情静下来,其实是一件很放松的事情,所以写博客也是一种放松自己的途径。

总得来说就是希望自己可以保持思考,用心学习!希望自己坚持下去!

阅读全文 »