关于 Seven | 小柒

Java 程序员,热衷自动化。

RSS 地址: https://blog.diqigan.cn/atom.xml

请复制 RSS 到你的阅读器,或快速订阅到 :

Seven | 小柒 RSS 预览

善用 MVP 思维,5 天时间零成本搭建小报童排行榜

1970-01-01 08:00:00

前言

你好,我是小柒。
Java 程序员,热衷自动化。

前段时间花了 5 天左右,借助 Notion + CloudFlare + Github Actions 零成本搭建了一个支持一键分销的小报童排行榜: https://xiaobot.osguider.com。在这里复盘一下过程,希望能够对你有所启发。

善用 MVP 思维,用最小的成本最快地实现最核心的功能,尽早触达用户,尽早获取反馈,不断迭代,不断升级。

什么是小报童排行榜?

小报童排行榜是一个罗列了(几乎)所有小报童专栏的导航网页。可以帮助你一键分销所有小报童专栏

小报童排行榜-最近更新专栏

给 eleventy(11ty) 添加 sitemap.xml 和 robots.txt

1970-01-01 08:00:00

配置过程

  1. 添加数据文件 _data/site.json,写入以下内容,定义站点信息和 si

开源服务指南博客文章自动生成

1970-01-01 08:00:00

  1. GitHub Actions 可以添加运行参数。我只需要设置 filepath 和 content 两个参数,然后配合 shell 脚本就可以自动生成和提交博文到 GitHub 仓库,进而触发自动构建和发布。

  2. GitHub Actions 提供了 REST API 来触发前面的工作流,这样我就可以通过 HTTP 请求来自动生成和发布博文。

  3. 开源服务指南数据库现在是建立在 Notion 上的,Notion 也提供了 REST API 的交互方式。所以我只需要定时扫描 Notion 数据库,获取状态刚变更为 “已发布” 的博文,提取文章内容,通过第 2 步中提到的 REST API 来触发第 1 步中提到的 GitHub Actions 即可自动生成和发布博文。这里我使用了 Cloudflare Workers 实现。

  4. 怎么监测 Notion 数据库文章状态变动呢?想要监测状态“变动”,我们需要知道变动前的状态和变动后的状态,进而需要有数据库缓存变动前的状态,能做,但麻烦。所幸,pipedream 帮我们做好了这个事情。它能够监测 Notion 数据库变动,并且触发工作流执行。

流程引擎技术调研

1970-01-01 08:00:00

概念

选型

后端

Activiti

activiti 由 Alfresco 软件开发,目前最高版本 activiti 7
activiti 有 5、6、7 几个主流版本。其中 5 和 6 的核心 Leader 是 Tijs Rademakers,后来由于内部分歧,Tijs Rademakers 在 2017 年离开团队,创建了 flowable。
现在 activiti 由 Salaboy 团队接管,5 和 6 两个版本已经暂停维护,activiti 7 仍然使用 activiti 6 的内核,并没有开发新的特性。只是在 activiti 上层封装了一些应用。

flowable

MySQL 数据库数据同步方案调研

1970-01-01 08:00:00

名词

工具

特色 Canal mysql_streamer go-mysql-transfer Maxwell Databus DataX
开源方 阿里巴巴 Yelp - zendesk LinkedIn 阿里巴巴
开发语言 Java Python Golang Java Java Java
活跃
高可用 支持 支持 支持 - 支持 -
文档 详细 还行 详细 详细 详细 还行
数据源 Mysql Mysql Mysql Mysql Mysql
Oracle
MySQL
Oracle
OceanBase
SQLServer
PostgreSQL
DRDS
ALL_RDBMS
ODPS
OSS
OTS
Hbase0.94
Hbase1.1
Phoenix4.x
Phoenix5.x
MongoDB
Hive
Cassandra
TxtFile
FTP
HDFS
TSDB
TDengine
OpenTSDB
接收端 编码定制 Kafka等(MQ) Redis
MongoDB
Elasticsearch
RabbitMQ
Kafka
RocketMQ
HTTP API
后续支持更多
stdout
Kafka
Kinesis
Nats
Google Cloud Pub/Sub
Google Cloud Bigquery
RabbitMQ
Redis
SNS
编码定制? MySQL
Oracle
OceanBase
SQLServer
PostgreSQL
DRDS
ALL_RDBMS
ODPS
OSS
OTS
Hbase0.94
Hbase1.1
Phoenix4.x
Phoenix5.x
MongoDB
Hive
Cassandra
TxtFile
FTP
HDFS
TSDB
TDengine
ADS
OCS
Elasticsearch
全量数据初始化 不支持 支持 支持 支持(maxwell-bootstrap) - 支持
数据格式 编码定制 Json(固定格式) Json(规则配置)
模板语法
Lua脚本
Json (固定) 编码定制? -
备注 需要写代码定制接受端 可扩展性更强,但是上手难度更高 数据同步非实时
实际使用配合 datax-web 体验更佳

IC卡、ID卡、CPU卡、RFID 和 NFC 的区别与联系

1970-01-01 08:00:00

RFID 卡

是指非接触式类电子卡片/标签,包括有ID卡、IC卡和NFC卡以及其它等电子卡/标签。他们主要的区别在于工作频段。

NFC

NFC,全称是Near Field Communication,“近距离无线通信”,NFC本质信息双向交换。

NFC和RFID都是基于位置相近的两个物体之间的信号传输,NFC技术增加了点对点(P2P)通信功能,NFC设备彼此寻找对方并建立通信连接。P2P通信的双方设备是对等的,而RFID通信的双方设备是主从关系。

NFC 的工作频率是 13.56Mhz,所以只能读取和模拟 13.56Mhz 的 IC 卡。

2023 年终总结

1970-01-01 08:00:00

前言

每一年都会发生很多很多的事情,能引发我去觉悟的,却寥寥无几。

2023,我称之为自己的开悟元年

一些故事和感悟,与你共享。

见自己、见天地、见众生

认识了一位新朋友,毫无保留地跟我分享她的世界。音乐、美食、玩乐、世界观,等等等等。给我异常封闭的世界打开了一扇窗。

还有一位老朋友,劳心劳力带我四处游玩,没有一丁点怨言。见到了许多从未见过的风水,体验了许多从未体验过的人情。

读万卷书不如行万里路,行万里路不如阅人无数。

可能多亏了这些朋友们,才能让我愿意打开自己的心门,尝试着去接触这个世界。

当然,按照我现在的境况,距离“见自己、见天地、见众生”还相差甚远。但我相信自己终能解开枷锁,释放真我。

URL 网页截图技术选型

1970-01-01 08:00:00

平台 收费策略 API 自定义宽高
月刊-202310

1970-01-01 08:00:00

开发技巧

待办清单:化被动主动

1970-01-01 08:00:00

