邢栋博客

邢栋博客,Action博客,记录工作和生活中的点点滴滴

windows和mac下安装java并配置路径
进入
https://www.oracle.com/technetwork/java/javase/downloads/index.html
下载对应的平台+版本的安装包

====WINDOWS平台下====== 公用JRE 不用安装

我的电脑--属性--高级系统设置 --环境变量
配置环境遍历
JAVA_HOME D:\Program Files\Java\jdk1.8.0_201
PATH 加入 D:\Program Files\Java\jdk1.8.0_201\bin
CLASSPATH .;D:\Program Files\Java\jdk1.8.0_201\lib



====MAC平台下====== 
查看java_home 
/usr/libexec/java_home -V
加入环境变量
vim /etc/profile
JAVA_HOME="/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home"
export JAVA_HOME
CLASS_PATH="$JAVA_HOME/lib"
PATH=".$PATH:$JAVA_HOME/bin"
执行
source /etc/profile

解决页面加载防盗链图片失败问题


在页面head标签内加入
<meta name="referrer" content="never">

referer的metedata属性可设置content属性值为以下集合:
1.never 
2.always 
3.origin
说明:
如果referer-policy的值为never:删除http head中的referer;
如果referer-policy的值为default:如果当前页面使用的是https协议,而正要加载资源使用的是普通的http协议,则将http header中额referer置为空;
如果referer-policy的值origin:只发送origin部分;
如果referer-policy的值为always:不改变http header中的referer的值;
举例
如果页面中包含了如下 meta 标签,所有从当前页面中发起的请求将不会携带 referer:<meta name="referrer" content="never">
如果页面中包含了如下 meta 标签,则从当前页面中发起的 http请求将只携带 origin 部分:<meta name="referrer" content="origin">

SpringBoot项目打包简记
项目目录 first-app-demo

模型层:model
持久层:persistence
表示层:web

把 jar 修改成 pom,默认是 jar
pom.xml(first-app-demo)

模型层:model
持久层:persistence
表示层:web
web 依赖于 persistence ,persistence 依赖于 model
web Controller ->UserRepository -> User


------------jar打包方式-------------

cd D:\JAVA_PROJECT\first-app-demo

在pom.xml(fisrt-app-demo)中加入 ,mainClass 复制接口 ,然后把下面这段话 剪贴 到 web 模块下的 pom.xml 里面
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
-----
<configuration>
<mainClass>com.imooc.firstappdemo.FirstAppDemoApplication</mainClass>
</configuration>
----
</plugin>
</plugins>
</build>

mvn -Dmaven.test.skip -U clean package

会显示如下::::
Building jar: D:\JAVA_PROJECT\first-app-demo\web\target\web-0.0.1-SNAPSHOT.jar

执行
cd web\target\
java -jar web-0.0.1-SNAPSHOT.jar 


-------------war打包方式-------------

在web pom.xml中加入下面这句话,在  <artifactId>web</artifactId> 之后
<!-- 将packaging 值(默认jar) 调整成 war -->
<packaging>war</packaging>

并在web/src/main/下新建 webapp/WEB-INF/web.xml 文件

cd D:\JAVA_PROJECT\first-app-demo //回到项目根目录
mvn -Dmaven.test.skip -U clean package
会显示如下::::
Building war: D:\JAVA_PROJECT\first-app-demo\web\target\web-0.0.1-SNAPSHOT.war
cd web\target\
java -jar web-0.0.1-SNAPSHOT.jar



-------------maven插件方式运行-------------
cd D:\JAVA_PROJECT\first-app-demo
cd web 
mvn -Dmaven.test.skip -U clean install
mvn spring-boot:run

---------------war打包方式并在tomcat下运行----------------------------------------
在web pom.xml中加入下面这句话,在  <artifactId>web</artifactId> 之后
<!-- 将packaging 值(默认jar) 调整成 war -->
<packaging>war</packaging>

