xx小台灯

xx小台灯 查看完整档案

北京编辑  |  填写毕业院校  |  填写所在公司/组织 github.com/lizeze 编辑
编辑

不知道写点什么

个人动态

xx小台灯 发布了文章 · 10月26日

springboot从0到1系列(第一章 项目初始化)

初始化项目

## 开发工具
推荐使用 jetbrains 家族的 idea 工具,社区版即可
## 创建项目

  • 使用 idea 创建



    选择下一步一直到选择保存的工作目录中

下载后保存到对应的工作目录中
## maven配置
### maven自动导入

第一次打开项目之后右下角会弹出这个让你选择,选择自动导入即可,这样修改 pom 文件后会自动下载依赖
### 修改maven镜像

由于 maven 默认是从国外镜像下载依赖,由于网络原因可能会比较慢我们可以使用国内一些知名的镜像地址,这里使用阿里的,下面介绍一下配置方式

  • 修改 pom 文件

    pom 文件中增加一下配置

  <repositories>
    <repository>
        <id>central</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <layout>default</layout>
        <!-- 是否开启发布版构件下载 -->
        <releases>
            <enabled>true</enabled>
        </releases>
        <!-- 是否开启快照版构件下载 -->
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

  • 全局配置

    修改mavensetting文件

     <mirror>  
           <id>alimaven</id>  
           <name>aliyun maven</name>  
           <url>http://maven.aliyun.com/nexus/content/groups/public/</url>;  
           <mirrorOf>central</mirrorOf>          
     </mirror>   

    setting所在位置

    修改完成之后在idea中指定我们修改的文件

    maven的配置就完成了
    项目源码

查看原文

赞 0 收藏 0 评论 0

xx小台灯 发布了文章 · 10月26日

ssl证书结合Nginx搭建https站点(免费证书)

创建ssl证书

 $ mkdir -p /etc/nginx/ssl
 $ cd /etc/nginx/ssl
 $ openssl genrsa -idea -out server.key 1024
 $ openssl req -new -key server.key -out server.csr
 $ openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt
注意要加过期时间,默认的有效期很短

Nginx 配置

  $ cd /etc/nginx/conf.d
  $ vim https.conf

输入以下内容

     server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;
        root         /usr/share/nginx/html;
        ssl_certificate "/etc/nginx/ssl/server.crt";
        ssl_certificate_key "/etc/nginx/ssl/server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers PROFILE=SYSTEM;
        ssl_prefer_server_ciphers on;
        location / {
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
        }

保存退出并重启nginx

因为我们的证书没有给相关机构认证,所以还是提示不安全,但是不影响我们测试使用

查看原文

赞 1 收藏 1 评论 0

xx小台灯 发布了文章 · 10月26日

linux 挂载windows共享文件夹

创建文件夹

$ mkdir -p /mnt/share

安装依赖

$ yum install  cifs-utils

修改/etc/fstab文件,文件最后加入:

//192.168.16.32/serverapp /mnt/share cifs  defaults  0 0

执行命令

mount -t cifs -o username='administrator',password='**'  //192.168.16.32/serverapp /mnt/share
查看原文

赞 0 收藏 0 评论 0

xx小台灯 发布了文章 · 10月26日

Nginx 配置反向代理去除前缀

使用Nginx做反向代理的时候如果需要根据不同的url代理到不同的服务器,需要通过以下
法:

  • 地址后面加/
     server {
      location ^~/v1/ {
          proxy_pass http://localhost:8080/;
      }
    }

^~/v1/表示请求前缀是v1的请求,proxy_pass最后加上/,就会把v1去除,比如请求的地址是v1/api/test,则代理发出的请求是http://localhost:8080/api/test

  • 使用rewrite
    server {
      location ^~/v1/ {
          rewrite ^/v1/(.*)$ /$1 break;
          proxy_pass http://localhost:8080;
      }
    }

使用 rewrite重写了url
注意 proxy_pass不需要/

查看原文

赞 2 收藏 2 评论 0

xx小台灯 发布了文章 · 9月24日

Http前端缓存

概述

缓存是一种保存资源副本并在下一次请求时直接使用副本的技术。当web缓存发现请求的资源已经被存储,它会拦截请求,而不会去资源服务器重新下载。这样带来的好处有:缓存服务器端压力,提升性能。对网站来说,缓存是达到高性能的重要组成部分。