我有一个天赋,脑海时常能蹦出来许许多多的奇思妙想,如漫天星海,美妙无穷。
我有一个烦恼,思维总是会迷失在纵横交错的巨大迷宫,似瀚海孤舟,无所适从。


我把事情装在脑子里,经常需要冥思苦想:

  • 接下来要做哪件事?

1970-01-01 08:00:00

“终有一天,我要抛却一切枷锁。踏上旅程,环游世界。”

“健康永远是第一要务,是时候好好规划一下了。”

“等我调研完所有的时间管理理念并且总结出一套适合自己的方法论再去执行。”

“我想开个自媒体帐号分享心得,倒逼自己成长。但是…..等

记一次 Notion 油猴脚本的编写经历

1970-01-01 08:00:00

起因

最近借助 Notion 作为数据库搭建了《开源服务指南》的工作流,Notion 是真的好用,无奈复制出来的 Markdown 文本中图片部分格式不对(不知道是不是我使用方法有问题),需要手动修正。一回生二回熟三回咱可不就烦了嘛,所以想着写个油猴插件解决 把 Notion Page 内容复制为标准 Markdown 文本 这个问题。

折腾

获取页面 HTML,然后 HTML 转 Markdown

先查了一下资料,在 GreasyFork 搜索 notionmarkdown 关键字,找到了这么个脚本:复制为Markdown格式

使用类似的思路,先获取目标 DOM 的 HTML 代码,然后 HTML 转 Markdown。但是理想很丰满,显示很骨感。
实际上 Notion Page 内容并不是标准的语义化的 HTML 标签,而是使用了大量的 div 和自定义样式。所以转换效果并不理想,会有很多样式丢失。
比如无序列表变成了普通文本,代码块也会变成普通文本等。这个问题也不是不能修复,只是要把对应的 HTML DOM 替换成标准格式,略微繁琐,遂放弃。

1970-01-01 08:00:00

以前的我
可能是一把利刃

指哪儿打哪儿
削金如麻

人都说刀客 天下无敌
谁能见刀身 斑痕累累

现在这把刀有了刀灵
开始思索过去和未来
开始连接缘因和结果
开始想跳脱大道束缚
做自己的执刀人<

裹挟

1970-01-01 08:00:00

江河湖泊,
每一滴水都在往前走,
但它们决定不了自己的流向。

或许,
我们不应该一直低头猛冲。

偶尔抬头看看天,
看能否厚积薄发,升华自我,
变成一片云。

只是,
被风裹挟着的云,
和被河裹

蒲公英

1970-01-01 08:00:00

我最近突然对自己有了相对来说更加清醒的认知。

在互联网的世界里 我把自己比作蒲公英。

乘风而行,能比更多人更早地见到更多更新鲜的事物。
同时也是随风漂泊,居无定所。风过之后,尽是虚无。

能乘风但不能御风,观万物但未能留痕。

月刊-202208

1970-01-01 08:00:00

拓认知

使用 dockerfile-maven-plugin 构建 docker 镜像

1970-01-01 08:00:00

简介

本文介绍了 com.spotify:dockerfile-maven-plugin 的简单使用示例。
最终达成的目标是把 docker 镜像构建集成在 maven 打包过程中,可以使用 maven 命令构建 docker 镜像。

功能相似的插件有三个:

使用

以 spring-boot-web 项目为例:

  1. 创建一个 spring-boot-web 项目并确保项目正常;

  2. 依据项目需要在合适的位置定制一个 Dockerfile,这里把 Dockerfile 放在了 src/main/docker 目录下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    FROM openjdk:8-jdk-alpine
    # 设置时区
    ENV TZ Asia/Shanghai
    RUN apk --no-cache add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
    && echo ${TZ} > /etc/timezone \
    && apk del tzdata

    VOLUME /tmp
    # 定义变量
    ARG JAR_FILE
    ADD target/${JAR_FILE} app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    # 声明服务以 tcp 协议运行在 8080 端口
    EXPOSE 8080/tcp

Linux + picgo 图床自动化实践

1970-01-01 08:00:00

前言

因为 PicGo 在 Linux 下的 GUI 体验并不是很好,索性自己通过 Shell 脚本和快捷键的方式实现了较好的用户体验,记录下操作流程,希望能帮到各位。

环境

笔者测试的相关软件环境如下:

使用 git 备份和恢复 dotfiles

1970-01-01 08:00:00

前言

Unix 用户的配置文件一般存储在以 . 开头的文件中,这些文件被统称为 “dotfiles”。

本文讲述了一种极其优雅的通过 git 备份和恢复 dotfiles 的方法。

备份

  1. 初始化 git 仓库

    1
    2
    3
    4
    5
    6
    # 初始化 git 仓库
    git init --bare $HOME/.dotfiles
    # 指定 git 仓库和工作树路径并创建指令别名,简化操作
    cp -a .bashrc{,.bak} && echo "alias dotfiles='git --git-dir=$HOME/.dotfiles/ --work-tree=$HOME'" >> .bashrc && source .bashrc
    # git status 不显示未跟踪的文件
    dotfiles config status.showUntrackedFiles no
  2. 创建远程仓库,比如 [email protected]/seven/dotfiles

  3. 添加文件

    1
    2
    3
    4
    dotfiles add .zshrc
    dotfiles commit -m "add .zshrc"
    dotfiles remote add origin ${git_repo}
    dotfiles push

学习笔记-持续交付 36 讲

1970-01-01 08:00:00

持续交付 36 讲

持续交付是提升软件交付速率的一套工程方法和一系列最佳实践的集合。它的关注点可以概括为:持续集成构建、测试自动化和部署流水线。
持续交付最核心的几个部分包括:配置管理、环境管理、构建集成、发布及监控、测试管理。

基本概念

持续集成、持续交付和持续部署的关系

  • 持续集成

    从编码到构建再到测试的反复持续过程。“持续集成”一旦完成,代表产品处在一个可交付但并不是最优的状态。

  • 持续交付

    在“持续集成”之后,获取外部对软件的反馈,再通过“持续集成”进行优化的过程叫作“持续交付”。“持续交付”是“持续集成”的自然延续。

  • 持续部署

    将可交付的产品,快速且安全地交付用户使用的一套方法和系统。它是“持续交付”的最后一公里。

“持续交付”是一个承上启下的过程,它使“持续集成”形成闭环,有了实际业务价值;又为将来达到“持续部署”的高级目标做好了铺垫。

持续交付的价值不仅仅局限于简单的提高产品交付的效率,它还通过统一标准、规范流程、工具化、自动化等等方式,影响着整个研发生命周期。

IntelliJ IDEA 最佳实践 - 精选插件

1970-01-01 08:00:00

前言

IntelliJ IDEA 提供了强大的插件系统,并且有着完善的插件生态。

成千上万追求极致的开发者们为 IDEA 开发了不计其数的插件,可以极大程度地帮助开发者提升开发速度、代码质量、以及开发的舒适度等等。