并增加tomcat依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</dependency>

并在web/src/main/下新建 webapp/WEB-INF/web.xml 文件,不能为空
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
    <display-name>version</display-name>
</web-app>

修改启动文件,让其类集成 SpringBootServletInitializer,并重写configure方法

@SpringBootApplication
public class FirstAppDemoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(FirstAppDemoApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(FirstAppDemoApplication.class, args);
}
}
cd D:\JAVA_PROJECT\first-app-demo //回到项目根目录
mvn -Dmaven.test.skip -U clean package
会显示如下::::
Building war: D:\JAVA_PROJECT\first-app-demo\web\target\web-0.0.1-SNAPSHOT.war
复制 web-0.0.1-SNAPSHOT.war 此文件到 tomcat/webapp下面
然后运行tomcat即可

jar包和war包的介绍和区别

1.jar包的介绍

JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。

JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

简单来说,jar包就是别人已经写好的一些类,然后对这些类进行打包。可以将这些jar包引入到你的项目中,可以直接使用这些jar包中的类和属性,这些jar包一般放在lib目录下。

2.war包的介绍

war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。

war包是Sun提出的一种web应用程序格式,与jar类似,是很多文件的压缩包。war包中的文件按照一定目录结构来组织。根据其根目录下包含有html和jsp文件,或者包含有这两种文件的目录,另外还有WEB-INF目录。通常在WEB-INF目录下含有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的servlet类和jsp,或者servlet所依赖的其他类(如JavaBean)。通常这些所依赖的类也可以打包成jar包放在WEB-INF下的lib目录下。

简单来说,war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理解为是一个web项目,里面是项目的所有东西。

3.区别:(WAR文件代表了一个Web应用程序,JAR是类的归档文件。)

如果一个Web应用程序的目录和文件非常多,那么将这个Web应用程序部署到另一台机器上,就不是很方便了,这时可以将Web应用程序打包成Web 归档(WAR)文件,这个过程和把Java类文件打包成JAR文件的过程类似。利用WAR文件,可以把Servlet类文件和相关的资源集中在一起进行发布。在这个过程中,Web应用程序就不是按照目录层次结构来进行部署了,而是把WAR文件作为部署单元来使用。

一个WAR文件就是一个Web应用程序,建立WAR文件,就是把整个Web应用程序(不包括Web应用程序层次结构的根目录)压缩起来,指定一个.war扩展名。

要注意的是,虽然WAR文件和JAR文件的文件格式是一样的,并且都是使用jar命令来创建,但就其应用来说,WAR文件和JAR文件是有根本区别的。JAR文件的目的是把类和相关的资源封装到压缩的归档文件中,而对于WAR文件来说,一个WAR文件代表了一个Web应用程序,它可以包含 Servlet、HTML页面、Java类、图像文件,以及组成Web应用程序的其他资源,而不仅仅是类的归档文件。

那么什么时候应该使用WAR文件呢?在开发阶段不适合使用WAR文件,因为在开发阶段,经常需要添加或删除Web应用程序的内容,更新 Servlet类文件,而每一次改动后,重新建立WAR文件将是一件浪费时间的事情。在产品发布阶段,使用WAR文件是比较合适的,因为在这个时候,几乎不需要再做什么改动了。

在开发阶段,我们通常将Servlet源文件放到Web应用程序目录的src子目录下,以便和Web资源文件区分。在建立WAR文件时,只需要将src目录从Web应用程序目录中移走,就可以打包了。

4.部署war包到Tomcat

1). 我这里工作中一般是开发打war包给测试,比如说现在测试拿到一个war包,名字叫test.war。

2). 打开Tomcat的安装路径 ,假设是“D:\Tomcat\apache-tomcat-7.0.68”,然后进入到 webapps文件夹中,把 test.war放到 webapps文件夹。

