同步 Sync

Mutex

type Mutex struct{
    state int32 // 表示当前互斥锁的状态
    sema uint32 // 控制锁状态的信号量
}

state

state 字段一共 8 个字节,最低三位分别表示三个状态

  • locked: 表示互斥锁的状态

  • woken:表示从正常模式被唤醒

  • starving:当前的互斥锁进入饥饿状态

阅读全文 →

反向代理相关 Header

代理请求流程

End User -> Proxy A -> Proxy B -> Server

From End User to Proxy A, Proxy A will set it own Host, and put end End User Host into X-Forwarded-Host before making a request to Proxy B. So when Proxy A makes a request, its header will look like:

X-Forwarded-Host: <End User Host>
Host: <Proxy A Host>

And then, Proxy B receives it, it will do the same, append Proxy A’s Host to X-Forwarded-Host

阅读全文 →

JDBC 原理浅析

一、JDBC 概念

什么是JDBC?
通俗地说:JDBC是java和关系数据库的之间的桥梁;
根据"百科名片"所描述:

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名。

阅读全文 →

Chrome 开发工具使用

Chrome 开发工具使用

介绍

   Chrome浏览器得益于其优秀的V8解释器,javascript执行速度和内存占有率表现非常优秀。对于html+css+javascript前台技术的学习或者开发,浏览器developer tool的使用时必不可少的,也能极大的提高学习或者开发效率。本文根据版本 34.0.1847.116 m。在window下,开启developer tool的快捷键为F12。(2014年4.29日整理—Laily)

1 developer tool结构

阅读全文 →

nodejs,npm 安装

nodejs,npm 安装

首先去 nodejs 官网下载最新版 nodejs

解压

tar -xf node-v8.5.0-linux-x64.tar.xz

放到 /usr/local 目录下

mv node-v8.5.0-linux-x64 /usr/local/node

建立软连接

cd /usr/local/bin/
sudo ln -s /usr/local/node/bin/node .
sudo ln -s /usr/local/node/bin/npm .

npm 镜像

npm config set registry https://registry.npmmirror.com

https://npmmirror.com

nvm 安装

安装 nvm
https://github.com/nvm-sh/nvm

对于 fish shell
安装 bass
https://github.com/edc/bass
在 fish shell 的配置文件里加上

阅读全文 →

路由器介绍

路由器四种模式介绍:AP,Router,Repeater,Bridge,Client

路由器有四种模式:AP(接入点),Router(路由),Repeater(中继),Bridge(桥接),Client(客户端)

阅读全文 →

frp 使用

frp 使用

安装 frp

搭建 frp 还需要一台能够在外网访问的机器。
https://github.com/fatedier/frp/releases 下载 frp 执行文件。
frps 和 frps.yaml 放在具有公网 ip 的机器上。
frpc 和 frpc.yaml 放在内网环境的机器上。

基于 frp 实现内网穿透

frp 最大的使用场景是内网穿透。
比如下图,家里的 Nas 是在家庭局域网的,别人无法访问,可以借用一台有公网 IP 的 VPS 实现从任何地方访问家里的 Nas。
image.png

阅读全文 →

go 编译器优化

减小编译后可执行文件的大小

go build -ldflags '-w -s'

-w 禁止生成 debug 信息,注意使用该选项后,无法使用 gdb 进行调试。

-s 禁用符号表

可以使用 go tool link –help 查看 ldflags 各参数含义。

禁止优化和内联

go build -gcflags '-N -l'

-N 禁止编译优化

阅读全文 →