本文收集了最受开发者喜欢的一些插件,罗列至此,希望能够对你有所帮助。

插件的安装和卸载章节被我放在了文章较后的位置,如果你需要查看这些内容,翻看文章后面的 安装卸载 章节即可。

精选插件

Rainbow Brackets

这款插件名为彩虹括号,可以帮助我们更好地匹配括号和定位代码块。
主要功能包括:

  • 使用不同颜色渲染多层嵌套的括号;
  • 通过高亮显示帮助我们更好地定位代码块(ctrl + 鼠标右键单击 触发);

idea-plugin-rainbow-brackets-highlines

Intellij IDEA 最佳实践-注释模板

1970-01-01 08:00:00

IDEA 的设置项中提供了 Live Templates 和 File and Code Templates 的设置。其中:

  • Live Templates 用于配置方法注释模板和代码模板,这类模板需要在写代码的过程中通过关键字手动触发;
  • File and Code Templates 用于配置文件模板,新建文件时 IDEA 会自动填入我们配置的模板内容。常用于配置类注释、接口注释等。

使用 Intellij IDEA 创建 maven 多模块项目

1970-01-01 08:00:00

前言

之前接触过的项目大都是单体应用,各应用之间有功能重合但无代码共用。同样的功能,要么重复开发,要么代码拷贝,开发繁琐且效率低下。一但在多个应用中均有使用的相同的代码出现了 bug,开发人员更是要在多个应用中逐个修复,劳神伤身。

故引入模块化开发概念,把相对独立的功能抽离成组件开发,完成之后再组合到一起服务业务。一来开发有了积淀,新项目不必从零开发;二来 bug 的修复也会简单很多,只需修复一次,升级版本即可。提高了工作效率,才会有更多的时间去做技术研究和价值创造。

简单查询了使用 Intellij IDEA 进行 maven 多模块项目的创建过程,只是模块化开发中很小的一部分,记录于此,用以备忘。

通过代理连接 ssh 服务器

1970-01-01 08:00:00

前言

碍于各种复杂的网络环境,有些情况下我们并不能直接访问 SSH 服务器。

这时,网络代理和 SSH 隧道就成了救命稻草。

本文记录了通过网络代理和 SSH 隧道连接远程服务器的几种方法,希望对你有所帮助。

稻草堆

使用 SSH 隧道连接服务器

常用于跳板机场景。

1
ssh ${ssh-user}@${ssh-host} -o ProxyCommand="ssh ${jump-host-user}@${jump-host} -p ${jump-host-port} -W %h:%p"

SSH + ncat 使用 HTTP(s) 代理连接服务器

  1. 安装 ncat

    1
    sudo apt install ncat
  2. 通过代理连接远程服务器

    1
    ssh ${ssh-user}@${ssh-host} -o ProxyCommand="ncat --proxy ${proxy-ip}:${proxy-port} --proxy-type http --proxy-auth ${proxy-account}:${proxy-password} %h %p"

SSH + ncat 使用 Socks 代理连接服务器

  1. 安装 ncat

    1
    sudo apt install ncat
  2. 通过代理连接远程服务器

    1
    ssh ${ssh-user}@${ssh-host} -o ProxyCommand="ncat --proxy ${proxy-ip}:${proxy-port} --proxy-type socks5 --proxy-auth ${proxy-account}:${proxy-password} %h %p"

Java 清空控制台输出

1970-01-01 08:00:00

前言

本文通过两种方法讲述了 Java 如何清空控制台输出,达到类似 Linux 中 top 命令的效果。

两种方法均在 Linux 环境中测试通过,Windows 环境请自行测试,理论可行。

下列代码需要在控制台执行才会有清除控制台效果,在 IDE 中执行无效。

使用 ASCI 控制码清空控制台

通过输出 ASCI 控制码清空控制台,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
* ConsoleClear
*
* @author seven
* @date 2021-04-14 21:49
*/
public class ConsoleClear {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
// 清空控制台并把光标停留在起始位置
System.out.print("\033[H\033[2J");
// 效果同上
// System.out.print("\033[0;0H\033[2J");
System.out.fulsh();
}
}

另外,ASCI 控制码还可以实现前景色、背景色、下划线、消隐、闪烁效果的设置以及光标控制,具体方法请阅读参考文档。

红米 K40 Pro 安装 Magisk(非 TWRP)

1970-01-01 08:00:00

前言

这篇文章记录了 RedMi K40 Pro 手机非 TWRP 方式刷入 Magisk 的过程、OTA 升级的注意事项和一些常用 Magisk 模块推荐。希望能够对你有所帮助。

安装 Magisk

  1. 解锁 BL,参照 官网教程 操作即可。

    解锁BL

  2. 找到与当前手机 MIUI 版本相同 的卡刷包或者线刷包。

Hexo + Typora + PicGo-Core 写作三件套

1970-01-01 08:00:00

前言

使用 Hexo 写博客已经很久了,各方面体验还算顺滑,唯一感觉不是那么爽的地方在于图床的使用。

如果在写作的过程中需要插入图片,我需要先中断写作,打开图床 web 页面,上传图片,复制图片链接,再回到编辑器粘贴图片链接。整个过程极其繁琐,令人苦不堪言。直到我遇到了 PicGo-Core

PicGo-Core 可以和 Typora 无缝连接,在几乎无感的情况下完成图片的上传与 markdown 格式的转换,极大得提高了写作的流畅程度。

本文将结合我的自身实践,讲述 Hexo + Typora + PicGo-Core 的联合配置过程,希望能够对你有所帮助。

文章适合已经把玩过 Hexo 或者对 Node 有所了解的用户理解,如果您没有接触过对应知识,还请自行补充。

文中 “Hexo + Typora 联动” 章节与 “Typora + PicGo-Core 联动” 章节并无关联,可以只阅读自己感兴趣的部分。

月刊-202012

1970-01-01 08:00:00

优秀文章

  • 和软件开发相关的一些思考

    1. deadline 带来的生产力一定程度上是以牺牲质量为代价的;
    2. 在软件开发或者是学习过程中,需要不断地根据实际情况去调整计划。不要一刀切得使用固定的 ddl;
    3. 大多数开发者都会高估自己的开发速度,低估软件工程的复杂程度;
    4. 单一技术不能解决所有问题,争论某种技术最好并没有实际意义。关键是什么工具和技术更适合解决你现在的问题;
    5. 技术总归是要为人服务的,产品的出发点应该是“人”。“人”需要什么功能,什么技术更适合完成这个功能;
    6. 多和人沟通,了解不同人的想法、不同人思维的差异,可以让我们更容易地去接受这个世界存在着的不同,让我们更谦虚。
  • 给你一份时间管理秘籍

    无事心不空,有事心不乱,大事心不畏,小事心不慢。

    专注可以解决世上绝大多数问题,剩下的需要一点运气。

  • 合理合法地多赚钱

    关于金钱,说到底也是一种资源,这种资源和其他的资源没有太大区别,资源越多,你的自由度越大。