缓存操作的目标

虽然HTTP缓存不是必须的,但重用缓存的资源通常是必要的。然而常见的HTTP缓存只能存贮GET响应,对应其他类型的响应则是无能为力。一般包括:

  • 一个GET请求,响应状态码为200,则表示成功。比如HTML文档,图片或者文件的响应
  • 永久重定向,状态码301
  • 错误响应: 响应状态码:404 的一个页面

Cache-Control

HTTP/1.1定义的Cache-Control头用来区分缓存机制的支持情况,请求头和响应头都支持这个属性。

禁用缓存

缓存中不得存储客户端请求和服务器响应的各种文件,强制每次都要去资源服务器下载。

Cache-Control: no-store

缓存过期机制

在过期机制中主要用到的是max-age=<seconds>表示缓存能够使用的最大时间。是距离首次发起的时间(秒)。

Cache-Control: max-age=31536000


第一次请求


第二次请求


我们已经成功的做好了缓存,网页可以飕飕的运行了,但是我们可能会又想到,那如果在缓存还没有过期的时候我们发布了新的版本怎么办呢,那样客户不就没办法使用我们最新的版本了。下面马上解决这个问题.

更新缓存

之前每次发布版本之后我们都会提醒客户清除缓存、清除缓存、清除缓存!!!因为经常会有一些问题是因为没有清除缓存造成的,这个缓存可能是浏览器自行去缓存的,我们不太好控制,可是现在我们会了HTTP缓存,可以轻松的解决这个问题。下面看图


只需在文件加一个任意参数就可以,当有版本更新的时候只需更新文件后的参数就可以。


由上图可知

HTTP缓存只是对相同链接的资源有效

示例中只有一个js文件,但是实际项目中可能会有很多的静态资源文件无法做到每次更新的时候修改对应的版本号。这个时候可以使用webpack中的hash码。每次打包之后都是不同的值,解压完美的解决这个问题。

ETag

HTTPETag响应头是资源的特定版本标识符。可以让缓存更高效,并节省宽带,因为如果内容没有改变,web服务器不需要发送完整的响应。

如果给定URL中的资源更改,则一定要生成新的ETag值。

本次使用的ETag值使用的是md5-file

安装依赖

npm install --save md5-file
var data = fs.readFileSync('./js/main.js')
const md5File = require('md5-file')
 //使用工具获取到文件的md5值
    md5File('./js/main.js', (err, hash) => {
      if (err) throw err
      //将获取到的MD5值发送给响应头
      response.setHeader('ETag', hash)
      //获取请求头里是否包含标识符
      let ifNoneMatch = request.headers['if-none-match'];
      if (ifNoneMatch) {
        //如果标识符和当前的MD5不一致,则表示文件有更新,返回新文件
        if (ifNoneMatch !== hash) {
          response.statusCode = 200;
          response.write(data)
        } else {
          response.statusCode = 304;
        }
      } else {
        //如果不存在标识符则表示是第一次请求,直接返回文件
        response.write(data)
      }
      response.end()
    })

规则验证

现在我们修改一下main.js文件

echo 'console.log(890)' >> js/main.js 

设置了ETag之后客户端还是会向服务器发送请求,只是返回的内容是不一样的。
## Expires
HTTP响应头信息(过期时间)。这个属性告诉缓存,相关缓存副本在什么时间内有有效的,过了这个时间就会向资源服务器发出请求。
Expires: Wed, 21 Oct 2015 07:28:00 GMT

Expires头设置的时间只能是必须是格林威治时间(GMT)

    let data = fs.readFileSync('./css/main.css')
    response.setHeader("Expires","Sun, 30 Jun 2019 02:51:26 GMT")
    response.write(data)
    response.end()


时间一秒一秒的过去了

就是这样,很简单的就实现了设置缓存的过期时间,但是有也一些要注意点地方:

  • 因为过期时间是和客户端的时间去比较的,如果客户端的时间和服务器端的时间没有同步,那就就不会实现缓存的功能
  • 时间设置的问题也不可以忽视,如果设置的时间是一个固定的时间,在下次更新版本的时候如果没有更新下次的过期时间,那么之后的请求也是会都发送的服务器的。
  • 如果响应头中设置了Cache-Control,那么会优先使用Cache-Control
