KJohn2q

一个热爱技术,热爱分享的程序员

0%

作为一个开发者,在日常开发过程中经常会使用命令行。windows 自带的 cmdpowershell 在功能上和界面美观度上总是不能让我满意。本文主要和大家分享如何使用 windows terminaloh my posh 增强和美化powershell

默认的powershell是这样的:

image-20211001142221763

Windows Terminal 的安装

仓库地址: microsoft/terminal: The new Windows Terminal and the original Windows console host, all in the same place! (github.com)

推荐使用 Microsoft Store 来进行安装.

image-20211001142641266

Powerline 的安装

安装 Powerline 字体

Powerline 使用字形来设置提示符样式。 安装 [Meslo LGM NF,包含Powerline 字形。 可以从Nerd Fonts 安装字体。

阅读全文 »

vim是一个可高度定制的文本编辑器,使得创建和修改文件更加高效。

设计哲学

vim 设计的目的就是为了摆脱鼠标,所有工作都可以通过键盘完成。为了提高效率,需要使得双手尽可能少的移动位置。

illustration of a keyboard with home row keys

模式

vim 中有四种模式:普通模式,编辑模式,命令模式和视图模式。

普通模式

vim 默认为普通模式。在普通模式中我们可以进行光标的移动,文本的复制、粘贴和删除。

取代方向键

阅读全文 »

平时写博客,记录知识用的最多的就是 Typora. typora 是一歀简洁,优雅,高效的 markdown 文件编辑器。当插入图片时,图片会保存在 C:/Users/[用户名]/AppData/Roaming/Typora/typora-user-images/文件名 中,文章写好后,需要将图片同步上传到云端,可供他人访问,或在其它平台引用。这时就需要用到图床,也就是一个云端图片存储的地方。常见的图床有:sm.ms, 腾讯云 cos, 微博图床,七牛云, 阿里云 oss等。我主要使用 github+jsdelivr cdn 的方式。完全免费,稳定且几乎无限制。

github 新建图床仓库

github 新建一个公共的仓库,以 image-gallery 为例

image-20210928105538243

打开settings-> Developer settings -> Personal access tokens ,新建一个 token

image-20210928110138862

验证密码后,填入 token 信息,生成 token

image-20210928110445510

image-20210928110626114

保存好新生成的token,只会出现一次,如果没有保存,就需要重新生成

阅读全文 »

本文档演示如何安装ubuntu server 20.04 LTS

安装

ubuntu server 20.04LTS 镜像下载

可根据 install-ubuntu-server 一步一步进行安装。

其中有两个部分需要注意:

  1. proxy-url: http://host-address:proxy-port
  2. software-source: http://mirror.xtom.com.hk/ubuntu/

software-source 可在 Official Archive Mirrors for Ubuntu 寻找相近地区的归档镜像源

相关的信息查看命令

网络配置查看

  • ip -a 查看ip地址
  • ifconfig 查看ip地址信息(需要安装net-tools)
阅读全文 »

tcp的连接和断开

滑动窗口机制

拥塞避免算法

拥塞避免和慢启动为作用于不同对象的独立的算法。当拥塞发生时,我们希望减慢网络中数据包的传输速率,然后调用慢启动使继续。

混合算法操作

  1. 初始化一个给定的连接时,将 cwnd 设置为 segsize (一个数据段的大小),将 ssthresh 设置为 65535字节。
  2. TCP output 常规不会发送超过 cmnd 和接收端通告窗口的最小值。拥塞避免是发送端利用的控制流,通告窗口是接收端利用的控制流。前者基于发送端对网络拥塞感知的评估。后者和接收端对这次连接的可用缓冲空间的数量有关。
  3. 拥塞发生时(超时或者接收到了重复的 ACK ), 将 ssthresh 设置为当前窗口大小的一半(cwnd 和 接收端通告窗口的最小值, 但至少是两个数据段的大小)。此外,如果是因为超时导致的拥塞,则将 cwnd 设置为一个数据段的大小。
  4. 当另一端确认了新的数据,cwnd 增加。 但是增加的方式取决于是否在执行慢启动或者拥塞避免。 如果 cwnd <= ssthresh , 则执行慢启动。否则,执行拥塞避免。继续执行慢启动直到出现拥塞。然后执行拥塞避免。 慢启动开始,cwnd 设置为一个数据段的大小,并在每次收到 ACK 时,增加一个数据段的大小。该拥塞窗口会呈指数级的增加:发送一个数据端,然后是两个,四个等等。拥塞避免规定每次收到 ACK 时, cwnd 增加 1/cwnd。对比慢启动的指数级增加,拥塞避免为累加。

快速重传和快速恢复算法

快速重传算法:当接受到了三个或更多的 ACK ,则一定表示有数据段丢失。然后重传丢失的数据段,而不等待重传的定时器过期。

快速恢复算法:重传丢失的数据段时,进入拥塞避免阶段,而不是慢启动。

阅读全文 »

在工作中,我们常会使用 git 来进行项目的版本控制。但项目的一些配置文件我们希望只是存储在存储库中,本地开发环境对该部分配置文件进行修改,适合本地开发。而不将该部分修改提交到版本库。如:数据库配置文件。
那么怎样实现本地不追踪存储库中某文件的修改呢?有两种方法可以实现:

  • git update-index --assume-unchanged [filename]
  • git update-index --skip-worktree [filename]

那么这两种方法有什么区别呢?

assume-unchanged is designed for cases where it is expensive to check whether a group of files have been modified; when you set the bit, git (of course) assumes the files corresponding to that portion of the index have not been modified in the working copy. So it avoids a mess of stat calls. This bit is lost whenever the file’s entry in the index changes (so, when the file is changed upstream).

assume-unchange 应用于检测一组文件是否修改成本很高的情况;当你设置了该选项,git 会假设在工作区副本中,索引对应的这部分文件没有修改。这避免了大量的stat的调用。每当文件在索引中的条目发生变化时,该选项无效。(也就是说当文件在上游发生变化时)

skip-worktree is more than that: even where git knows that the file has been modified (or needs to be modified by a reset –hard or the like), it will pretend it has not been, using the version from the index instead. This persists until the index is discarded.

skip-worktree不止于此:即使 git 监测到该文件发生了变化(或者当执行 reset --hard 文件需要发生变化),将会假装没有发生变化,而使用索引中的版本。直到索引被丢弃。

--assume-unchanged 假想开发者不应该修改该文件。该选项是为了提升那些像SDK一样不会修改的文件目录的性能。
--skip-worktree 当你指示 git 不要监测指定文件,因为开发应该修改该文件。例如,主存储库上游主机存储了一些应用于生产环境的配置文件,你不希望偶然间不小心提交对这些文件的修改, --skip-worktree 是你正想要的。

原文回答:Git - Difference Between ‘assume-unchanged’ and ‘skip-worktree’

引用链接:

阅读全文 »

本文介绍使用hexo + github pages搭建博客网站。

基础环境:nodejs(version < 14 && version > 12)

hexo安装与配置

npm install -g hexo-cli

github仓库配置

github中,新建一个 public 仓库,命名为 TestBlog

本地新建博客并连接到 github 远程仓库地址

1
2
3
4
5
6
hexo init <folder>

cd <folder>

npm install

配置博客信息

1
2
3
4
5
6
7
8
title: KJohn2q
subtitle: '一个专注技术的程序员'
description: '涉猎的主要编程语言为 Python、Php、C++、Java,领域涵盖爬虫、后端、架构等。'
keywords: "Python, Php, C++, Java, 爬虫, 架构, 分布式"
author: John Wang
language: zh-CN
timezone: ''

阅读全文 »

  • 虚拟机联网有三种方式:桥接(bridge), NAT, 仅主机模式(Host-Only)。联网方式可以在虚拟机设置中进行设置。

    桥接(bridge)模式

    网络桥接是一种计算机联网设备,可从多个通信网络或网段中创建单个聚合网络。(原文:A network bridge is a computer networking device that creates a single aggregate network from multiple communication networks or network segments. )。

    如图所示,主机网卡通过虚拟网桥连接虚拟交换机,各网络模式为桥接的虚拟机连接虚拟交换机 VMNet0,各虚拟机 IP 均和主机 IP 处于同一网段且不能冲突。

    网络配置

    首先在虚拟机配置中选择桥接模式。

    然后进入虚拟机系统,设置虚拟机IP和主机IP处于同一地址段。

    我本机的 IP192.168.3.X 网段。故需要设置虚拟机为 192.168.3.X,且不能与当前局域网内的主机 IP 地址冲突。

    centos7 为例,使用 root账户登录后,vi /etc/sysconfig/network-scripts/ifcfg-ens33

    如图所示进行修改.

    然后重启网络服务(service network restart)

    此时,便可访问外网和宿主机。

    总结

    桥接网络的方式配置简单,但并不适用于ip地址稀缺的情况。

    NAT

    网络地址转换(NAT)是一种通过在数据包通过流量路由设备传输时修改数据包IP报头中的网络地址信息,将IP地址空间重新映射到另一个地址的方法。(原文:Network address translation (NAT) is a method of remapping an IP address space into another by modifying network address information in the IP header of packets while they are in transit across a traffic routing device.)

    vmware 中新建虚拟机默认网络配置为 NAT 模式,虚拟机处于独立的网络,通过 NAT 转换器可以访问外网,且能和主机相互通信。

    如图所示,虚拟的 VMware Network Adapter VMnet8 网卡与虚拟交换机 VMNet8 相连,IP 地址段为 192.168.9.0/24,网关默认为 192.168.9.2. 具体的 NAT 设置可点击NAT设置查看。

    网络配置

    首先,先将虚拟机的网络配置修改为NAT模式。

    可在 vmware 中的虚拟网络编辑器中查看 NAT 模式的 ip 地址段、网关地址和子网掩码。

    使用 root 用户登录虚拟机系统,配置网络信息为刚刚查到的(IP地址,子网掩码,网关地址),添加 DNS (114.114.114.114, 114.114.115.115)。

    然后重启网络服务即可访问网络和宿主机。

    总结

    NAT 模式适用于 IP 地址稀缺的情况。

    仅主机(Host-Only)

    仅主机模式表示虚拟机只能访问宿主机,不能访问网络。整个虚拟机和宿主机工作在一个大的内网下,宿主机可以访问虚拟机,虚拟机不能访问宿主机。如需要连接外网,可以利用宿主机共享网络。此时,处于 host-only 网络模式下的虚拟机可以通过宿主机网络访问外网,且可以访问宿主机

    如图所示,宿主机通过虚拟网卡 VMware Network Adapter VMnet1 与主机网络进行通信,虚拟网卡的 IP 地址需要设置为仅主机模式的网段。默认为主机号为 .1

    网络配置

    可在 vmware 中的虚拟网络编辑器中查看 仅主机模式的 IP 地址段,在虚拟机中配置IP地址,子网掩码。

    重启网络服务,宿主机即可访问该虚拟机。

    访问外网

    宿主机中联网的网卡,配置网络共享,选中 host-only 对应的那块虚拟网卡。

    点击确定后,该虚拟网卡的ip 地址会改为 192.168.137.1,需要改为该虚拟网卡对应的虚拟网络交换机的地址段

    如上图所示,地址段位 192.168,17.0,于是需要把虚拟网卡的 ip 地址改为 192.168.17.1

    然后,将联网方式为 host-only 的虚拟机网关设置为 192.168.17.lVMware Network Adapter VMnet1 的地址就可以访问外网了,此时也可以访问宿主机。

    总结

    仅主机模式一般用于公司对机密性要求比较高的网络,个人不常用。

    参考链接

阅读全文 »

本文总结了几个使用搜索引擎( google )的小技巧,供你参考

英文

尽量使用英文去搜索你需要的结果。英语是全世界使用范围最广的语言,使用英语你能搜索到更多高质量,且对你有帮助的内容。

使用标签

如果你需要图片,使用 Image 标签。如果你查找最近的新闻文章,使用 News 标签。

使用 ""

如果需要搜索指定的关键词或句子,使用引号缩小 google 搜索的猜测。该条在查找软件开发中遇到的问题或者软件使用中的报错尤其有用。

使用 - 排除关键词

使用连字符号来排除你不想要的结果。

使用 : 在指定站点中搜索

阅读全文 »