月刊-202009

1970-01-01 08:00:00

优秀文章

  • 不行

    得不到就是得不到,别说自己不想要。
    不学就是不学,别说自己没时间。

  • 别给年轻人提建议

    每个人最终都将成为自己。

  • 如何理解所谓的压力与红利

    不要稀里糊涂的随波逐流,红利到来的时候,要知道红利是从哪里来的,怎么来的,这样才能更好的把握机会,争取实现自我突破和提升。挤压到来的时候,要知道挤压是怎么来的,这样才能未雨绸缪,更好的规避,更好的让自己处于相对安全和健康的位置。

    学会真正的理解因果,理解逻辑,理解世界。

    多读一点经济学的书,多理解相关经济学的逻辑,多关注政策面的新闻,更好的认识这个世界,认识自己所处的环境,不要简单归因,不要只看到表面,你会自己找到答案和真正的因果。

    如果你不知道如何把握红利,不知道如何规避压力,唯一能做的,是不断提升自己的职场竞争力,提升自己的信用,口碑和影响力。永远不要认为,做对一次选择,就可以安稳一生。

  • 快速学习秘诀:费曼学习法

    确定目标、模拟教学、反复理解、复习简化。

monthly-202005

1970-01-01 08:00:00

优秀文章

Ubuntu 20.04 装机手册

1970-01-01 08:00:00

前言

期待已久的 Ubuntu 20.04 终于发布了,对其朝思暮想的我当然要前来尝试一番。

这篇文章是我从 16.04 至今一直在使用的装机手册,致力于让 Ubuntu 使用起来更加顺手。整理至此,供君采撷。

附装机图一张:

Ubuntu20.04装机图

Python 兴趣小组第十周作业

1970-01-01 08:00:00

学习目标

第十周的部分目标在第九周提前完成了,第十周实战章节的教程与我目前的能力不太符合。索性调整了计划,自己设计实现了一个简单地新闻爬取程序。

利用了第三方现有的接口,综合使用了之前学到的许多知识,勉强能让自己满意吧。

愿世间美好与你环环相扣

1970-01-01 08:00:00

前言

我是一个有着轻微强迫症的人,万事万物都想追求尽善尽美。

对于工具,亦是如此。欲善其事,先利其器。我一直在寻找更加得心应手的工具。

所幸、这样的工具并不少见;可惜,很多工具鲜为人知。

所以,我做了一个网站,罗列了一些我个人认为很好的值得与大家分享的东西。

愿世间美好,皆与你环环相扣。

Python 兴趣小组第九周作业

1970-01-01 08:00:00

学习目标

完成 Python 教程 - 廖雪峰的官方网站 以下章节的学习并输出学习笔记:

  • 访问数据库(MySQL 部分)
  • Web 开发
  • 异步 IO

Python 兴趣小组第八周作业

1970-01-01 08:00:00

学习目标

完成 Python 教程 - 廖雪峰的官方网站 以下章节的学习并输出学习笔记:

  • 图形界面
  • 网络编程
  • 电子邮件

Python 兴趣小组第七周作业

1970-01-01 08:00:00

学习目标

完成 Python 教程 - 廖雪峰的官方网站 以下章节的学习并输出学习笔记:

  • 常用内建模块
  • 常用第三方模块
  • virtualenv

围墙

1970-01-01 08:00:00

围墙

温饱有余,奢侈不足。从小到大,我的家境一直是这样的一种境况。

凭借勤俭节约,我们能过上“还不错”的生活。所以,我一直不太理解“有钱人”的生活。

千元左右的安卓手机也能打电话玩游戏,为什么要花四五倍的价格去买 iPhone?

淘宝上遍地都是十几块钱的线控耳机,为什么要花几千块钱去买 AirPods、Sony?

都是打字,薄膜键盘凭啥就不如机械键盘?

……

大学之后,这些问题便常伴随我左右。

因为在自己的小天地里过得“还不错”,所以简简单单地把答案归结为“钱多没地方花”或者“打肿脸充胖子”。

从未去深究,从未去探寻围墙外的世界。

月刊-202004

1970-01-01 08:00:00

优秀文章

Python 兴趣小组第六周作业

1970-01-01 08:00:00

学习目标

完成 Python 教程 - 廖雪峰的官方网站 以下章节的学习并输出学习笔记:

  • 进程和线程
  • 正则表达式

Python 兴趣小组第五周作业

1970-01-01 08:00:00

学习目标

完成 Python 教程 - 廖雪峰的官方网站 以下章节的学习并输出学习笔记:

  • 面向对象高级编程
  • 错误、调试和测试
  • IO 编程

反思

1970-01-01 08:00:00

我是一个很纠结的人。

不安于现状,不付诸改变。

退一步安于现状,可得温饱安逸;进一步付诸改变,可得蜕变升华。但我恰恰就身处这夹缝之间,不愿退,不易进。循环往复,无法自拔。庸人自扰,说的大概就是我现在的状态罢。

我大多数时候的生活状态是这样的:忙时碌碌无为,闲时无所事事。

忙到尽头,便是自怨自艾;闲到极致,皆是胡思乱想。

为什么?我会成为这样的自己?

Python 兴趣小组第四周作业

1970-01-01 08:00:00

学习目标

完成 Python 教程 - 廖雪峰的官方网站 以下章节的学习并输出学习笔记:

  • 函数式编程
  • 模块
  • 面向对象编程

Python 兴趣小组第三周作业

1970-01-01 08:00:00

学习目标

完成 Python 教程 - 廖雪峰的官方网站 以下章节的学习并输出学习笔记:

  • 安装 Python
  • 第一个 Python 程序
  • Python 基础
  • 函数
  • 高级特性

《寄生虫》观后感

1970-01-01 08:00:00

电影信息

寄生虫 기생충 (2019)

寄生虫.png

电影简介

电影《寄生虫》讲述了一个韩国贫苦人家凭借机遇、能力和心机把自己一家四口安排到一个富贵人家工作,最后因被前帮佣一家发现而引起冲突并导致真相败露的故事。

月刊-202003

1970-01-01 08:00:00

优秀文章

  • 沟通中几个常见的盲区

    文章介绍了关于沟通的几个建议,很是受用。

  • 不要跟着平庸的老板

    • 凡是按时间或件数来计酬的工作,都别做太久;
    • 职场政治是这样一个东西,你可以不去碰,但不能不去懂;
    • 分清楚“我不适合”和“我不行”;
    • 不要跟着平庸的老板;
    • 平台能级永远大于个人奋斗。
  • 如何避免自己成为一个傻叉

    思维模式差距太大其实是无法交流的。如果你觉得一个人和谁交流都让人如沐春风还有收获,那说明那人要么是随意附和,要么情商智商双高,能降维和你交流。

    当傻叉效应出现的时候,不要忘了,你在对方眼里,也可能是同样的形象。

