macOS 下使用 VS Code 配置远程开发工具
因为本人正在使用 macOS 系统,最近打算做 C/C++ 服务器开发,但是毕竟 macOS 和 Linux 的 API 还是不一样的,所以在 macOS 完成开发的全部工作是不合适的。本打算用虚拟机装 Linux 进行开发,但尝试了一点时间后,体验很差,所以决定换个方式。最终决定,使用 VS Code 在本地编写代码,再传到服务器中编译运行。
1. 安装 Remote-SSH 插件在 VS Code 扩展中搜索 Remote-SSH 插件并安装,这是一个 VS Code 提供的远程连接工具。
2. 配置 Remote-SSH 插件安装好 Remote-SSH 插件 以后,在 VS Code 左栏,扩展图标的上面,会多出一个 Remote Explorer 图标。点击这个新图标,点击 SSH TARGETS 右侧的齿轮状设置按钮,选择第一个 /User/gukaifeng/.ssh/config,这里 gukaifeng 是我本机的用户名,大家的会有自己的用户名。点开后,在 config 文件中写入一下内容:1234# Read more about SSH config files: ...
CentOS 8 为窗口添加最大/最小化按钮
安装 gnome-tweaks:首先切换到 root 用户,在终端执行 sudo yum install gnome-tweaks。
执行 gnome-tweaks:切换回普通用户,在终端执行 gnome-tweaks。
打开最大/最小化选项:在打开的设置窗口中,左栏选择 “Windows”,在右边找到 “Maximize” 和 “Minimize”,打开即可。
CentOS 8 在 root 和普通用户间切换的方法
从普通用户切换到 root 用户在终端中输入 su,然后输入密码,即可切换到 root 用户。
从 root 用户切换到普通用户假定一个普通用户名为 “gukaifeng”,则在终端中输入 login -f gukaifeng,即可切换到普通用户 “gukaifeng”。
使用 PicGo + GitHub 搭建个人免费图床
PicGo 是一个用于快速上传图片并获取图片 URL 链接的工具。PicGo 的 Github 地址为 https://github.com/Molunerfinn/PicGo
PicGo 支持 Windows、macOS 和 Linux。
PicGO 支持七牛图床、腾讯云 COS、又拍云、GitHub、SM.MS、阿里云 OSS、Imgur 共8种图床。
点击此处下载 PicGo应用
这篇文章不在赘述 PicGo 更多的细节信息,只记录如何使用,关于 PicGo 更多信息,可以参考其 Github。
创建一个新的 GitHub 仓库创建仓库比较基础,这里只需要注意一下,权限要选择 public。
新建一个 GitHub 个人访问令牌在 GitHub 页面 Settings -> Developer settings -> Personal access tokens 。点击 Generate new token 新建一个个人访问令牌。
Note 处自己简单写一下这个令牌是干嘛的,做个标记就可以。
下面的 Select scopes 多选框,把 repo 一栏全部打钩 ...
MacOS上的实用小工具
用了一年多 Macbook pro,整理了几个很好用的小程序。
大部分都占用很小,这里很多软件我都设置了开机自启,隐藏状态栏。
1. iShot一款免费优秀、功能全面的录屏、区域截图、窗口截图、长截图、延时截图、快速标注、贴图工具。
2. Mounty帮你在 Mac 上读写 NTFS 硬盘的数据,并且并不修改系统数据。
3. Gifski方便快捷的把视频转换为高质量 GIF 图片。
4. iTerm2iTerm2 是自带 Terminal 超好用的替代品,是 iTerm 的后继产品。
可以设置快捷键,呼之即来挥之即去,程序坞无图标,个人感觉比 linux 上的还方便呢。
5. IINA我心目中最好的 Mac 视频播放器。界面原生简约,MPV 内核,强大解码能力,自动匹配字幕。
6. HandShaker在 Mac 电脑上方便自如地管理你在 Android 手机中的内容。
7. iHosts/etc/hosts 编辑神器。无需 Root 权限,即可使用分组管理 Hosts,灵活组合,一键切换。
8. HandBrake一款超好用的支持多种视频格式的免费视频转换器。无损, ...
Leetcode思路笔记
请注意,此文章尚未完成。
当此文章完结时,此声明将被删除。
因为我在做LeetCode的时候,是断断续续的做的,周期比较长。
所以有时候做到后面,前面的就忘了怎么做了。
算法的训练也需要一个反复巩固的过程,所以就有了这篇文文章。
这篇文章主要记录Leetcode题目的问题概要和解决思路,不包含代码,只当做一个HINT。
思路标题上有*的是我认为比较重要的思路,要记得。
1. 两数之和1. 问题给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
1.2. 思路1暴力,能过,不解释。
1.3. 思路2*搞一个map,key为数值,value为这个数值对应的索引。
遍历原数组,每遍历到一个元素a,看看 target - a 在不在map里,在的话这这俩数对应的索引就是答案。如果不在的话,就把a和其索引加入map。
2. 两数相加2.1. 问题给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆 ...
Java中for循环内的++i与i++性能对比
在Java的for循环中,有人写for(int i = 0; i < 10; ++i),也有人写for(int i = 0; i < 10; ++i)。
关于++i与i++的原理,网络中有很多,也不是这篇文章的重点。
我们这里只测试下++i和i++在for循环中的性能差异,在其他地方(如表达式中)暂不考虑。
以前我在写C/C++的时候,无意间看到过有人说i++效率不如++i,这也是网络中很普遍的一种说法。至于效率差别的原因,在网络中的解释也很多,这里不多介绍。从那以后,我就一直坚持在写++i。
不得不说,虽然写++i的有相当一部分人,但主流还是i++。
今天看leetcode官方题解的时候,发现都是i++,于是又勾起了我一波好奇,就有了下面的测试。
两个测试分别使用System.nanoTime()和System.currentTimeMillis()计时。
先说结论,i++的时间性能好于++i,与网络中主流结论不一致。
下面的代码分别在IDEA(2019.3.2)、Eclipse(2019-12 4.14.0)和命令行中做了多次测试,最终结论相同。
我的系统是MacOS ...
Java JCF中的工具类
JCF中的工具类
不存储数据,而是在数据容器上,实现高效操作。例如排序、搜索。
Arrays类:数组的工具类,提供了对数组操作的工具方法。
Collections类:集合对象的工具类,提供了操作集合的工具方法。
Arrays和Collections中所有的方法都为静态的,不需要创建对象,直接使用类名调用即可。
1. ArraysArrays:处理对象是数组。
排序:对数组排序。sort(),parallelSort()。
查找:从数组中查找一个元素。binarySearch()。
批量拷贝:从源数组批量复制元素到目标数组。copyOf()。
批量赋值:对数组进行批量赋值。fill()。
等价性比较:判定两个数组内容是否相同。equals()。
Arrays中的方法有非常多,上面只是列出了几个最常用的,了解更多可以看官方API文档。
下面通过代码示例和其输出结果,来了解Arrays的基本使用。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 ...
Java映射Map类
Map映射
数学定义:两个集合之间的元素对应关系。
一个输入对应到一个输出。
{1, 张三},{2, 李四},{Key, Value},即键值对,K-V对。
Java中的Map
HashMap:不支持同步,快,数据量大。
Hashtable:同步,慢,数据量小。
LinkedHashMap:基于双向链表的维持插入顺序的HashMap。
TreeMap:基于红黑树的Map,可以根据key的自然排序或者compareTo()方法进行排序输出。
Properties:同步,文件形式,数据量小。
Properties也比较老,但是还有些程序使用,因为这是唯一可以把K-V对保存到文件中的类。
HashMap遍历是无序的;
LinkedHashMap遍历的顺序和它插入的顺序保持一致;
TreeMap遍历的顺序是按照大小或者compareTo()方法规定的。
1. HashMapHashMap
K-V对,K和V都允许为null。
不同步,线程不安全。
可以通过Map m = Collections.synchronizedMap(new HashMap(...));获 ...
Java集合Set类
集合Set
确定性:对任意对象都能判定其是否属于某一个集合。
互异性:集合内每个元素都是互不相同的,注意是内容互异。
无序性:集合内的顺序无关。
Java中的集合接口Set
HashSet:基于散列函数的集合,无序,不支持同步。
TreeSet:基于树结构的集合,可排序的,不支持同步。
LinkedHashSet:基于散列函数和双向链表的集合,可排序的,不支持同步。
1. HashSetHashSet
基于HashMap实现的,可以容纳null元素,不支持同步。
可以通过Set s = Collections.synchronizedSet(new HashSet(...))获取一个支持同步的HashSet。
add() 添加一个元素。
clear() 清空整个HashSet。
contains() 判定是否包含一个元素。
remove() 删除一个元素。
size() 集合大小,即元素个数。
retainAll() 计算两个集合交集。
下面通过示例代码和其输出结果,来演示HashSet的使用。
下面的代码中还测试了HashSet使用迭代器和使用for ...