openVPN多配置文件管理
我们在使用openVPN的时候可能会有好几个不同的配置,此时如果需要切换使用默认会显得很麻烦,我们可以手动修改配置文件达到一键切换的目的。
首先把不同的配置按文件夹分类归类好,把其所在的config.ovpn文件移动到文件夹外面,如下:
文件夹里面装的是我们生存的配置文件,比如我的那个经典网络文件A级里面:
之后我们需要修改移动出来的xxx.ovpn文件,用记事本打开可能不会自动格式化就一行显示,看着不方便,所以我用Sunlime Text软件打开,把每个修改为如下的样子
然后我们启动OpenVPN GUI就可以选择我们所需要的网络了
我使用的是Windows 7系统 其他系统不知道信不信,需要自己测试。
MySQL 基本语法
一、基础
二、创建表
三、修改表
四、插入
五、更新
六、删除
七、查询
八、排序
九、过滤
十、通配符
十一、计算字段
十二、函数
十三、分组
十四、子查询
十五、连接
十六、组合查询
十七、视图
十八、存储过程
十九、游标
二十、触发器
二十一、事务管理
二十二、字符集
二十三、权限管理
参考资料
一、基础模式定义了数据如何存储、存储什么样的数据以及数据如何分解等信息,数据库和表都有模式。
主键的值不允许修改,也不允许复用(不能使用已经删除的主键值赋给新数据行的主键)。
SQL(Structured Query Language),标准 SQL 由 ANSI 标准委员会管理,从而称为 ANSI SQL。各个 DBMS 都有自己的实现,如 PL/SQL、Transact-SQL 等。
SQL 语句不区分大小写,但是数据库表名、列名和值是否区分依赖于具体的 DBMS 以及配置。
SQL 支持以下三种注释:
12345# 注释SELECT *FROM mytable; -- 注释/* 注释1 注释2 */
数据库创建与使用:
12CREATE DATABASE test;US ...
超详细 Nginx 极简教程
超详细 Nginx 极简教程什么是Nginx?Nginx (engine x) 是一款轻量级的Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
什么是反向代理?反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
安装与使用安装nginx官网下载地址:http://nginx.org,发布版本分为 Linux 和 windows 版本。也可以下载源码,编译后运行。
从源代码编译 Nginx把源码解压缩之后,在终端里运行如下命令:
12cd C:cd C: ginx-0.8.54 start nginx
Nginx / Win32 是运行在一个控制台程序,而非 windows 服务方式的。服务器方式目前还是开发尝试中。
使用nginx 的使用比较简单,就是几条命令。常用到的命令如下:
nginx -s stop :快速关闭Nginx,可能不保存相关信息,并迅速终止w ...
微信扫码登录是如何实现的?
微信扫码登录是如何实现的?网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入用户名密码,打开手机微信扫一扫,便自动登录。从原理上讲,二维码只能是一段文本的编码,如何用它实现快捷登录的呢?
打开网页版微信,可以看到如下的页面:
微信扫码界面
如果你用我查查、支付宝、新浪微博等软件扫码二维码,你会发现此二维码解析出来是如下的网址:
https://login.weixin.qq.com/l/obsbQ-Dzag==
接下来详细介绍一下扫码登录具体的每个步骤:
扫码登录完整流程
①:用户 A 访问微信网页版,微信服务器为这个会话生成一个全局唯一的 ID,上面的 URL 中 obsbQ-Dzag== 就是这个 ID,此时系统并不知道访问者是谁。
②:用户A打开自己的手机微信并扫描这个二维码,并提示用户是否确认登录。
③:手机上的微信是登录状态,用户点击确认登录后,手机上的微信客户端将微信账号和这个扫描得到的 ID 一起提交到服务器
④:服务器将这个 ID 和用户 A 的微信号绑定在一起,并通知网页版微信,这个 ID 对应的微信号为用户 A,网页版微信加载用户 A 的微信信 ...
基于spring boot的简单定时任务
spring-boot-scheduled说明使用自带的定时任务非常简单,我们只需要打开定时器
12345678910/** * 定时任务配置类 * @author YI * @date 2018-11-5 10:04:06 */@Configuration@EnableSchedulingpublic class Config {}
然后编写我们的任务即可完成一个简单的定时任务
12345678910111213141516171819/** * 定时任务 * @author YI * @date 2018-11-5 10:30:08 */@Componentpublic class ScheduledTasks { private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class); private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy- ...
HTTP网络请求分类
HTTP 方法客户端发送的 请求报文 第一行为请求行,包含了方法字段。
GET
获取资源
当前网络请求中,绝大部分使用的是 GET 方法。
HEAD
获取报文首部
和 GET 方法一样,但是不返回报文实体主体部分。
主要用于确认 URL 的有效性以及资源更新的日期时间等。
POST
传输实体主体
POST 主要用来传输数据,而 GET 主要用来获取资源。
更多 POST 与 GET 的比较请见第九章。
PUT
上传文件
由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。
123456PUT /new.html HTTP/1.1Host: example.comContent-type: text/htmlContent-length: 16<p>New File</p>
PATCH
对资源进行部分修改
PUT 也可以用于修改资源,但是只能完全替代原始资源,PATCH 允许部分修改。
1234567PATCH /file.txt HTTP/1.1Host: www.example.comContent-Type: a ...
Tomcat最佳实践
运行模式Tomcat Connector三种运行模式(BIO, NIO, APR)的比较和优化。
1234org.apache.coyote.http11.Http11Protocol:BIOorg.apache.coyote.http11.Http11NioProtocol:NIOorg.apache.coyote.http11.Http11Nio2Protocol:NIO2org.apache.coyote.http11.Http11AprProtocol:APR
BIO一个线程处理一个请求。缺点:并发量高时,线程数较多,浪费资源。Tomcat7或以下,在Linux系统中默认使用这种方式。
NIO利用Java的异步IO处理,可以通过少量的线程处理大量的请求。Tomcat8在Linux系统中默认使用这种方式。Tomcat7必须修改Connector配置来启动:
1234<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" ...
为什么我们做分布式使用Redis?
绝大部分写业务的程序员,在实际开发中使用 Redis 的时候,只会 Set Value 和 Get Value 两个操作,对 Redis 整体缺乏一个认知。这里对 Redis 常见问题做一个总结,解决大家的知识盲点。
1、为什么使用 Redis在项目中使用 Redis,主要考虑两个角度:性能和并发。如果只是为了分布式锁这些其他功能,还有其他中间件 Zookpeer 等代替,并非一定要使用 Redis。
性能:如下图所示,我们在碰到需要执行耗时特别久,且结果不频繁变动的 SQL,就特别适合将运行结果放入缓存。这样,后面的请求就去缓存中读取,使得请求能够迅速响应。
特别是在秒杀系统,在同一时间,几乎所有人都在点,都在下单。。。执行的是同一操作———向数据库查数据。
根据交互效果的不同,响应时间没有固定标准。在理想状态下,我们的页面跳转需要在瞬间解决,对于页内操作则需要在刹那间解决。
并发:如下图所示,在大并发的情况下,所有的请求直接访问数据库,数据库会出现连接异常。这个时候,就需要使用 Redis 做一个缓冲操作,让请求先访问到 Redis,而不是直接访问数据库。
使用 Redis ...
原型设计模式
6. 原型模式(Prototype)Intent使用原型实例指定要创建对象的类型,通过复制这个原型来创建新对象。
Class Diagram
Implementation123public abstract class Prototype { abstract Prototype myClone();}
123456789101112131415161718public class ConcretePrototype extends Prototype { private String filed; public ConcretePrototype(String filed) { this.filed = filed; } @Override Prototype myClone() { return new ConcretePrototype(filed); } @Override public String toString() & ...
工厂方法设计模式
工厂方法(Factory Method)Intent定义了一个创建对象的接口,但由子类决定要实例化哪个类。工厂方法把实例化操作推迟到子类。
Class Diagram在简单工厂中,创建对象的是另一个类,而在工厂方法中,是由子类来创建对象。
下图中,Factory 有一个 doSomething() 方法,这个方法需要用到一个产品对象,这个产品对象由 factoryMethod() 方法创建。该方法是抽象的,需要由子类去实现。
Implementation1234567public abstract class Factory { abstract public Product factoryMethod(); public void doSomething() { Product product = factoryMethod(); // do something with the product }}
1234567891011/** * 实现工厂抽象方法 * @author YI * @dat ...