Python 兴趣小组第二周作业

1970-01-01 08:00:00

目标

系统学习 Python 知识,简单入门 Python 编程。

验收标准

学完 Python 教程 - 廖雪峰的官方网站 系列教程。

Python 入门学习计划

本计划依据 Python 教程 - 廖雪峰的官方网站 制定。

Python 兴趣小组第一周作业

1970-01-01 08:00:00

Python 是什么?

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。由 Guido van Rossum 于 1989 年底发明。Python 的第一个公开发行版发行与 1991 年,源代码遵循 GPL(GNU General Public License)协议。Python 语法简洁而清晰,具有丰富和强大的类库。它常被称为胶水语言,能够把用其他语言制作的各种模块(尤其是 C/C++)很轻松地联结在一起。

为什么会出现 Python 这种语言?

Python 由 Guido van Rossum 于 1989 年年底出于某种娱乐目的而开发,Python 语言是基于 ABC 教学语言的,而 ABC 这种语言非常强大,是专门为非专业程序员设计的。但 ABC 语言并没有获得广泛的应用,Guido 认为这是非开放造成的。

Gudio 在 Python 中避免了 ABC 不够开放的劣势,加强了 Python 和其他语言如 C、C++ 和 Java 的结合性。此外,Python 还实现了许多 ABC 中未曾实现的东西,这些因素大大提高了 Python 的流行程度。

实验 - Python 兴趣小组

1970-01-01 08:00:00

背景

一名叫大蕉的程序员 的影响,我在过去一年里获得了比较大的成长。我也一直在想,自己能不能像他一样,帮助周围的人一起成长。

两个月前组建了一个写作群,虽发展不及预期,但效果还不错,群员都有自己的成长。亲眼看着有的人从一直有兴趣写作但几乎从未动笔到几乎周周更文并且还能获得班主任和辅导员的点赞转发;亲眼看着有人写出了比我更深刻的对于乡情的认识;亲眼看着有人可以用“我不想长高”切入,讲述让我眼眶发热的关于父爱的故事……

到最后我只能惊叹道:“你们真是一群宝藏男 / 女孩”。他们的文字,让我收获良多。

一开始只想着看看自己能不能帮到别人什么。没曾想,在收获面前,我的付出根本不值一提。

在学校同乡会的群聊中,我曾不止一次看到不止一人说想学 Python,但之后貌似都没了下文。恰巧前几日群里又有人说起了这个话题,心想着我或许可以给他们一个开始的理由和坚持下去的动力及约束。

于是,“Python 兴趣小组”群应运而生。谨以此文,记录建群历程,供以后借鉴。

月刊-202002

1970-01-01 08:00:00

优秀文章

1970-01-01 08:00:00

2020,果真是多事之秋,开年便有诸多不顺。

最近经常听到别人说庚子年是灾年。但是我觉得吧,好事和坏事每天都在发生,只是有时候坏事恰巧发生在了庚子年,特别惹人注意,仅此而已。

作为一个 30% 的唯心主义者,我认为逆天改命最大的因素在于自身。管它大环境如何,做好自己,便是成功的开始。

虽然说环境的势能也不可忽略,但那都是后话。成就更好的自己,才能更好地利用势能。

我的 2019 总结和 2020 计划

1970-01-01 08:00:00

前言

碌碌无为。

人生中的前 20 多年,似乎都是这同样的一种状态。

每一天都在学习,每一刻都在做事。但是一天下来,却想不起当天做了什么;一年过去,依旧停留在原地踏步。

可能,这是因为没有计划吧。

朝菌不知晦朔,蟪蛄不知春秋。漫无目的,得过且过,大局难定,大器难成。

上古大椿,八千春秋。知途知径,浑然天成。

姑且尝试着对自己的人生进行简单的总结与规划,若有裨益,幸甚至哉。

月刊-202001

1970-01-01 08:00:00

资源推荐

ARTS-16

1970-01-01 08:00:00

Algorithm

1299. 将每个元素替换为右侧最大元素

解法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int[] replaceElements(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
int maxRight = arr[i + 1];
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] > maxRight) {
maxRight = arr[j];
}
}
arr[i] = maxRight;
}

arr[arr.length - 1] = -1;
return arr;
}
}

执行用时:137ms,内存消耗:39.6MB。

ARTS-15

1970-01-01 08:00:00

Algorithm

283. 移动零

解法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public void moveZeroes(int[] nums) {
int loopTimes = nums.length, zeroCount = 0, insertIndex = 0;
for (int scanIndex = 0; scanIndex < loopTimes; scanIndex++) {
if (nums[scanIndex] != 0) {
nums[insertIndex++] = nums[scanIndex];
} else {
zeroCount++;
}
}

for (int i = nums.length - 1; zeroCount > 0; zeroCount--, i--) {
nums[i] = 0;
}
}
}

执行用时:0ms,内存消耗:37.7MB。

ARTS-14

1970-01-01 08:00:00

Algorithm

月刊-201912

1970-01-01 08:00:00

优秀文章

  • Kindle 盖泡面,单反爱吃灰

    池建强老师经常会给极客时间很多课程写推荐文章。不像其他广告, 池老师的推广文章我是很喜欢阅读的。字里行间,无不透露着他对课程的喜爱与雕琢。用心做内容,并且为自己的产品自豪,达到这种境界,并不简单。

    借用池老师的一句话:“如果连我自己都不好意思推荐我自己的产品,那它一定是有问题的”。

  • 搭便车的时候,请别把车砸了。

    仁慈和善良的人,实际上是被那些不够仁慈,不够善良的人所保护的。

  • 听说你想过上流生活

    关于消费观的一些见解。

  • 微信搜一搜迈出新的一步,好戏来了

    人无我有,人有我优,人优我便利。微信的布局着实可怕。

ARTS-13

1970-01-01 08:00:00

Algorithm

1313. 解压缩编码列表

解法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public int[] decompressRLElist(int[] nums) {
int resultLength = 0;
int loop = nums.length / 2;
// 计算目标数组的长度
for (int i = 0; i < loop; i++) {
resultLength += nums[2 * i];
}
// 执行解码操作
int[] result = new int[resultLength];
int resultIndex = 0;
for (int i = 0; i < loop; i++) {
for (int j = 0; j < nums[2 * i]; j++) {
result[resultIndex] = nums[2 * i + 1];
resultIndex++;
}
}
return result;
}
}

执行用时:1ms,内存消耗:37.8MB。

ARTS-12

1970-01-01 08:00:00

Algorithm

1295. 统计位数为偶数的数字

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution {
public int findNumbers(int[] nums) {
int count = 0;
for (int num : nums) {
int bits = 0;
do {
num = num / 10;
bits++;
} while (num != 0);

if (bits % 2 == 0) {
count++;
}
}

return count;
}
}

执行用时:1ms,内存消耗:38.7MB。