3). 启动Tomcat。如果不需要更改配置文件:到这一步就可以了。在浏览器输入“http:localhost:tomcat_port/test即可打开test项目的 index.jsp页面(port是自己的端口号)。如果test项目没有index.jsp页面,那就需要打开其他相应的页面。如果需要更改配置文件:

4). 关闭 Tomcat。

5). 删除 test.war文件(如果在tomcat启动的状态下删去war包,解压好的文件夹也会被一并删除,所以需要在解压后停止tomcat, 然后删掉war包,这时再启动。这时项目文件夹就会被认为不是war解压而来。)。

6). 由于刚刚启动过Tomcat,Tomcat会自动解压缩test.war为 test文件夹。所以我们在webapps下面可以看到test文件夹。打开test文件夹更改配置文件即可。

7). 更新完配置之后,启动Tomcat。

8). 浏览器打开即可。


原文链接:https://www.jianshu.com/p/3b5c45e8e5bd


yii2设置默认时间时区(基础模板和高级模板)
基本模板
config/web.php
在$config中加入  'timeZone'=>'Asia/Shanghai',


高级模板
common/config/main.php
在return中加入  'timeZone'=>'Asia/Shanghai',

大小端模式
不同机器内部对变量的字节存储顺序不同,有的采用大端模式(big-endian),有的采用小端模式(little-endian)。

大端模式是指高位字节数据存放在低地址处,低位字节数据放在高地址处,也称为高尾端
小端模式是指低位字节数据存放在低地址处,高位字节数据放在高地址处,也称为低尾端


在网络上传输数据时,由于数据传输的两端可能对应不同的硬件平台,采用的存储字节顺序也可能不一致,因此 TCP/IP 协议规定了在网络上必须采用网络字节顺序(也就是大端模式)。
通过对大小端的存储原理分析可发现,对于 char 型数据,由于其只占一个字节,所以不存在这个问题,这也是一般情况下把数据缓冲区定义成 char 类型 的原因之一。对于 IP 地址、端口号等非 char 型数据,必须在数据发送到网络上之前将其转换成大端模式,在接收到数据之后再将其转换成符合接收端主机的存储模式。


举一个例子,比如 int n = 0x12345678 //16进制
1)大端模式:
内存地址:  低地址 -----------------> 高地址
n的字节序:0x12  |  0x34  |  0x56  |  0x78
2)小端模式:
内存地址:  低地址 ------------------> 高地址
n的字节序:0x78  |  0x56  |  0x34  |  0x12
vim常用操作笔记

普通模式下
w 跳转到下个符号或者单词 b 跳转到上个符号或者单词,对应的大写的WB,跳转的尺度会更大些,比如 I'm 小写会默认是三个,大写会默认为一个

x 删除当前字母
dw 删除下个符号或者单词 db 删除上个符号或者单词
dt+字母  df+字母 删除到某个字母


复制
ctrl+v,然后用鼠标选择要复制的,然后 y,然后p进行粘贴


替换
:s/java/php  替换当前行第一个java为php
:s/java/php/g  替换当前行所有的java为php


:1,$s/java/php 替换第一行开始到最后一行的第一个java为php
:1,$s/java/php/g 替换第一行开始到最后一行的所有 java为php

:%s/java/php 替换每一行的第一个java为php
:%s/java/php/g 替换每一行的所有 java为php



vim = vi + IMproved 
多级撤销
语法加亮和自动补全
支持多种插件
通过网络协议(HTTP/SSH)编辑文件
多文件编辑
Vim可以编辑压缩格式文件(GZIP、ZIP等)

光标移动
h 左移
l   右移
j   下移
k   上移 
^/0  移动到行首/包含缩进空格
$ 移动到行尾


单词和字符传移动
w/W 正向移动到下一个单词开头
b/B 反向移动
e/E 正向移动下一个单词结尾
ge 反向移动词尾

跳转
ctrl+f/F 下一页
ctrl+b/B 上一页
ctrl+d/u  向上或者向上翻半页
gg 跳转到文件首行
<line_number>gg/G  跳转到指定行
G 跳转到文件最后一行
g+ctrl+g/G 查看文件信息/{g}更加详细

