利用Github Page 搭建个人博客网站

前言

最近这几天,没事干,想找点事折腾下,于是自己便想到了自己一直想干的一件事:搭建一个属于自己的博客网站。目前搭建个人 blog 网站最好的是用 wordpress ,但是那个折腾起来好像还挺麻烦的,再加上还需要自己修改些前端代码和用 PHP 做(虽然我学了几天拍黄片,但是早已忘了),然后就是用 Github Page 吧,自己也一直在这个最大的交友网站装 X 。想想就用这个吧(后来好像觉得这个还挺省事的)

再说说拥有个人博客网站的好处吧:

  • 装 X(如果网站够炫)
  • 很好的用来总结自己所学的知识
  • 面试加分(在简历上放上自己的个人网站链接,面试官就可以更好的了解你,知道你所学知识的深度和广度)
  • 不再受其他博客平台的规则所束缚

如果你现在还没有自己个人博客网站的话,那么我觉得你看完本篇博客后,强烈的建议你去折腾折腾下,搞个自己的,让自己也能够体验装 X 的感觉。

程序访问文件的几种方式

IO

程序访问文件的几种方式

读取和写入文件 I/O 操作都调用操作系统提供的接口。因为磁盘设备是由操作系统管理的,应用程序要访问物理设备只能通过系统调用的方式来工作。读和写分别对应 read() 和 write() 两个系统调用。而只要是系统调用就可能存在内核空间地址和用户空间地址切换的问题,这也是为什么操作系统为了保护系统本身的运行安全而将内核程序运行使用的内存空间和用户程序运行的内存空间进行隔离造成的。虽然这样可以保证内核程序运行的安全性,但是也存在数据可能需要从内核空间向用户空间复制的问题。

如果遇到非常耗时的操作,如磁盘 I/O, 数据从磁盘复制到内核空间,然后又从内核空间复制到用户空间,将会非常缓慢。这时操作系统为了加速 I/O 访问,在内核空间使用缓存机制,也就是将从磁盘读取的文件按照一定的组织方式进行缓存,如果用户程序访问的是同一段磁盘地址的空间数据,那么操作系统将从内核缓存中直接取出返回给用户程序,这样就可以减小 I/O 的响应时间。

深入分析 Java Web 中的中文编码问题

背景:

编码问题一直困扰着程序开发人员,尤其是在 Java 中更加明显,因为 Java 是跨平台的语言,在不同平台的编码之间的切换较多。接下来将介绍 Java 编码问题出现的根本原因;在 Java 中经常遇到的几种编码格式的区别;在 Java 中经常需要编码的场景;出现中文问题的原因分析;在开发 Java Web 中可能存在编码的几个地方;一个 HTTP 请求怎么控制编码格式;如何避免出现中文编码问题等。

深度探究Java 中 finally 语句块

乍看这个题目,是不是有人会问,这个谁不知道啊,大凡熟悉 Java 编程的人都知道 finally 语句块的作用和用法。有什么可深度辨析的呢?事实并非如此,我发现即使写了很多年 Java 程序的人,也不一定能够透彻的理解 finally 语句块。本篇将以生动形象的案例来带您由浅入深的来分析一下这个小小的 finally,希望这篇文章能够让您真正的理解 finally 语句块的本质,至少阅读完本篇文章后,没有觉得浪费了时间。

可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机。接下来我就带您一步一步的揭开这个 finally 的神秘面纱。

解决jdk1.8中发送邮件失败(handshake_failure)问题

暑假在家做一个类似知乎的问答型网站(代码可见:Github/wenda 喜欢的可以给个star或者自己fork然后修改,目前功能还未很完善),其中有一个站内邮件通知系统(这里简单的讲一个例子:如果用户登录的时候出现异常,那么就会通过邮件发送通知用户)。然而却碰到一个问题。问题错误信息如下:

发送邮件失败Mail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465;
nested exception is: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure. Failed messages: javax.mail. MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 465;
nested exception is: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

《疯狂 Java 突破程序员基本功的 16 课》读书笔记

第 1 课 —— 数组与内存控制

数组初始化

数组初始化之后,该数组的长度是不可变的(可通过数组的 length 属性访问数组的长度)。Java 中的数组必须经过初始化(为数组对象的元素分配内存空间,并为每个数组元素指定初始值)才可使用。

数组初始化的形式:

  • 静态初始化:初始化时由程序员显示的指定每个数组的初始值,系统决定数组长度。
  • 动态初始化:初始化时程序员只指定数组的长度,系统为数组元素分配初始值。

从对象深入分析 Java 中实例变量和类变量的区别

实例变量 和 类变量

局部变量

特点:作用时间短,存储在方法的栈内存中

种类:

  • 形参:方法签名中定义的局部变量,由方法调用者负责为其赋值,随方法结束而消亡
  • 方法内的局部变量:方法内定义的局部变量,必须在方法内对其进行显示初始化,从初始化后开始生效,随方法结束而消亡
  • 代码块内的局部变量:在代码块中定义的局部变量,必须在代码块中进行显示初始化,从初始化后开始生效,随代码块结束而消亡

Pyspider框架 —— Python爬虫实战之爬取 V2EX 网站帖子

背景:

PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。在线示例: http://demo.pyspider.org/

官方文档: http://docs.pyspider.org/en/latest/

Github : https://github.com/binux/pyspider

本文爬虫代码 Github 地址:https://github.com/zhisheng17/Python-Projects/blob/master/v2ex/V2EX.py

MyBatis的foreach语句详解

foreach 的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach 元素的属性主要有 item,index,collection,open,separator,close。

  • item 表示集合中每一个元素进行迭代时的别名,

  • index 指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,

  • open 表示该语句以什么开始,

  • separator 表示在每次进行迭代之间以什么符号作为分隔 符,

  • close 表示以什么结束。

在使用 foreach 的时候最关键的也是最容易出错的就是 collection 属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

  1. 如果传入的是单参数且参数类型是一个List的时候,collection 属性值为 list
  2. 如果传入的是单参数且参数类型是一个 array 数组的时候,collection 的属性值为 array
  3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个 Map 了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在 breast 里面也是会把它封装成一个 Map 的,map 的 key 就是参数名,所以这个时候 collection 属性值就是传入的 List 或 array 对象在自己封装的 map 里面的 key 。

《Java 多线程编程核心技术》学习笔记及总结

第一章 —— Java 多线程技能

线程技术点:

  • 线程的启动
  • 如何使线程暂停
  • 如何使线程停止
  • 线程的优先级
  • 线程安全相关问题

进程和线程的概念及多线程的优点

进程:比如我们电脑运行的 QQ.exe 程序,是操作系统管理的基本运行单元

线程:在进程中独立运行的子任务,比如 QQ.exe 进程中就有很多线程在运行,下载文件线程、发送消息线程、语音线程、视频线程等。

多线程优点:我们电脑可以同时操作不同的软件,边听着歌,敲着代码,查看 pdf 文档,浏览网页等,CPU 在这些任务之间不停的切换,切换非常快,所以我们就觉得他们是在同时运行的。

,