ARTS-11

1970-01-01 08:00:00

Algorithm

1304. 和为零的N个唯一整数

解法一:

钻了个漏洞。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public int[] sumZero(int n) {
if (n <= 1) {
return new int[]{0};
}

int[] result = new int[n];
int initNumber = 1, sum = 0;

for (int i = 0; i < n - 1; i++) {
result[i] = initNumber;
sum += initNumber;
initNumber++;
}

result[n - 1] = -sum;
return result;
}
}

执行用时:0ms,内存消耗:34.9MB。

不尝试一下, 你怎么知道自己不行?

1970-01-01 08:00:00

打卡这么简单的事, 真的能影响到我?

背景

ARTS 起源于 陈皓 老师的 左耳听风 课程, 我们在其基础上做了一丢丢改造, 感谢 陈皓 老师.

两个月前, 我的朋友 大蕉 发起了一个为期 8 周的 ARTS 打卡活动:

每周打卡,自行创建一个博客地址。

打卡要求:
8人8周为一个小组。入群门槛188,8周完成全额退款,若全员完成,大蕉发188红包。

一周没打卡,请发10*当前人数红包一个。
两周没打卡,请退群。

打卡条件:
大家自发每周完成一个ARTS:
(也就是 Algorithm、Review、Tip、Share 简称ARTS)

(高级打卡组)
1.每周至少做一个 leetcode 的算法题
2.阅读并点评至少一篇英文技术文章
3.学习至少一个技术技巧(编程或其他)
4.编写一篇有观点和思考的技术文章(500字以内)

(初级打卡组)
1.每周至少做一个 leetcode 的算法题或者小玩具代码
2.阅读至少一篇英文技术文章
4.编写一篇文章(500字以内)

入群流程:
转账即报名,请描述自己想进入初级还是高级组

承诺:
我不承诺你一定能坚持下去,但我承诺你坚持下去肯定会看见不一样的自己

乍一看, 似乎很简单, 也似乎很难.

一咬牙, 我加入了这个计划.

ARTS-10

1970-01-01 08:00:00

Algorithm

1252. 奇数值单元格的数目

解法一

思路:

因为题目中行列式每次数据变换都是整行或者整列同时进行的, 所以只需要统计每一行和每一列会被自增多少次即可. 最后对应行和列的统计结果相加即为对应坐标的数值.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public int oddCells(int n, int m, int[][] indices) {
int[] rows = new int[n];
int[] columns = new int[m];
for (int[] axis : indices) {
rows[axis[0]]++;
columns[axis[1]]++;
}

int oddNumber = 0;
for (int row : rows) {
for (int column : columns) {
if ((row + column) % 2 == 1) {
oddNumber++;
}
}
}

return oddNumber;
}
}

执行用时: 1ms, 内存消耗: 38.7MB.

我一个程序员, 心血来潮建了个写作群

1970-01-01 08:00:00

没错, 我一个程序员, 心血来潮建了个写作群.

大学

大学生涯, 我经历的似乎只有失败二字.

大一上学期就开始挂科, 一直持续到毕业. 40 学分劝退, 曾一度挂到了 39 个学分. 学习上, 我无疑是失败的.

同班 29 人, 与我交好的只有 4 人. 同校 4 万人, 毕业后还有联系的, 屈指可数. 大学前, 整个学校都是我的好朋友, 大学后, 却和他们越走越远. 交际上, 我依然是失败的.

大学前, 我可以很自豪地说自己喜欢计算机, 说自己喜欢 DIY, 说自己喜欢轮滑. 大学后, 却一事无成. 就连兴趣爱好, 我都是失败的.

摸爬滚打两个月, 找到了全班最差的工作; 无可奈何签合同, 拿了同岗位最低的薪水. 甚至还被忽悠着贷款购买了两万块的 Python 课程. 找工作, 当然还是失败的.

ARTS-No.8

1970-01-01 08:00:00

Algorithm

1266. 访问所有点的最小时间

思路:

这其实更像是一个数学问题.

因为需要按顺序访问所有点, 所以可以把问题简化为计算两个点之间的最小距离, 最后把每两个点之间的最小距离累加, 问题得解.

接下来要计算两个点之间的最小距离, 因为走对角线的效率是分别走横竖的两倍, 所以我们要尽可能多地走对角线. 那么两个点之间势必会形成一块而走对角线的正方形区域, 正方形的边长就是以两点为对角形成的长方形的较短的一条边. 剩余的距离一直横着或者竖着走即可. 问题得解.

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int minTimeToVisitAllPoints(int[][] points) {
if (points.length <= 1) {
return 0;
}

int total = 0;
int[] last = points[0];
for (int i = 1; i < points.length; i++) {
int[] current = points[i];
int x = Math.abs(current[0] - last[0]);
int y = Math.abs(current[1] - last[1]);

int italic = Math.min(x, y);
int straight = Math.max(x, y) - italic;
int move = italic + straight;
total += move;

last = current;
}

return total;
}
}

执行用时: 1ms, 内存消耗: 41.4MB.

ARTS-No.9

1970-01-01 08:00:00

Algorithm

实验-时间梳理

1970-01-01 08:00:00

前言

毕业差不多一年了, 一年之中似乎每天都在寻求着进步, 一年之后又觉得其实自己并没有进步. 碌碌无为, 好像就是我每天不断重复的循环.

意识到这个问题之后便开始尝试破除当下的困境, 恰巧上周看到一篇文章: 如何利用碎片时间,提升自己的职场竞争优势, 感觉应该有用, 不仿就先试试文章中提到的时间梳理吧.

时间梳理-现状

以半小时为时间片段进行分割, 现阶段我的时间使用情况如下:

ARTS-No.7

1970-01-01 08:00:00

Algorithm

35. 搜索插入位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution {
public int searchInsert(int[] nums, int target) {
if (nums == null) {
return 0;
}

for (int i = 0; i < nums.length; i++) {
if (target <= nums[i]) {
return i;
}
}

return nums.length;
}
}

执行用时: 0ms, 内存消耗: 38.5MB.

ARTS-No.6

1970-01-01 08:00:00

Algorithm

27. 移除元素

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public int removeElement(int[] nums, int val) {
if (nums == null) {
return 0;
}

int insertIndex = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] != val) {
nums[insertIndex] = nums[i];
insertIndex++;
}
}

return insertIndex;
}
}

执行用时: 0ms, 内存消耗: 35.3MB.

修复 wine 微信黑色色块问题

1970-01-01 08:00:00

前言

如果你看不懂标题, 那么恭喜你, 没有遇到这个心烦的问题.

Linux 下使用 wine 微信有一定概率会出现烦人的黑色色块, 看它不爽, 却又无可奈何, 极大地影响了用户体验. 刚好在 github 看到了一个解决方案, 整理记录至此.

环境

编辑本文时笔者电脑的环境是:

  • Ubuntu 19.10
  • deepin-wine-ubuntu 2018-12-ubuntu3
  • deepin-wine-wechat