设置了Expires之后如果副本文件没有过期,是不会在向服务器发送请求的

Last-Modified

Etag 类似,Last-Modified HTTP 响应头也用来标识资源的有效性。 不同的是使用修改时间而不是实体标签。对应的请求头字段为If-Modified-Since

    let data = fs.readFileSync('./css/main.css')
    let stat = fs.statSync('./css/main.css')
    response.setHeader('Last-Modified', stat.mtime)
     if (request.headers['if-modified-since'] && stat.mtime == request.headers['if-modified-since']) {
      response.statusCode = 304;
      response.end()
      return
    }
    response.write(data)
    response.end()

发起第一次请求

发起第二次请求


现在我们修改一下main.css文件

echo 'p{color:red;}' >> css/main.css 

如果响应头头同时设置了Cache-ControlLast-Modified,那么会优先使用Cache-Control

设置了Last-Modified之后,如果文件没有过期,客户端是不会向服务器发送请求

查看原文

赞 0 收藏 0 评论 0

xx小台灯 发布了文章 · 9月24日

arcgis轨迹路线

## 轨迹路线


 let paths = [

 [

 [-111.3, 52.68],

 [-98, 49.5],

 [-93.94, 29.89]

 ]

 ]

 let polyline = {

 type: "polyline",

 paths: paths,

 spatialReference: view.spatialReference //设置坐标系

 };

 let lineSymbol = {

 type: "simple-line",

 color: [226, 119, 40],

 width: 4

 };

 let polylineGraphic = new Graphic({

 geometry: polyline,

 symbol: lineSymbol,

 spatialReference: view.spatialReference //设置坐标系

 });

 view.graphics.addMany([polylineGraphic]);

新增点


let point = {

 type: "point", 

 longitude: -49.97,

 latitude: 41.73,

 spatialReference: view.spatialReference //设置坐标系

};

let markerSymbol = {

 type: "simple-marker", 

 color: [226, 119, 40],

 outline: {

 color: [255, 255, 255],

 width: 2

 }

};

let pointGraphic = new Graphic({

 geometry: point,

 symbol: markerSymbol,

 spatialReference: view.spatialReference //设置坐标系

});

 view.graphics.addMany([pointGraphic]);
查看原文

赞 0 收藏 0 评论 0

xx小台灯 发布了文章 · 9月23日

electron下载依赖慢解决办法

搭建一个梯子

在安装的过程中可能会安装失败或者下载时间过长

配置yarn使用梯子下载

$ yarn config set proxy http://127.0.0.1:1080
 

安装之后如果不想使用梯子的话可以删除

 $ yarn config delete proxy

创建目录并安装

$ mkdir electron-demo
$ cd electron-demo
$ yarn init
$ yarn add electron --dev
electron-demo/
├── package.json
├── main.js
└── index.html

package.json中修改scripts

 "main": "main.js",
  "scripts": {
    "start": "electron ."
  }

Hello World

main.js

const { app, BrowserWindow } = require('electron')

function createWindow () {   
 // 创建浏览器窗口
 let win = new BrowserWindow({
   width: 800,
   height: 600,
   webPreferences: {
     nodeIntegration: true
   }
 })

 // 加载index.html文件
 win.loadFile('index.html')
}

app.on('ready', createWindow)

index.html

<html>
 <head>
   <meta charset="UTF-8">
   <title>Hello World!</title>
 </head>
 <body>
   <h1>Hello World!</h1>
   We are using node <script>document.write(process.versions.node)</script>,
   Chrome <script>document.write(process.versions.chrome)</script>,
   and Electron <script>document.write(process.versions.electron)</script>.
 </body>
</html>

# Start

yarn start

# Build

安装electron-builder

$ yarn add electron-builder --dev

package.json

"build": {
  "appId": "your.id",
  "mac": {
    "category": "your.app.category.type"
  }
},
"scripts": {
  "pack": "electron-builder --dir",
  "dist": "electron-builder"
}

run

$ yarn dist

打包过程中也需要配置梯子,因为终端默认是不走梯子的

下载Proxifier让终端可以使用梯子

增加以上规则即可

查看原文

赞 0 收藏 0 评论 0

xx小台灯 发布了文章 · 9月21日

Ubuntu群组管理

群组管理

Linux中,每个用户都有一个群组。

