详解 Filter 过滤器

1、简介

  Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

  它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理。使用Filter 的完整流程:Filter 对用户请求进行预处理,接着将请求交给Servlet 进行处理并生成响应,最后Filter 再对服务器响应进行后处理。

详细深入分析 Java ClassLoader 工作机制

什么是 ClassLoader ?

大家都知道,当我们写好一个 Java 程序之后,不是管是 C/S 还是 B/S 应用,都是由若干个 .class 文件组织而成的一个完整的 Java 应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的 class 文件当中,所以经常要从这个 class 文件中要调用另外一个 class 文件中的方法,如果另外一个文件不存在的,则会引发系统异常。而程序在启动的时候,并不会一次性加载程序所要用的所有class文件,而是根据程序的需要,通过Java的类加载机制(ClassLoader)来动态加载某个 class 文件到内存当中的,从而只有 class 文件被载入到了内存之后,才能被其它 class 所引用。所以 ClassLoader 就是用来动态加载 class 文件到内存当中用的。

通过项目逐步深入了解Spring MVC(一)

相关阅读:

本文档和项目代码地址:https://github.com/zhisheng17/springmvc


了解 Spring:

Spring 官网:http://spring.io/

一个好的东西一般都会有一个好的文档解释说明,如果你英语还行,建议还是看官方文档。


Spring MVC基础知识

什么是Spring MVC?

Spring MVC框架原理(掌握)

​ 前端控制器、处理器映射器、处理器适配器、试图解析器

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

相关阅读:

1、通过项目逐步深入了解Mybatis<一>

2、通过项目逐步深入了解Mybatis<二>

3、通过项目逐步深入了解Mybatis<三>

本项目所有代码及文档都托管在 Github地址:https://github.com/zhisheng17/mybatis

延迟加载

什么是延迟加载?

resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。
需求:
如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。

延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快。

Hexo + yilia 主题实现文章目录

前提

为了方便查看每篇文章的目录结构,可以定位到想看的地方,特地找了下如何实现这个功能。

添加 CSS 样式

打开 themes\yilia\source 下的 main.234bc0.css 文件,直接在后面添加如下代码:

Java连接Oracle数据库的三种连接方式

背景:

这两天在学习Oracle数据库,这里就总结下自己上课所学的知识,同时记录下来,方便整理当天所学下的知识,也同时方便日后自己查询。

SQL语句的话,这里我就不多讲了,感觉和其他的数据库(MySQL、SQL Server)都是类似,区别不大。

今天在这里就写下 Java 连接 Oracle 数据库的三种连接方式。

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 。

关于String s = new String("xyz"); 创建几个对象的问题

你知道在 java 中除了 8 种基本类型外,其他的都是类对象以及其引用。所以 "xyz "java 中它是一个String 对象.对于 string 类对象来说他的对象值是不能修改的,也就是具有不变性。

看:

1
2
3
4
String   s= "hello "; 
s= "Java "; 
String   s1= "hello "; 
String   s2=new   String( "hello ");

结果如下图:
string-new1

啊,s 所引用的 string 对象不是被修改了吗?之前所说的不变性,去那里了啊?

【字符串】判断两字符串是否互为旋转词?

相关阅读:

字符串逆序问题的解决方法

题目:

如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。

比如A=”12345”,A的旋转词有”12345”,”23451”,”34512”,”45123”和”51234”。

对于两个字符串A和B,请判断A和B是否互为旋转词。

给定两个字符串A和B及他们的长度lena,lenb,请返回一个bool值,代表他们是否互为旋转词。

字符串

题目一:

如果一个字符串 str ,把字符串 str 前面的任意部分挪到后面去形成的字符串叫做 str 的旋转词。比如 str = “ 1234 ” , 那么 str 的旋转词有 “ 1234 ” , “ 2341 ” , “ 3412 ” , “ 4123 ” 。给定两个字符串 a 和 b ,请判断 a 和 b 是否互为旋转词?

程序访问文件的几种方式

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 中实例变量和类变量的区别

实例变量 和 类变量

局部变量

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

种类:

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