其他环境请自行举一反三.

ARTS-No.5

1970-01-01 08:00:00

Algorithm

26. 删除排序数组中的重复项

解法一:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length <= 1) {
return nums.length;
}

int scanIndex;
int insertIndex = 1;
int compareIndex = 0;
int length = 1;

for (scanIndex = 1; scanIndex < nums.length; scanIndex++) {
if (nums[scanIndex] != nums[compareIndex]) {
nums[insertIndex] = nums[scanIndex];
insertIndex++;
length++;
compareIndex = scanIndex;
}
}

return length;
}
}

执行用时: 1ms, 内存消耗: 41.5MB.

ARTS-No.4

1970-01-01 08:00:00

Algorithm

1108. IP 地址无效化

  • 解法一:

    直接调用 Java String 的 replaceAll() 方法, 因为该方法内部实现使用了正则匹配, 所以执行效率不高.

    1
    2
    3
    4
    5
    class Solution {
    public String defangIPaddr(String address) {
    return address == null ? null : address.replaceAll("\\.", "[\\.]");
    }
    }

    执行用时: 3ms, 内存消耗: 34.4MB.

wine 应用程序全局快捷键无效的解决方案

1970-01-01 08:00:00

前言

在 Ubuntu 下我们经常会使用 Wine 或者 Crossover 运行 Windows 应用程序. 当应用程序切换到后台时, 是无法响应预设的全局快捷键的. 比如”打开微信”的快捷键 ctrl + alt + w 在这种情况下就无法响应.

我们可以借助一个小工具 xdotool 来解决这个问题.

注:

  • 此方法在 Ubuntu 17, 18, 19 全系列测试通过, 其他平台未作测试, 理论通用;
  • 本文以 “打开微信” 快捷键为例, 其他应用以此类推;

方法

1. 安装 xdotool

直接在命令行运行以下命令即可:

1
sudo apt install --no-install-recommends xdotool

ARTS-No.3

1970-01-01 08:00:00

Algorithm

771. 宝石与石头

  • 解法一:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    class Solution {
    public int numJewelsInStones(String J, String S) {
    int total = 0;
    StringBuffer oldString = new StringBuffer(S), newString = new StringBuffer();
    for (int j = 0; j < J.length(); j++) {
    char current = J.charAt(j);
    for (int s = 0; s < oldString.length(); s++) {
    char stone = oldString.charAt(s);
    if (stone == current) {
    total += 1;
    continue;
    }
    newString.append(stone);
    }
    oldString = new StringBuffer(newString);
    newString = new StringBuffer();
    }

    return total;
    }
    }

    执行用时: 4ms, 内存消耗: 35.7MB.

月刊-201911

1970-01-01 08:00:00

见闻

  • 61岁中国大爷靠“玩”木头火了,网友:简直是宝藏爷爷!

    文章介绍了一位把传统手艺玩成精的木工爷爷. 当擅长和热爱指向一处, 往往能发挥出无穷潜力.

    另, 网络以及自媒体的普及, 确实让真正有才华的人被看见.

  • Java 之父:你至少得会两门语言

    文章介绍了 Java 之父 James Gosling 的传奇经历, 文中有段话我觉得十分优秀:

    你投入到程序中的精力越多,用户使用时遇到麻烦和折腾的精力就会越少,程序员要做的,正是在开发端和用户端之间尽量平衡开发和用户使用的复杂度。

部署 Hexo 博客到 VPS

1970-01-01 08:00:00

前言

Hexo + Github Pages 本是绝顶搭配, 无奈最近国内访问速度越来越慢, 实在不忍直视.

虽说国内也有 Gitee.com 和 Coding.net 提供类似服务, 但都不完全免费, 甚至还有广告, 不在考虑范围之内.

最终只好忍痛买了个云主机, 开启博客搬迁之旅.

ARTS-No.2

1970-01-01 08:00:00

Algorithm

整数反转

题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public int reverse(int x) {
int result = 0;
int temp;
while (x != 0) {
temp = x % 10;

if (result > Integer.MAX_VALUE / 10 || (result == Integer.MAX_VALUE / 10 && Integer.MAX_VALUE - result < temp)) {
return 0;
}

if (result < Integer.MIN_VALUE / 10 || (result == Integer.MIN_VALUE / 10 && Integer.MIN_VALUE - result > temp)) {
return 0;
}

result *= 10;
result += temp;

x = x / 10;
}

return result;
}
}

执行用时: 1ms, 内存消耗: 33.7MB

Windows 软件推荐

1970-01-01 08:00:00

前言

分享一些自己喜欢的 Windows 软件, 希望能够帮助大家提高工作 / 学习效率.

系统安装

这里只介绍我喜欢用的工具, 不作深入探讨.

  • WePE

    简洁纯净的 PE 系统.

  • 系统

    纯净 Windows 镜像.

  • 驱动

    建议到主板官网下载, 不推荐使用 驱动精灵, 驱动人生 等流氓软件.

ARTS-No.1

1970-01-01 08:00:00

Algorithm

Two Sum

  • 解法一: 暴力循环

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class Solution {
    public int[] twoSum(int[] nums, int target) {
    for (int i = 0; i < nums.length - 1; i++) {
    int temp = target - nums[i];
    for (int j = i + 1; j < nums.length; j++) {
    if (nums[j] == temp) {
    return new int[]{i, j};
    }
    }
    }
    return null;
    }
    }

    执行耗时: 17ms, 内存消耗: 37.4MB

月刊-201907

1970-01-01 08:00:00

优秀文章

月刊-201906

1970-01-01 08:00:00

优秀文章

月刊-201904

1970-01-01 08:00:00

优秀文章

月刊-201903

1970-01-01 08:00:00

+

优质文章

  • 为什么Python不用设计模式?

    文章用故事的形式, 幽默诙谐地道明了 python 与 java 的不同之处. 看完之后最大的感悟是: 学设计模式, 一定要透彻理解其精髓, 运用了什么方法, 解决了什么问题. 只有明白了原理, 才能活学活用. 其他知识也是如此.

  • 阿里毕玄现身说法:程序员成长路线

    阿里大神毕玄分享的成长路线, 可以参考.

  • 苹果发布会预示了什么?

    苹果推出订阅式内容服务,而且特别强调,不会根据你的喜好和算法来给你个性化推荐,这其实表明了一种态度,对于有明辨能力的,对于相对高层次的人群,有能力知晓自己感兴趣的点,自己选择优质渠道订阅优质信息,而不用接受平台给你推荐的垃圾爽文,不用沉浸于不用思考就获取的自我满足感,这才是对自我提升有要求,对渴望获取优质信息人群的一种正确方式。

    这才是推荐算法该有的样子.

  • 【CSS】渐变背景(background-image)

    文章很详细地介绍了 CSS 渐变背景的各种知识.

