0%

微信开发中经常用到内网穿透,因为要使微信的服务器访问到开发机上的服务就必须使用内网穿透技术,起码在IPV4时代是这样的。关于内网穿透其实很多时候使用的是网络上的网络服务商提供的内网穿透服务,比如国内的 natapp.cn

免费版的不能自定义域名,基本上只能临时试试。但是即使是9元/月还是不如云服务器的划算,连续买上十二个月的9元/月隧道还不如直接买个云服务器自己搭建一个内网穿透服务。腾讯云的服务器学生机一年也才80多元,而且功能远远不止内网穿透,所以还是自己搭建一个内网穿透服务比较划算,顺带学习一下内网穿透的原理。

这篇文章记录了一些关于VPN的使用相关问题,VPN本意不是用来科学上网,VPN 代表 “虚拟专用网络”,这是一项保护的互联网连接和在线隐私的技术。通过加密连接,VPN 可以将您的IP 和在线活动隐藏起来,不被窥视,并保护您的数据免受网络犯罪分子的威胁,就比如出于安全原因,公司内部的办公网络在外部是无法连接上的,这个时候就需要通过VPN登录企业内网。只不过由于某些原因,大家普遍理解使用VPN和科学上网是一回事。

现代操作系统几乎都采用了虚拟内存机制,从一个常见的问题引出:在 4GB 物理内存的机器上,申请 8G 内存会怎么样呢?回答这个问题是需要具体情况分别看待的,来看看不同的机器、不同的Swap机制会有怎样的答案。

下图是学习REST风格接口,然后通过SpringMVC实现的一个课程管理系统的效果图。 那么RESTful是什么呢?其实简言之看Url就知道要什么、看Http method就知道干什么、看Http status code就知道结果如何。

大家都知道"古代"网页是前端后端融在一起的,比如之前的PHP,JSP等。在之前的桌面时代问题不大,但是近年来移动互联网的发展,各种类型的Client层出不穷,RESTful可以通过一套统一的接口为 Web,iOS和Android提供服务。另外对于广大平台来说,比如Facebook platform,微博开放平台,微信公共平台等,它们不需要有显式的前端,只需要一套提供服务的接口,于是RESTful更是它们最好的选择。

SpringMVC简介

Spring MVC是当前最优秀的MVC框架,自从Spring 2.5版本发布后,由于支持注解配置,易用性有了大幅度的提高。Spring 3.0更加完善,实现了对Struts 2的超越。现在越来越多的开发团队选择了Spring MVC。 Spring3 MVC的优点:

1、Spring3 MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。

2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)

3、Spring3 MVC的灵活是你无法想像的,Spring框架的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。

SpringAOP

AOP前奏

SpringAOP是面向切面编程,那么我们先来看看那什么是面向切面编程,首先看一个例子,假设我们有一个计算类的接口AtithmeticCalculator,有一个实现类AtithmeticCalculatorImpl: mark

  • 需求1-日志:在程序执行期间追踪正在发生的活动
  • 需求2-验证:希望计算器只能处理正数的运算

SpringBean之间的关系

1、SpringBean之间的继承

假设现有一个Address类表示地点:

1package com.xpu.bean;
2
3public class Address {
4	private String city;
5	private String street;
6	setter()/getter()....
7}

现在如何需要两个对象,则可以这写:

1<bean id="address1" class="com.xpu.bean.Address" p:city="Xian" p:street="Wulukou"></bean>
2
3<bean id="address2" class="com.xpu.bean.Address" p:city="Xian" p:street="Beidajie"></bean>

但是这样写如果在类属性过多的时候就不是很好用了,所以,出现了配置之间的继承关系,但是这个和类之间的继承不是一回事:

1<bean id="address1" class="com.xpu.bean.Address" p:city="Xian" p:street="Wulukou"></bean>
2
3<!-- 配置之间的继承关系 :使用bean的parent属性指定-->
4<bean id="address2" p:street="Beidajie" parent="address1"></bean>

Spring 允许继承 bean 的配置, 被继承的 bean 称为父 bean. 继承这个父 Bean 的 Bean 称为子 Bean,子 Bean 从父 Bean 中继承配置, 包括 Bean 的属性配置,子 Bean 也可以覆盖从父 Bean 继承过来的配置,父 Bean 可以作为配置模板, 也可以作为 Bean 实例。 若只想把父 Bean 作为模板, 可以设置 的abstract 属性为 true, 这样 Spring 将不会实例化这个 Bean:

1<-- 抽象bean不能被IOC容器实例化,只能用继承配置 -->
2<bean id="address1" class="com.xpu.bean.Address" abstract="true"></bean>

一旦这样配置之后这个配置是不能实例化出对象的,而需要配置出他的子配置,否则就无法创建对象,若某一个bean的class未指定,那么该bean必须是一个抽象bean,可以忽略父 Bean 的 class 属性,让子 Bean 指定自己的类,而共享相同的属性配置。但此时 abstract 必须设为 true,并不是 元素里的所有属性都会被继承. 比如: autowire, abstract

mark

持久化

即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化的主要应用是将内存中的数据存储在关系型的数据库中,当然也可以存储在磁盘文件中、XML数据文件中等等,那么什么是持久层(Persistence Layer),即专注于实现数据持久化应用领域的某个特定系统的一个逻辑层面,将数据使用者和数据实体相关联。

持久化是将程序数据在持久状态和瞬时状态间转换的机制。比如JDBC就是一种持久化机制。文件IO也是一种持久化机制。

广义的理解,“持久化"包括和数据库相关的各种操作: 保存:把对象永久保存到数据库中。 更新:更新数据库中对象(记录)的状态。 删除:从数据库中删除一个对象。 查询:根据特定的查询条件,把符合查询条件的一个或多个对象从数据库加载到内存中。 加载:根据特定的OID,把一个对象从数据库加载到内存中