缩进 >右  <左
>> 或者 :>  右缩进
m,n> 或者 :m>(n-m+1) m到n行缩进   :3,5> 第3行到5行进行右缩进
m>n 等价于命令 :m,m+n-1>  m行开始共n行缩进一次   :3>3 第3行起包括第3行后3行进行右缩进


删除复制和粘贴

寄存器
类型 含义 表达方式 举例 特点
无名寄存器 默认寄存器 "" "" p=p 会被最后一条覆盖
数字寄存器 "+{0-9}缓存最近10次操作 "0  "{1-9} "0p "1p 0用于复制专用1-9 用于最近9次行删除或者修改记录

有名寄存器 26英文字母命名有名寄存器 "[a-z]/[A-Z] "ayw "A会通过^J追加到" a寄存器中
黑洞寄存器 有去无回 "_ "_dw 只想删除而不想覆盖 无名寄存器


按键操作
d = delete = cut 剪贴
y = yank 约等于 copy 类似于复制
p/P = put 约等于 paste 粘贴到光标后/光标前
u=undo 撤销之前操作
ctrl+r = redo 重做/恢复之前操作

yw 复制当前光标单词
y2w 复制正向两个单词
p/P = put 约等于 paste 粘贴到光标后/光标前
yy类似于dd 复制当前光标整行


组合删除
x/X 删除光标下/前单个字符
dw  删除一个单词,光标必须在词首
d{hjkl} 删除到上下左右一个操作前的字符
d$=D 删除光标到行尾的字符
d^ 删除光标到行首的字符 

dd 删除当前整行
{n}dd  向下删除n行,包括当前行
5dw 删除正向单词五次
3w 正向移动单词三次
D3w 正向删除3w动作
2d3w 正向删除3w动作两次



插入
shift + i/a 插入模式并移动到行首/尾
a/i 光标后/前插入
[n]O/o 行前/后插入n次
[n]+i 插入模式重复n次    // 按键 3i,输入hello,world! ,然后ESC ,会再多出四个此字符串

转换
~  单词字符大小写转换
g~w 单词大小写转换
g~$ 或者 g~~ 整行大小写转换  ,前者需要光标在行首
gU/uw 单词转换成大/小写

查找
F/f{char} 反向/正向查找单个字符
t{char}  查找字符前一个字符
dt{char}/df{space} 删除光标到查找字符间字符
/{char}  命令行查找 ,n向下查找 N向上查找


替换
s/going/rolling/g  当前行所有going替换成rolling
%s/going/rolling/g   %匹配所有范围

shift+r/R 替换模式
r  单个字符替换
cw 修改单个单词
c$/C 类似于d操作 修改光标之后行内容



缓冲区与多文件编辑

缓冲区
缓冲区列表
:files 
:buffers
:ls

缓冲区列表指示状态
标记 含义
a 激活缓冲区,缓冲区被加载且显示
h 隐藏缓冲区,缓冲区被加载但不显示
% 当前缓冲区
# 交换缓冲区
= 只读缓冲区
+ 已经更改缓冲区
- 不可改缓冲区,'modfiable'选项不置位
 
vim *.php 
缓冲区列表操作
:bp 上一个缓冲区
:bn 下一个缓冲区
:bf 到第一个缓冲区
:bl 到最后一个缓冲区
:buffer Number/File_name 指定缓冲区
:ball 编辑所有缓冲区
Ctrl+^/b# 切换到前一个buffer(交换buffer)
:qall! 退出全部缓冲区
:wall! 写入全部缓冲区
:badd 添加一个缓冲区,但不设置为当前缓冲区
:bd 删除缓冲区
:n,m/%bd 删除n到m编号/所有的缓冲区文件
:bufdo{CMD} bufdo set number
:E /:bd 打开文件目录列表/返回到最初的buffer
 
 
多窗口操作(分屏)与标签分组
分屏操作
指令 含义
vim -O/on 水平/垂直分屏 n:数字,分屏的数量,o:open
ctrl+w+c/q 关闭当前窗口/最后一个窗口时退
ctrl+w s 上下分割当前打开的文件
:sp filename 上下分隔,并同时打开一个新的文件
ctrl+w v 左右分隔当前打开的文件
:vsp filename 左右分隔,并打开一个新的文件