使用 yarn 安装 packages 之后出现 command not found 问题的解决办法

1970-01-01 08:00:00

前言

最近了解到 nodejs 的一款新的包管理器 yarn, 据说相对于 npm 来说有许多优点. 遂果断开启试用流程, 无奈遇到使用 yarn 安装 packages 之后出现 command not found 的问题, 这里写出我自己的解决方法.

解决

  1. 工作环境

    1
    2
    3
    OS: Ubuntu 18.10 x86_64
    Kernel: 4.18.0-16-generic
    Shell: zsh 5.5.1

    非 root 用户登录.

  2. 问题重现

    • 使用 yarn 安装 Angular CLI

      1
      yarn global add @angular/cli

      yarn-gloabl-add-angular-cli

IDEA 下为 Spring Boot 项目开启热部署

1970-01-01 08:00:00

前言

因为最近接触了一丢丢 Spring Boot 下的 Web 开发工作, 每次进行一丢丢改动都要重启项目甚是麻烦. 所以查了一下 IDEA 下 Spring 项目开启热部署的方法, 特此记录, 以便查阅.

修改 pom 文件

  1. 在 dependency 中添加 optional 属性并设置为 true:

    1
    2
    3
    4
    5
    6
    7
     <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    </dependency>
    </dependencies>

月刊-201902

1970-01-01 08:00:00

资源推荐

Java 逐行读取文本文件的几种方式以及效率对比

1970-01-01 08:00:00

前言

上周负责的模块中需要逐行读取文件内容, 写完之后对程序执行效率不太满意, 索性上网查了一下 Java 逐行读取文件内容的各种方法, 并且简单地比对了一下执行效率. 在此记录, 希望能够帮到有需要的人.

注意: 本文比对的项目为 逐行读取文本内容, 并不能代表其他方式的文件读取效率优劣!!!

文末有完整代码.

先放结果

1000000 行文本读取结果比对:

1
2
3
4
5
6
7
8
BufferedReader 耗时: 49ms
Scanner 耗时: 653ms
Apache Commons IO 耗时: 44ms
InputStreamReader 耗时: 191ms
FileInputStream 耗时: 3171ms
BufferedInputStream 耗时: 70ms
FileUtils 耗时: 46ms
Files 耗时: 99ms

巧用 python 随时随地开启 http 服务器

1970-01-01 08:00:00

前言

近来发现 Python 中内置了一个小巧的 HTTP 服务器, 轻微使用的话及其方便. 特撰此文, 作为记录.

方法

  1. 进入到自己想要开启 HTTP 服务器的目录;

  2. 输入对应命令即可:

    1
    2
    # python3
    python -m http.server
    1
    2
    # python3 指定端口
    python -m http.server 8000
    1
    2
    # python2
    python -m SimpleHTTPServer

    此时, HTTP 服务器就启动在本机的 8000 端口了.

月刊-201901

1970-01-01 08:00:00

精选文章

Linux 命令 --- echo

1970-01-01 08:00:00

简介

echo 命令用于在 shell 中打印 shell 变量的值, 或者直接输出指定的字符串.

linux 的 echo 命令在 shell 编程中极为常用, 在终端下打印变量 value 的时候也是常常用到的, 因此有必要了解下 echo 的用法.

月刊-201812

1970-01-01 08:00:00

  • 七大查找算法
    作者详细介绍了顺序查找, 二分查找, 插值查找, 斐波那契查找, 数表查找, 分块查找, 哈希查找 等查找算法.

  • 一些工作娱乐网站推荐
    内容包含图片压缩网站 Squoosh, 视频下载网站 ParseVideo, 公益网站 大象孤儿院, 在线格式转换网站 cloudconvert, 设计网站 dribbble 等.

  • Math is Fun | 数学乐
    科普网站, 生动有趣地介绍了各种理科知识.

  • awesome-mac
    各种非常好用的 Mac 应用程序, 软件以及工具列表.

Linux 命令 --- whereis

1970-01-01 08:00:00

简介

“whereis” 命令常用来定位指令的二进制程序, 源代码文件和 man 手册页相关文件的路径.

“whereis” 命令只能用于程序名的搜索, 而且只搜索二进制文件 (参数 -b), man 说明文件 (参数 -m) 和源代码文件 (参数 -s), 如果省略参数, 则返回上述所有信息.

为 Hexo 主题 next 添加图片背景

1970-01-01 08:00:00

前言

next 主题默认背景是白色, 看多了难免感觉乏味. 我们可以通过自定义样式为其添加背景图片.

操作流程

我们直接在 NEXT 预留的自定义样式文件 “themes/next/source/css/_custom/custom.styl” 中添加自己的样式即可, 在自定义样式文件中写入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 添加背景图片
body {
background: url(https://source.unsplash.com/random/1600x900?wallpapers);
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
background-position: 50% 50%;
}

// 修改主体透明度
.main-inner {
background: #fff;
opacity: 0.8;
}

// 修改菜单栏透明度
.header-inner {
opacity: 0.8;
}

Ubuntu 18.10 开机自动打开数字键盘

1970-01-01 08:00:00

前言

可能是为了照顾程序员? Ubuntu 开机默认是不打开数字键盘的, 本文主要描述如何让 Ubuntu 开机自动打开小键盘.

步骤

  1. 同时按下 “ctrl + alt + T” 打开终端;

  2. 获取 root 权限:

    1
    sudo -i
  3. 允许 gdm 和 X 服务建立连接:

    1
    xhost +SI:localuser:gdm

获取 Linux 登录页面截图

1970-01-01 08:00:00

前言

这两天心血来潮, 想办法美化了自己 Ubuntu 系统的登录界面. 进而找到了获取 Linux 登录页面截图的方法. 这里记录一下流程, 以作日后查验之用.

登录界面

Linux 命令 --- pwd

1970-01-01 08:00:00

简介

pwd 命令全称 “print working directory”, 是 Linux 的基础命令之一, 用来打印当前工作目录.

[转载]循序渐进带你学习时间复杂度和空间复杂度

1970-01-01 08:00:00

前言

我们都知道,对于同一个问题来说,可以有多种解决问题的算法。尽管算法不是唯一的,但是对于问题本身来说相对好的算法还是存在的,这里可能有人会问区

Linux 命令 --- cd

1970-01-01 08:00:00

简介

cd 命令全称 “change directory”, 用于切换当前工作目录, 是 Linux 下最基础的命令之一.

语法

1
cd [path]

其中:

  • [path] 表示目标路径, 可以是相对路径, 也可以是绝对路径.

Linux 命令 --- man

1970-01-01 08:00:00

前言

man 命令可以说是初学 Linux 系统最应该接触的命令了. 使用 man 命令, 你几乎可以查看任何命令的用户手册.

简介

man 命令的全称叫 “manual”, 是 Linux 下的帮助指令, 可用于查看 Linux 中各种指令的帮助信息.