程序访问文件的几种方式

IO

程序访问文件的几种方式

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

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

MySQL 处理海量数据时的一些优化查询速度方法

在参与实际项目中,当 MySQL 表的数据量达到百万级时,普通的 SQL 查询效率呈直线下降,而且如果 where 中的查询条件较多时,其查询速度无法容忍。想想可知,假如我们查询淘宝的一个订单详情,如果查询时间高达几十秒,这么高的查询延时,任何用户都会抓狂。因此如何提高 SQL 语句查询效率,显得十分重要。

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

记录下自己第一次坐飞机的感受

前提

因为学校的原因,需要在大三的时候出去实训几个月,然后选择的是在昆山,公司规定要在 2017 年 4 月 19 号之前赶到,所以我提前订的机票是 17 号,之所以会订机票,其实很大一部分原因是由于自己之前没有坐过飞机,所以想体验一下坐飞机的感脚(嘿嘿),再加上这是机票的淡季,所以坐飞机的价钱比做高铁还便宜。整个行程:学校 ——> 南昌机场 ——> 上海虹桥机场 ——> 公司

学校出发

10 点左右去食堂吃了个早餐,然后打包好自己的行李,由于第一次坐飞机,所以打算提前时间去机场,然后在机场熟悉熟悉环境,不然的话错过飞机,那就 gg 了。大概 11:30 了,就拖着行李出门,在学校门口叫了辆 滴滴车 去机场(因为公交车要坐好久并且去机场的路好烂),叫的滴滴车他走的是高速,很快。

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

实例变量 和 类变量

局部变量

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

种类:

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

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

前言

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

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

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

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

解决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

HashMap、Hashtable、HashSet 和 ConcurrentHashMap 的比较

HashMap 和 Hashtable 的比较是 Java 面试中的常见问题,用来考验程序员是否能够正确使用集合类以及是否可以随机应变使用多种思路解决问题。HashMap 的工作原理、ArrayList 与 Vector 的比较以及这个问题是有关 Java 集合框架的最经典的问题。Hashtable 是个过时的集合类,存在于 Java API 中很久了。在 Java 4 中被重写了,实现了 Map 接口,所以自此以后也成了 Java 集合框架中的一部分。Hashtable 和 HashMap 在 Java 面试中相当容易被问到,甚至成为了集合框架面试题中最常被考的问题,所以在参加任何 Java 面试之前,都不要忘了准备这一题。

Python爬虫实战之爬取糗事百科段子

完整代码地址:Python爬虫实战之爬取糗事百科段子

程序代码详解:

  1. Spider1-qiushibaike.py:爬取糗事百科的8小时最新页的段子。包含的信息有作者名称,觉得好笑人数,评论人数,发布的内容。如果发布的内容中含有图片的话,则过滤图片,内容依然显示出来。

  2. Spider2-qiushibaike.py:在Spider1-qiushibaike.py基础上,引入类和方法,进行优化和封装,爬取糗事百科的24小时热门页的段子。进一步优化,每按一次回车更新一条内容,当前页的内容抓取完毕后,自动抓取下一页的内容,按‘q’退出。

  3. Spider3-qiushibaike.py:在Spiders-qiushibaike.py基础上,爬取了百科段子的评论。按C查看当前这个糗事的评论,当切换到查看评论时,换回车显示下一个评论,按Q退出回到查看糗事。糗事段子页数是一页一页加载的,如果你已经看完所有的糗事,就会自动退出!

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

背景:

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

深度探究Java 中 finally 语句块

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

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

通过项目逐步深入了解Mybatis(二)

转载请务必注明出处,原创不易!

相关文章:通过项目逐步深入了解Mybatis<一>
本项目全部代码地址:Github-Mybatis

Mybatis 解决 jdbc 编程的问题

1、 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。

解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。

2、 Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。

解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。

3、 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。

解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。

4、 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。

解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。

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

第一章 —— Java 多线程技能

线程技术点:

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

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

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

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

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

Java NIO 系列教程

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。

Java NIO提供了与标准IO不同的IO工作方式:

  • Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

  • Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。

  • Selectors(选择器):Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

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

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

数组初始化

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

数组初始化的形式:

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