移动分屏和尺寸移动
指令 含义
ctrl+w K 向上移动
ctrl+w J 向下移动
ctrl+w L 向右移动
ctrl+w H 向左移动
ctrl+w + 增加高度
ctrl+w - 减少高度
ctrl+w = 让所有屏的高度一致
 


宏操作案例一
文件内容显示如下
1
2


100

需要以下操作

进入普通模式
在第一行写入1
按qa + yyp + (ctrl+a) 
按q退出
按98@a,则会出现1-100的数字   


宏保存
viminfo /vimrc file
保存历史和非空寄存器
vim启动时读取
容易被覆盖



可视化模式
三种子模式
v 激活面向字符的可视模式
V/shift+v 激活面向行的可视模式
ctrl+v 激活面向列块的可视模式

gv 重选上次的高亮选区
o 切换选取

Linux之awk命令

1.awk行处理方式与格式

awk一次处理一行内容
awk对每行可以切片处理

awk '{print $1}' //输出首个单词  uname -a | awk '{print $1}'

命令行格式
awk [options] 'command' file(s)
脚本格式
awk -f awk-script-file  file(s)

command1:pattern {awk操作命令}

操作命令:内置函数: print() printf() getline()
控制指令: if(){...}else{}  while(){...}

awk 内置变量 (1)
$0 表示整个当前行
$1 每行的第一个字段  
$2 每行的第二个字段  

awk内置参数 :分隔符
options : -F field-separator(默认是空格)

例子:
awk -F ':' '{print $1}' /etc/passwd  //打印用户名

awk 内置变量 (2)
NR:每行的记录号
NF:字段数量变量
FILENAME:正在处理的文件名
例子:
awk -F ':' '{print NR,NF,FILENAME}' /etc/passwd 



2.awk内嵌参数应用

awk内置参数应用
1)
awk -F ':' '{if($3>100)print $1,$3}' /etc/passwd
2)
sed -n '/FastCGI/P' error.log | awk '{print $1,$2}' 
等于
cat error.log |awk '/FastCGI/{print $1,$2}'

逻辑判断式
awk逻辑
~,!~ : 匹配正则表达式
==,!=,<,> : 判断逻辑表达式 
例子:
awk -F ':' '$1~/s.*/{print $1}' /etc/passwd  //匹配 s开头的用户名



使用awk扩展格式
awk [options] 'command' file(s)
command2扩展
BEGIN{print "start"}pattern{commands}END{print "end"}


3.awk内嵌程序应用

awk处理过程
案例(-)
统计当前文件夹下的文件/文件夹占用的大小
ls -l | awk 'BEGIN{size=0}{size+=$5}END{print "size is "size/2014/2014"M"}'
案例(二)
统计显示/etc/passwd的账户总人数
awk -F ':' 'BEGIN{count=0}$1!~/^$/{count++}END{print count}' /etc/passwd   //去掉空行

统计uid>100的用户名
awk -F ':' 'BEGIN{count=0}{if($3>100)name[count++]=$1}END{for(i=0;i<count;i++)print i,name[i]}' /etc/passwd

案例(三)
统计netstat -anp 状态下LISTENING和CONNECTED的连接数量
netstat -anp | awk '/CONNECTED|LISTENING/{if($4=="ACC"){sum[$7]++}else{sum[$6]++}}END{for(i in sum)print i,sum[i]}'

优惠券
广告位-淘宝
最新微语