科学上网与VPN办公的完美结合

前言 工作中很多时候需要使用到 VPN 来访问企业内网,但是同时又需要科学上网,这两个同时开启的时候会出现冲突。所以之前老是要切换来切换去,很麻烦,最近终于找到了完美的解决办法。 准备工作 Clash,https://github.com/Dreamacro/clash,强大的代理分流工具。 Docker,https://www.docker.com,用来跑 openvpn 的容器。将 openvpn 跑在容器里可以防止污染宿主机。 启动 openvpn 将 openvpn 的配置文件放在./config目录下,然后执行docker-compose up -d启动 openvpn。该容器会将 openvpn 转发到 socks5 代理,端口为 1080。 version: "3" services: openvpn: image: curve25519xsalsa20poly1305/openvpn-socks5 restart: always cap_add: - NET_ADMIN ports: - 1080:1080 environment: - OPENVPN_CONFIG=/config/config.ovpn volumes: - ./config:/config devices: - /dev/net/tun 启动 clash 主要是 rules 部分的配置。 proxies: - name: "openvpn" type: socks5 server: 192.168.123.205 port: 1080 rules: - IP-CIDR,172.26.0.0/16,openvpn # 你的公司内网网段 - DOMAIN-SUFFIX,xxx.cn,openvpn # 你的公司内网域名 然后将 clash 设置为 rule 模式,一切 OK,just enjoy it! ...

March 20, 2023

面试要点记录

Python GIL(Global Interpreter Lock) 全局解释器锁,CPython 实现时引入的概念,为了解决多线程数据完整性和同步问题。GIL 是一个防止解释器多线程并发执行机器码的一个全局互斥锁。其存在主要是因为在代码执行过程中,CPython 的内存管理不是线程安全的。 进程、线程、协程 进程:进程是资源分配的最小单位,每个进程拥有独立的代码区,堆,数据区。 线程:线程是 CPU 调度的最小单位,一个进程至少拥有一个线程,多个线程共享进程的资源。 协程:协程是基于事件循环的单独的子程序,协程可以被中断并在适当的时候重新执行。 MySQL 存储引擎 innodb:支持事务,外键,行级锁,聚蔟索引和辅助索引。 myisam:不支持事务,外键,支持表级锁,不支持聚蔟索引,主键索引和辅助索引结构一样。 查询计划 主要查看 key、extra 等信息,key 表示查询用到的索引,extra 包含多种信息。 using index:查询使用了索引。 using where:MySQL 将在存储引擎检索行后再进行过滤。 using temporary:使用了 join 但是使用了其他表的字段作为查询条件。 using filesort:排序没有走索引。 索引 ACID 原子性:一个事务要么全部提交成功,要么全部失败,不能只执行一部分操作。 一致性:事务前后数据的完整性必须保持一致。 隔离性:多个事务之间相互隔离。 持久性:事务一旦被提交,就会永久保存在磁盘中。 隔离级别 读未提交:可读取其它事务为提交的数据,会产生脏读 读已提交:可读取其它事务已提交的数据,会产生重复读取返回不同结果的情况 可重复读:多次重复读取会得到相同的结果,但是会产生幻读 串行化:对所有 select 强制加共享锁,使之不相互冲突,可能产生大量的超时现象和锁竞争 三大 log binlog 记录 sql 语句,通过追加日志的形式写入,主要使用场景为主从复制与数据恢复。 有 STATMENT,ROW,MIXED 三种格式,STATMENT 记录修改数据的 SQL,减少日志量,某些情况会导致主从数据不一致;ROW 记录变动的数据,可能会产生大量的日志;MIXED 优先使用 STATMENT,STATMENT 不支持的使用 ROW。 redolog 记录事务对哪些数据进行了修改,实现一致性,先写 redolog buffer,再写磁盘文件。 undolog 记录数据的逻辑变化,比如 INSERT 的时候记录一条 DELETE,UPDATE 的时候记录一条相反的 undolog,在发生错误时通过 undolog 回滚到事务之前的状态。 ...

October 26, 2020