那么新建用户的时候并没有指定群组啊,群组是怎么来的呢。

其实我们不需要设置群组,创建用户的时候会默认创建一个和用户名一样的群组,并且把用户添加到这个群组中。

下面来看一下用户的群组

可以看到第三列和第四列是相同的。第三列是用户名,第四列是群组名。

了解这些之后下面来操作一下群组

新增群组

当用户少的时候默认的群组就足以使用了,但是当用户多的时候还是每个用户都在自己的群组中,这种情况就不方便管理了。

下面演示一下新增群组,使用addgroup 命令,用法很简单,在后面直接加上要创建的群组就可以了。记得要用root身份


$ addgroup admin

看到这个消息,就表示新增成功。

这个时候群组里面还是空的,没有添加用户。

修改用户账户

假如我要将 dev 这个用户放到我刚创建的 admin 这个群组里,可以这样写


$ usermod -g admin dev

可以看到用户dev的群组已经改成了admin

除了使用ll命令之外还可以这样查看用户所在群组


$ groups dev

也可以不添加用户名,直接使用groups命令,则显示当前用户所在群组

我们也一次把用户添加到多个群组里面,就用-G参数

首先我们先来多创建两个群组,分别是g1g2


$ addgroup g1

$ addgroup g2

接着运行以下命令


$ usermod -G admin,dev,g1,g2 dev

$ gropus dev

配合 -g 或 -G 参数时,它会把用户从原先的群组里剔除,加入到新的群组。如果不想离开原先的群组,又想加入新的群组,可以在 -G 参数的基础上加上 -a 参数,表示“追加”。
  • 不添加-a的情况

 $ groups dev # 先查看一下用户所在群组

 $ usermod -G admin dev # 修改用户所在群组

 $ groups dev # 在一次查询用户所在群组

可以看出,用户的群组只有dev了,之前的群组已经不存在了

  • 添加-a的情况

$ groups dev # 先查看一下用户所在群组

$ usermod -aG dev dev # 修改用户所在群组

$ groups dev # 在一次查询用户所在群组

可以看出原来的群组还在

删除群组

用法很简单,在命令后接想要删除的群组名。


$ delgroup dev

dev已经不再dev群组,因为它已经被删除

查看原文

赞 0 收藏 0 评论 0

xx小台灯 收藏了文章 · 9月21日

ubuntu 下WebStorm 无法输入中文

你现在使用的输入法具体是什么?另外你是用 ibus 的吗?
在启动文件中输入

export XMODIFIERS="@im=ibus"
export GTK_IM_MODULE="ibus"
export QT_IM_MODULE="ibus"

然后启动 WebStorm 试试。
如果不行的话,你再换成下面的试试。

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx

如果还不能解决,参考下面的链接操作一下

https://youtrack.jetbrains.co...

https://www.jetbrains.com/hel...

https://confluence.jetbrains....

以上方案由官方提供,亲测好用

查看原文

xx小台灯 收藏了文章 · 9月21日

linux 命令行基础(1)

按顺序查找

  • 向上键:按使用顺序向前查找用过的命令,每按一次就前进一个命令。
  • 向下键:按使用顺序向后查找用过的命令,每按一次就前进一个命令。
虽然简单但是使用起来并不是很方便,找之前的命令时会花费大量的时间,这个时候可以使用查找的方法

查找使用过的命令

比如我查看过某个文件,想再次查看时就可以使用Ctrl+R组合直接输入文件的名称,就会自动补全命令,如下图
image

输入sys自动补全

查看历史记录

history,用于列出之前使用过的命令,如下图
image

使用过的命令都是有编号的,可以使用!编号的方式调用命令

$ history
$ !1

一些常用的快捷键

  • Ctrl+L 清理终端内容
  • Ctrl + A 光标跳到一行命令的开头
  • Ctrl + E 光标调到一行命令的结尾
  • Ctrl + U 删除所有在光标左侧的命令字符
  • Ctrl + K 删除所有在光标右侧的命令字符
  • Ctrl + W 删除光标左侧的一个单词,这里的单词指的是用空格隔开的一个字符串
  • Ctrl + Y 粘贴上面命令删除的内容
查看原文

认证与成就

  • 获得 3 次点赞
  • 获得 1 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 1 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

注册于 2月24日
个人主页被 248 人浏览