普通视图

Received yesterday — 2026年2月5日

Docker开篇

2022年1月15日 00:00

一、Docker概述

  Docker是一个开源的平台,是基于GO语言实现的开源项目,旨在让应用程序更简单地创建、部署和运行,解决了运行环境和配置问题。它是linux容器技术的落地实现,依赖已经存在的linux环境,实现应用程序及其依赖环境的打包,使得软件可以带着环境安装,一次镜像,处处运行,不受具体操作系统环境的限制。

  Docker官网:https://www.docker.com/

  Docker必须部署在Linux内核的系统上,实质上是在一个运行中的Linux环境上创建了一个隔离的文件环境。

Docker的优点

  • 快速的交付和部署
  • 提高硬件利用率
  • 便捷的升级和扩容缩容
  • 更简单的系统运维

二、Docker和虚拟机

  虚拟机就是带环境安装的一种解决方案,它可以在一种操作系统上面虚拟出硬件后,在上面完整运行另一种操作系统,再从这个操作系统上运行自己的软件,比如在Windows10系统里面运行Linux Centos7,应用程序对此毫无感知,因为虚拟机看起来和真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响,这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间逻辑不变。

  虚拟机存在明显的缺点:资源占用多,冗余步骤多,启动也很慢,因此Linux发展出了另一种虚拟化技术: Linux容器(Linux Containers,缩写LXC),Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件,容器提供的镜像包含了应用的所有依赖项。

  Linux容器不是模拟一个完整的操作系统而是对进程进行了隔离,有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中,容器与虚拟机不同,不需要捆绑一整套操作系统,容器内进程直接运行于宿主机的内核,容器没有自己的内核也没有虚拟的硬件,只需要软件工作所需的库资源和设置。容器之间相互隔离,每个容器有自己的文件系统,容器之间进程不会互相影响,系统因此变得高效轻量。

  总结:Docker是在操作系统层面实现虚拟化,直接复用本地的操作系统,而传统虚拟机则是在硬件层面虚拟化,因此和虚拟机相比,Docker启动更加的快速,占用体积明显减小。

三、Docker的三要素

  • 镜像 (Image)

  镜像是只读的模板,用于创建docker容器,一个镜像可以创建多个容器,相当于一个root文件系统

  • 容器 (Container)

  Docker利用容器独立运行一个或一组应用,容器是一个简易版的Linux运行环境(包括root权限,进程空间,用户空间和网络),以及运行在上面的应用程序,应用程序运行在容器里面,容器相当于一个虚拟化的运行环境,是利用镜像创建的运行实例,镜像是静态的,容器为镜像提供了一个标准的隔离的运行实体,容器可以被启动,开始,停止,删除,每个容器都是相互隔离,保证安全的。

  • 仓库 (Repository)

  Docker公司提供了一个保存各种Docker镜像的仓库,称之为DockerHub,地址: https://hub.docker.com
  还可以根据需要,搭建自己的私有仓库

四、Docker的架构和运行流程

  从其架构和运行流程快来看,Docker是一个C/S模式的架构,后端是一个松耦合架构,众多模块各司其职。

Docker的基本运行流程为:

  1. 用户使用Docker Client与Docker Daemon建立Socket通信,并发送请求给后者。
  2. Docker Daemon作为Docker架构中的主体部分,首先提供Docker Server的功能使其可以接受Docker Client的请求。
  3. Docker Engine执行Docker内部的一些列工作,每一项工作都是以一个Job的形式存在。
  4. Job在运行过程中,当需要镜像时,从Docker Registry中下载镜像,并通过镜像管理驱动Graph driver将下载镜像以graph的形式存储。
  5. 当需要为Docker创建网络环境时,通过网络管理驱动Network driver创建并配置Docker容器网络环境。
  6. 当需要限制Docker容器运行资源或执行用户指令操作时,则通过Exec driver来完成。
  7. Libcontainer是一项独立的容器管理包,Network driver以及Exec driver都是通过Libcontainer来实现具体对容器进行的操作。

五、Docker基础篇

序号文章名概述
1Docker的安装和配置docker的安装及常见的命令
2Docker的离线安装下载二进制文件并注册系统服务
3Docker的镜像操作镜像的一些操作,拉取,搜索,删除等
4Docker的容器操作容器的操作,新建,启动,停止,查看日志和容器内操作等
5Docker容器数据卷实现和宿主机共享文件
6Docker网络docker的4种网络类型以及自定义网络
7Dockerfile使用dockerfile构建镜像
8Docker Composedocker官方的容器编排工具,实现同时部署多个应用
9DockerHubDocker官方提供的全球最大的容器镜像、扩展和插件集合

六、Docker高阶篇

序号文章名概述
1Docker与联合文件系统docker镜像加载原理

参考

1.尚硅谷Docker实战教程,尚硅谷,2022-01-05

Java开篇

2021年12月29日 00:00

栏目持续更新中

一、引言

Java基础是全站的开篇,但是这个系列只会整理Java基础类库的使用和最新特性以及一些底层原理和源码解读,不会赘述JDK的安装配置和面向对象等最基础的内容。

二、Java版本发展

  • 1990年末, Sun公司成立了一个由James Gosling领导的”Green 计划”,准备为下一代智能家电 (如电视机、微波炉、电话)编写一个通用控制系统,在尝试了使用C++和改造C++未果后,决定创造一种全新的语言: Oak
  • 1992年夏,Green计划己经完成了新平台的部分功能,包括Green操作系统、Oak的程序设计语言、类库等
  • 1994年,互联网和浏览器的出现,开发组意识到Oak非常适合于互联网,对Oak进行了小规模的改造运行在浏览器,并更名为Java
  • 1995年初,Sun推出了Java语言
  • 1996年初,发布JDK1.0,这个版本包括两部分: 运行环境(JRE)和开发环境(JDK)
  • 1997年2月,发布JDK1.1,增加了JIT(即时编译)编译器
  • 1998年12月,Sun发布了Java历史上最重要的JDK版本:JDK1.2,伴随JDK1.2一同发布的还有JSP/Servlet、EJB等规范,并将Java分成了J2EE、J2SE和J2ME三个版本
  • 2002年2月,Sun发布了JDK历史上最为成熟的版本: JDK1.4
  • 2004年10月,发布里程式板本:JDK1.5,为突出此版本的重要性,更名为JDK5.0(Java5),同时,Sun将J2EE、J2ME也相应地改名为Java EE和Java ME,增加了诸如泛型、增强的for语句、可变数量的形参、注释 (Annotations)、自动拆箱和装箱等功能
  • 2006年12月,Sun公司发布了JDK1.6(Java6)
  • 2009年4月20日,Oracle宣布将以每股9.5美元的价格收购Sun
  • 2011年,发布JDK1.7(Java7),是Oracle来发布的第一个Java版本,引入了二进制整数、支持字符串的switch语句、菱形语法、多异常捕捉、自动关闭资源的try语句等新特性。
  • 2014年,发布Java8,是继Java5以来变化最大的版本,带来了全新的Lambda表达式、流式编程等大量新特性,具体见:Java8的新特性
  • 2017年9月,发布Java9,提供了超过150项新特性,主要包括模块化系统,jshell交互工具,jdk编译工具,java公共API以及安全增强,而且采用了更高效、更智能的G1垃圾回收器,完全对Java体系进行了改变,让庞大的Java语言更轻量化。从Java9开始,Java版本更迭从特性驱动改为时间驱动,每个版本之间的更迭周期调整为6个月,但是LTS版本的更迭时间为3年。同时将Oracle JDK的原商业特性进行开源。
  • 2018年3月,发布Java10
  • 2018年9月,发布Java11

三、Java核心类库

3.1 JDK基础类库

待续

3.2 数据结构 (Collection,Map,Set)

待续

3.3 输入输出 (IO/NIO)

在Java中,和IO有关的操作封装在java.iojava.nio中,传统IO(java.io)是以流的形式实现输入输出操作的,还有基于通道和缓冲区的NIO(java.nio

I/O操作,有阻塞和非阻塞之分:

  • 阻塞:发起读取数据的线程是被阻塞的
  • 非阻塞:发起读取数据的线程不被阻塞,直接返回

也有同步和异步之分:

  • 同步:数据读取完成后,直接在接收到数据的线程上,紧接着进行拷贝操作
  • 异步:数据读取完成后,通过一个回调函数,在新的线程处理数据的拷贝

阻塞非阻塞和同步异步,描述的阶段和描述的事情是不同的,因此可以自由组合,Java语言将其组合为分为BIO,NIO,和AIO三种不同的IO,与Linux的IO模型(详见:浅谈Linux(Unix)的I/O模型)对应的话,BIO对应的是Blocking I/O

  • BIO

    同步的,阻塞的IO,位于java.io包下,是Java的传统IO,基于流,IO流的分类方式有很多,按照方向分为输入流和输出流,按照数据传输单位又能分为字节流和字符流

  • NIO

    同步的,非阻塞的IO,位于java.nio包下

  • AIO

    异步的,非阻塞的IO,也位于java.nio包下

3.4 网络 (Socket)

3.5 线程 (Thread)

本部分主要讲述了使用Java语言来实现多线程的程序,包括线程的创建方式,线程基本方法的使用,多线程操作共享数据导致的安全问题以及死锁现象的原因和避免死锁,多线程运行过程中的协作和通信机制以及调用各种线程的方法时线程状态和生命周期的改变等。

序号文章名概述
1Java的线程和常见方法进程和线程,并发和并行,线程的创建和常见方法
2Java线程安全和同步机制多线程导致的问题,线程的同步机制,死锁
3Java线程间的通信机制线程的通信,等待唤醒机制wait/notify
4Java线程的状态不同线程状态之间的转换过程
5volatile作用分析volatile关键字的作用,可见性、原子性和重排序

3.6 并发编程 (JUC)

JUC就是Java在并发编程中使用的工具包java.util.concurrent的简称,包括java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks等,起始于JDK1.5,是Java语言中增强版的多线程和高并发工具,拥有更加强大的多线程实现,本章内容会介绍些JUC中常用的并发编程工具类及其实现原理,需要在理解了第3.5小节的线程一章的基础上学习

主要涉及:

  • 锁,可重入锁,公平/非公平锁java.util.concurrent.locks.Lockjava.util.concurrent.locks.Condition
  • 读写锁相关java.util.concurrent.locks.ReadWriteLock
  • 异步计算 java.util.concurrent.CompletableFuturejava.util.concurrent.FutureTaskjava.util.concurrent.Callable
  • 阻塞队列 java.util.concurrent.BlockingQueue
  • 线程池 java.util.concurrent.ExecutorService
  • 任务拆分合并工具 java.util.concurrent.ForkJoinPooljava.util.concurrent.ForkJoinTask
  • 线程安全容器 java.util.concurrent.CopyOnWriteArrayListjava.util.concurrent.ConcurrentHashMapjava.util.concurrent.CopyOnWriteArraySet
  • 并发控制工具 java.util.concurrent.CountDownLatchjava.util.concurrent.CyclicBarrierjava.util.concurrent.Semaphore
  • 各种原子类,例如java.util.concurrent.atomic.AtomicIntegerjava.util.concurrent.atomic.AtomicReference
  • 多线程编程的一些问题:缓存行对齐、锁的粗化,消除等

3.7 反射 (Reflect)

待续

3.8 JDK其他工具和类

序号文章名概述
1Java实现LDAP登录使用Java与LDAP进行交互

四、Java的设计模式

序号文章名概述
1Java单例Java中单例模式的几种实现形式

五、参考

  1. 《疯狂Java讲义》,作者:李刚,电子工业出版社,2018年1月
  2. 《深入理解Java核心技术》,作者:张洪亮,电子工业出版社,2022年5月
  3. 《Effective Java》,作者:Joshua Bloch,机械工业出版社,2009年1月

MySQL开篇

2021年12月29日 00:00

栏目持续更新中

一、MySQL概述

MySQL数据库由瑞典MySQL AB公司开发。公司名中的”AB”是瑞典语”aktie bolag”股份公司的首字母缩写。该公司于2008年1月16日被SUN公司收购,2009年,SUN公司又被Oracle收购。因此,MySQL数据库现在属于Oracle公司。MySQL中的”My”是其作者Michael Widenius根据其大女儿My的名字来命名的。

本文系MySQL系列的开篇,主要基于MySQL8并部分结合5.7,主要介绍SQL语句和语法、MySQL的数据库对象、架构和性能调优以及一些高级特性的运用和原理等。

二、MySQL的优势

  • 可移植性

    MySQL数据库几乎支持所有的操作系统,如Linux、Solaris、FreeBSD、Mac和Windows。

  • 免费

    MySQL的社区版完全免费,一般中小型网站的开发都选择MySQL作为网站数据库。

  • 开源

    2000年,MySQL公布了自己的源代码,并采用GPL许可协议正式进入开源的世界。开源意味着可以让更多人审阅和贡献源代码,可以吸纳更多优秀人才的代码成果。

  • 关系型数据库

    MySQL可以利用标准SQL语法进行查询和操作。

  • 速度快、体积小、容易使用

    与其他大型数据库的设置和管理相比,其复杂程度较低,易于学习。MySQL的早期版本(主要使用的是MYISAM引擎)在高并发下显得有些力不从心,随着版本的升级优化(主要使用的是InnoDB引擎),在实践中也证明了高压力下的可用性。从2009年开始,阿里的”去IOE”备受关注,淘宝DBA团队再次从Oracle转向MySQL,其他使用MySQL数据库的公司还有Facebook、Twitter、YouTube、百度、腾讯、去哪儿等,自此,MySQL在市场上占据了很大的份额。

  • 安全性和连接性

    十分灵活和安全的权限和密码系统,允许基于主机的验证。当连接到服务器时,所有的密码传输均采用加密形式,从而保证了密码安全。因为MySQL是网络化的,所以可以在互联网上的任何地方访问,提高数据共享的效率。

  • 丰富的接口

    提供了用于C、C++、Java、PHP、Python、Ruby、Eiffel、Perl等语言的API。

  • 灵活

    MySQL并不完美,但是却足够灵活,能够适应高要求的环境。同时,MySQL既可以嵌入应用程序中,也可以支持数据仓库、内容索引和部署软件、高可用的冗余系统、在线事务处理系统等各种应用类型。

  • 存储引擎架构

    MySQL最重要、最与众不同的特性是它的存储引擎架构,这种架构的设计将查询处理及其他系统任务和数据的存储/提取相分离。这种处理和存储分离的设计可以在使用时根据性能、特性,以及其他需求来选择数据存储的方式。MySQL中同一个数据库,不同的表格可以选择不同的存储引擎。其中使用最多的是InnoDB和MyISAM,MySQL5.5之后InnoDB是默认的存储引擎。

三、MySQL的版本

针对不同用户,MySQL提供了3个不同的版本。

  • MySQL Enterprise Server (企业版)

    能够以更高的性价比为企业提供数据仓库应用,该版本需要付费使用,官方提供电话技术支持。

  • MySQL Cluster (集群版)

    MySQL集群版是MySQL适合于分布式计算环境的高可用、高冗余版本。它采用了NDB Cluster存储引擎,允许在1个集群中运行多个MySQL服务器。它不能单独使用,需要在社区版或企业版基础上使用,集群版是免费的,但是高级集群版MySQL Cluster CGE需要付费。

  • MySQL Community Server (社区版)

    在开源GPL许可证之下可以自由地使用。该版本完全免费,但是官方不提供技术支持。本书是基于社区版讲解和演示的。在MySQL社区版开发过程中,同时存在多个发布系列,每个发布系列处在不同的成熟阶段。

MySQL 5.7(RC)是当前稳定的发布系列。RC版(Release Candidate 候选版本)只针对严重漏洞修复和安全修复重新发布,没有增加会影响该系列的重要功能。从MySQL 5.0、5.1、5.5、5.6直到5.7都基于5这个大版本,升级的小版本。5.0版本中加入了存储过程、服务器端游标、触发器、视图、分布式事务、查询优化器的显著改进,以及其他的一些特性。这也为MySQL 5.0之后的版本迈向高性能数据库的发展奠定了基础。

MySQL 8.0.26(GA)是最新开发的稳定发布系列。GA(General Availability 正式发布的版本)是包含新功能的正式发布版本。这个版本是MySQL数据库又一个新时代的开始。

四、MySQL基础篇

使用MySQL前需要进行安装,并进行简单配置(修改字符集,打开远程连接等),为了更加贴合实际应用场景,本章关于MySQL的一切,无特殊说明的,都基于运行在Linux系统环境上的MySQL。

Linux系统安装MySQL,最简单的方式就是采用rpm包安装,这里我采用常用的CentOS7环境来安装MySQL用于后续学习测试,具体步骤见:

除了rpm包安装,还可以通过自行编译源码的方式安装MySQL,因为CentOS7逐步不再更新,因此这里我尝试基于另一个RHEL系的Linux发行版RockyLinux9的环境来编译安装,具体步骤见:

MySQL的基础部分,主要包括以下内容:

SQL语言,数据类型、约束、DDL/DML语句以及SELECT语句等

序号文章名概述
1MySQL数据定义语言DDL语句以及数据类型
2MySQL插入修改和删除数据的添加和更新,DML语句
3MySQL查询数据的查询,SELECT语句,JOIN查询
4MySQL事务事务的特性,隔离级别,TCL语句

一些基础的数据库对象(视图、存储过程、函数、触发器、变量等)的使用

序号文章名概述
1MySQL函数常见函数使用和自定义函数
2MySQL存储过程存储过程的定义和调用
3MySQL视图视图创建、修改和使用
4MySQL变量用户变量和系统变量,变量的查询和设置

五、MySQL高级篇

本博客MySQL高级部分的内容,侧重点是后端开发中怎样写出更高性能的SQL,基本不会深入到DBA领域。

内容包括MySQL的字符集,语法模式,用户和权限DCL语句,MySQL架构和执行流程,索引和索引优化,锁机制,事务和日志以及主从复制等。

序号文章名概述
1MySQL字符集及底层原理基于MySQL5.7解读MySQL字符集和排序实现原理
2MySQL5.7x的主从复制负载均衡、备份和高可用性

结束语

更多MySQL相关的内容,可以查阅官方文档:

参考

  1. 《剑指MySQL 8.0:入门、精练与实战》,作者:尚硅谷教育,电子工业出版社,2023年2月
  2. 《高性能MySQL(第三版)》,作者:Baron Schwartz、Peter Zaitsev、Vadim Tkachenko,电子工业出版社,2013年5月
  3. MySQL数据库入门到大牛,作者:尚硅谷,哔哩哔哩,2021-11-17
Received before yesterday

老同学被优化了

作者Hary
2026年2月3日 20:33

 中午回来吃饭正吃的香呢,老同学发来了个微信,说他被优化了,赶紧扒拉扒拉吃完饭,给他去了个电话问了下啥情况。

 我们是大学同一个宿舍的室友,毕业之后我基本上无缝衔接,去了上海待了两年,然后就来了合肥,他是毕业之后先在他们本地那边待了两年,然后报培训班学习考了个行业内高级证书,应该是23年的时候他入职了郑州那边,我们算是干的一样的工作,一直干到现在,虽然是背靠大厂,但是也从去年11月12月份开始,新出了各种规则,取消加班工时调休和超额加班费,各种降本增效,其中有一项就是人员配置优化,我们这暂时还是一个萝卜一个坑,大刀可能还没砍到头上,今天他给我发消息,我才意识到,要开始了,不知道什么时候优化到我们这里。
 我这老同学那边据他描述,已知的就暂时通知了他自己,让干到三月底,还有一些老资历员工都没被优化,他说别人干的他不一定能搞下来,但是他做的事情别人能接住,所以被优化的只能是他,唉,想想他去年6月份才结的婚,这刚结婚半年结果工作没了,也是比较难顶。
 如今各行业都是比较难过,也别想太大了,现在能有个相对稳定的工作已经很难得了,老家一些在外面打工的也是老早就回家过年了,外面一些厂子里面也是活不多,早早就放假了。

没有被看见的斩杀线,其实就在身边

作者崔话记
2026年2月2日 19:47

  美国的斩杀线,最近被讨论的足够多,但状况却是多年前持续到现在的,只是以前大家都被别人的滤镜或自己有意无意的滤镜给骗了而已。如今没什么人讨论我国的斩杀线,也并不意味着我国没有斩杀线,如果到全民讨论的那一天,那可能就是已经严重到万劫不复了。也可能这种负能量天生和国内的网络媒体环境不符,发出来没什么好处,或者发不出来。

  我不去分析那些大数据,就凭自己的亲身经历以及道听途说,说说我所感受的斩杀线。

  斩杀线不是说非得把一个人弄死才叫斩杀,而是一种重大的生活水平坠落,而且可见的时间内没有恢复的可能。

斩杀线1: 医疗

  国内的斩杀线,首当其冲是医疗。大家都说美国的天价医疗费,但是中国的情况虽然不同但也有特定情况下的天价医疗费,而且中国人传统上的重情重义,导致一个人的病情拖垮全家三代人的生活的例子也不鲜见。

  解放前的中国人,得了重病的情况下大部分和在家等死差不多,叫个郎中过来开几副药,能不能吃好就看命了。比如我母亲有时候也会说,她要是得了要花几十万去看的病,那她就自己跳到河里死了算了。最近几十年,中国人的经济和生活水平坐了火箭一样的提升,人渐渐都开始惜命了。

  我们每个人一定都见过朋友圈里的水滴筹、轻松筹等等,那可能就是一个个的斩杀线的案例,如果他们筹到了除掉筹款中介和平台的抽成之后还足够用的医疗费,那他们还算好的了。还有那些没有去公众筹款的人呢,大家看不见。在知乎上,我见过好几个网友现身说法,家里的一个老人病重,还没到八九十那种离上帝很近的老,可能在退休线附近的,年轻不算年轻,老又不算太老,家人肯定是不舍得放弃的。如果放弃,不仅有情感上的不舍,也有道德负罪感,而且就算某个人的心里有放弃的想法,也必然不敢先说出来,谁也不愿意也不敢先当这个坏人,结局基本上只有一个,那就是花光所有的积蓄,可能再卖房卖车或借钱,到最后再也拿不出钱来了为止。

  以前有一个同事,是家里的独生子,好大学毕业,进了外企,光鲜亮丽。一场癌症袭来,就掏空了一切。住院两年期间,公司仍然足额发工资,还给了几十万补助金,同事捐款也有几十万,他自己家里也从小康之家变得一无所有,卖了房,借了债。最终的结果,天不遂人愿,他还是没能撑过去。他算是解脱了,他父母没了半分养老钱,还要赚钱还债。可能我们作为外人,会觉得不应该这么不计代价,但没有谁能够算明白代价到底应该到哪一步是刚刚好。

  重病对普通人就是不留情面的。当一个家庭从富余突然变得穷困,引发的副作用远比贫困本身更大,可能是抗风险能力的归零,锐意进取的心态崩溃,夫妻感情与亲子关系的破裂等等。站在事后诸葛或上帝视角,我们或许能够对他人的境遇留有一丝客观,发生到自己头上的时候,就不是那么回事了。

  我个人可能是更偏向残酷的理想主义者,我偏向于国家免费治疗,并且禁止家庭超出收入能力的医疗支出,比如说国家兜底100万的治疗额度,家庭可以动用50%资产用于自费医疗,就算家庭想投入更多钱治疗也被法律禁止。法律一方面是要尽可能照顾更多人,另一方面也通过明确规则解除家庭成员放弃治疗的道德负担。这个数字我是随口一说,不用较真,意思是那么个意思。

斩杀线2: 超前消费

  除了医疗,还有一个斩杀线,就是超前消费。现在已经挺严重,但正在变得更严重。

  第一波,是上杠杆买房的人,碰上经济放缓的大环境。极度的乐观,到极度的悲观,只隔了短短数年。这些人之中,绝大多数并不是炒房客,只是憧憬美好生活的普通人,当收入降低,还贷压力很可能会让一个家庭喘不过气来,甚至再也没有翻身的机会,因为你后续赚的每一分钱都第一时间要去还贷而不能用于继续投资,不论是投资创业还是个人成长。

  第二波,是超前消费贷的人。现在即使不买房,也有很多人习惯了超前消费,各种消费贷让人应接不暇唾手可得,越来越常听见刚从学校毕业没多久的年轻人就欠了大几万甚至几十万网贷的事情了。一部分年轻人,正在从上一辈的极尽节俭,走向另一个极端,掉进资本编织的消费陷阱。解决方案是什么,不知道,低消费躺平肯定不是。

自省

  就我自己而言,也是属于上杠杆买房的人,多方面的原因买了学区房,现在也是负担比较重的,虽说有些资产但是没什么活钱,如果有个什么意外,那这一切都是镜花水月,一夜归零。为了对抗这些意外,就买了较高的保险,而保险费反过来又增加了负担。现在,银行的贷款,就是我的斩杀线吧。

  所以,能怎么办呢?调整心态,生死面前都是小事。

  开心享受美好生活,好好对待身边的人,现在的日子可能是最好的。

Python的数据结构

2026年1月1日 00:00

未完待续

【新年开篇】让我们拿出跃马扬鞭的勇气,激发万马奔腾的活力,保持马不停蹄的干劲,一起为梦想奋斗、为幸福打拼,把宏伟愿景变成美好现实。

1.概述

在Python中,有四种常见的数据结构

数据结构是否可变是否允许重复是否有序定义符号
列表(List)可变允许有序[]
元组(Tuple)不可变允许有序()
字典(Dict)可变键不允许,值允许有序{}
集合(Set)可变不允许无序{}

2.列表(List)

列表是一种有序的数据结构,元素写在[]中间,用,隔开通过下标访问。

列表创建有三种,直接创建,通过list()方法,以及推导式。

列表的特点:

  • 可以被索引(从左到右和从右到左)和切片(substring)
  • 可以使用+操作符进行拼接
  • 列表中的元素是可变的
  • 元素可以是任意类型
  • 元素允许重复

2.1 创建,索引和切片

#直接创建list1 = [1,2,3,4,5]list2 = ['abc', 2, 1.55]# 索引 => 1print(list1[0])# 第2到第4的元素,不含第4个 => [2, 3]print(list1[1:3])# 从第3个元素开始到末尾 => [3, 4, 5]print(list1[2:])# list1复制成两份拼接一起 => [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]print(list1 * 2)# 拼接 => [1, 2, 3, 4, 5, 'abc', 2, 1.55]print(list1 + list2)

Python列表可以倒序索引,且元素可变

list1[-1] = 100print(list1[-1]) #100

python可以用list()方法创建一个空的集合

empty_list = list()print(empty_list)

list()方法从字符串创建数组

s = 'hello'l = list(s)print(l) #['h', 'e', 'l', 'l', 'o']

3.元组(Tuple)

4.字典(Dict)

5.集合(Set)

推荐一位朋友编写的益智小游戏:横冲直撞

作者崔话记
2026年1月29日 18:47

  “横冲直撞”,是朋友皮卡丘编写的益智小游戏,挺久之前的作品了,最近跟他又聊到这个游戏,把链接收录到了我的站点上,这里做个小小的推荐。

横冲直撞

  玩法比较经典了,应该有人玩过类似的,只需要让小精灵在棋盘格内上下左右的滑动(键盘方向键、鼠标或触摸滑动),借助各种道具(石头、弹板、井盖、木桶等),最终滑动到目标格(梯子标记的格子)。

  游戏功能做的挺完善的,支持各种设备,有玩法介绍,历史记录,自带300个关卡,还能够根据自选难度生成随机谜题,解不出来的难题还可以使用自动提示功能。

  点击上面的图片或者这里就可以开始玩了。

  这里搭个便车推荐一下自己的小游戏。最近把本站的Games页面更新了一下,带上了缩略图和一句话简介,页面上列出了13个自编小游戏,有兴趣的朋友可以移步Games页面瞅瞅。

宽带改公网投诉小记

作者Hary
2026年1月29日 18:20

 老家的两条联通宽带安装的时候就是装的PPPOE公网的,本来家里有网络摄像头做的有DDNS映射,非标端口外面可以直接访问,前几天发现不行了,从联通APP里面查光猫看了下,竟然私自给我改成NAT私网了,小联通竟然在用户毫不知情的情况下私自变更用户业务类型。
 前天晚上越想越气,搞的晚上都没睡好觉,脑海里一直在想第二天怎么怎么投诉,说什么硬气的话。上周三还有个营业厅的固话给我打电话问我最近宽带用的怎么样,我也没多想,纯粹支持他们工作,就给了好评,现在回过来想想,搞不好就是他们私自改了,然后做下回访,看用户有没有感知呢。
 昨天上午一直在忙,中午得空直接打了10010客服进行投诉,倒也算处理的积极,一会省投诉中心,一会市投诉中心,一下午接了几个电话,又挨个给他们解释一边投诉原因,我就说我安装的是公网,为什么在用户不知情的情况下给我改成私网,现在搞的在外地看老家摄像头都延迟很大,挂机游戏老掉线(编的,不打游戏),一路转派投诉单,最后给派到了乡镇营业厅。
 早上营业厅人员给我打电话,还给我说了一顿,她问我,你知道什么是公网吗,只有企业,医院这种才是公网,家里面的都是私网,。。。我寻思我天天搞这些,我不知道我还能投诉到这??还说她干了15年了,也没听说过宽带搞公网的,我让她不知道就给我往上报,找技术支撑去问,也就不到一个小时,就有市公司的技术人员给我打电话,说私网改公网改好了,让我重启光猫试一下,我远程重启了一把,终于又恢复了公网。


 我在想肯定是后台做什么改造,或者批量回收公网的操作,如果用户不投诉,改了就改了,有投诉再改回来,真是让人恼火,以后还想着有公网IP可以搞点家里云自己用呢,这指定是不能再给我改了。

关于程序员高广辉猝死所想到的

作者崔话记
2026年1月28日 20:52

  程序员高广辉猝死的新闻,是上周听说的。当时听说这事,在我内心并没有很大的波澜,这样的事情也听说过多次了。

  程序员可能未必是比其他职业更容易猝死,应该所有高强度工作都有这样的危险。但程序员群体之间产生的交集会更多,会在网上探讨技术问题,共享技术成果,所以同行之间的距离感比较近,同行猝死的冲击就比较大。程序员的工作非常讲究时效性,在线服务出问题了往往要第一时间解决,不论大厂小厂,加班往往是常态。

  以前看过的一个剧《凡人歌》,里面的男主的弟弟那隽就是程序员,也是非常真实的复现了程序员加班的场景,公司里有人被救护车拉走,他自己也一度出现短暂失聪。可笑的是,剧中公司厕所安装计时器的桥段,在现实中也是存在的,新闻能搜到一大把。

  就我自己而言,熬夜也是经常,写代码或者解决技术问题有时候是工作需要,有时候是兴趣使然,反正不会感到烦躁厌倦,但是累是真的会累,有时候熬的太晚了第二天睡到中午。在家的时候,夜深人静的环境,脑子更加能够专注,时间就会不知不觉的流逝几个小时。

  看网上晒出的高广辉和妻子的微信聊天记录,我感觉也挺离谱,每隔几天一次对话,每次的对话几乎都仅有妻子催他回家而无其他内容,他多数也并不回复,或者只是短短回复“要晚点”之类。

高广辉和妻子的微信聊天记录

  这样的人是不正常的,不仅仅是没有生活,甚至是几乎没有人类情感了,实在无法理解。有没有可能他在和妻子面对面的时候是正常人类情感呢?我认为可能性不大。一个人的性格,往往是贯穿其行为的。

  我不理解那些通宵达旦打麻将的人,觉得他们比加班还累,为什么他们自己乐此不疲呢,即使从生理方面来说他们真的很累,但他们的大脑就像是磕了兴奋剂。这样的适当娱乐我是喜欢的,但是那么累的娱乐我是干不下去的。

  看高广辉的github issues里面好多人发“R.I.P”,不明所以,网上查了一下,才知道是英文“Rest in Peace”的缩写,意为逝者安息的意思,学到了。但我想说,咱能别那么省事吗?

  最后希望所有努力养家糊口的牛马们,合理安排工作,多一点自己的生活,祝身体健康!

身份证到期更换

作者Hary
2026年1月25日 21:00

 25年应该有很多人的身份证到期吧,我应该算是赶到了末尾,目前在用的是截止到2026年2月23日到期,还剩下不到一个月的时间了,说是提前两三个月就可以申请办理了,我这本来也没着急,一个月前应该就有各种APP和短信给我推送发消息说身份证即将到期让及时更新,否则影响相关服务的,这周五公司也找过来了,让传新的证件信息,哈哈,我还没办啊。
 其实在两周前就在皖事通上申请了,预约的今天去办理,预约的时候按照提示说是可以自己拍照上传,审核通过后可以直接用自己拍的照片,上周得空让同事帮忙拍个大头照,准备去上传呢,结果提示我非安徽户籍,我申请的时候怎么不提示啊,还引导我可以提前拍照,白期待了,还是等到今天乖乖去线下办理。
 预约的我们这最近的蜀山区政务中心,上午九点过去的,骑车十几分钟,到那问了下工作人员,也挺简单的,基本上去办事的大部分都是办理身份证业务的,人倒也不多,就先排队拍照,也没让看一眼,拍完照接着取号等着窗口喊号办理,等了有两分钟吧,就喊号了,看来人是真的不多,到了办理窗口也就确认一下信息,然后录取指纹,说是做信息比对,确认一下是本人,然后让我看了一眼拍的照片,让我确认一下是不是,就看了一下侧着的电脑屏幕,不说了,真的不是很好看,自己拍出来也不是这样啊,看到时候拿到证是什么效果吧,确认好信息之后让付了20块钱的办理费用,整个过程不到五分钟。
 业务人员说是20天后过来取,我媳妇之前是六七月份吧,来办理的说是可以邮寄,好像是一周多就寄过来了,我也去问了一下办理了邮寄业务,是邮政承办的,扫码把办理的业务号进去,填好收件地址,又付了12块钱的邮寄费用。
 整个过程还是比较顺利,本来以为周末人会多的,结果不到半个小时就搞定了,我这是第三个身份证了,第一次是5年,第二次是10年,这次办理的应该是该20年有效期了,记得10年前办理第二张的时候还要回老家户籍地派出所办理,现在整的是挺方便,跨省也可以直接办理,期待新证,希望不要太丑。。
1月31日更新:
 25号上午去办理,31号上午收到证件,快递送货上门,不得不说还挺快,这次是20年有效期,照片还行,看得过去,除了双下巴有点明显,不过也是真实情况,哈哈。

服务器廉价续费迁移教程

作者鸦鸦
2026年1月24日 21:24

优惠价格结束的这一天终究还是到来了,打开一看续费价格飙到一千多了,这哪受得了!

但是兜兜转转发现阿里云又有别的廉价套餐了,99一年,不知道能续费多久,先上车再说~

传送门:云小站_专享特惠_云产品推荐-阿里云

新购的服务器是ECS,地域选了华东1杭州,旧的服务器是轻量应用服务器,地域在华东2上海,这就涉及到跨域跨产品类型迁移,就得老老实实转移文件了。

服务器迁移至少应该有三种方式:

第一种是系统盘层级的快照,相当于直接把系统盘搬家。

第二种是宝塔面板内部的一键迁移方式,大概是宝塔面板重新下载安装到新服务器再帮你自动复制文件。

第三种是网站级别的备份还原,手动把wordpress数据库和文件夹搬过去。

如果运行了不止一个网站,那肯定是快照最彻底了。我用的就是阿里云的磁盘快照功能,然后创建镜像,再共享到ECS,再从华东2上海复制到华东1杭州,这样就得到了一个在华东1杭州的镜像了。

接下来购买服务器的时候直接选自定义镜像,列表里就有我们刚创建的镜像了。实例启动后数据盘就完全搬过来了。如果你先买了服务器,后创建的快照,不要慌,问题不大,也有办法重装系统。在ECS实例里面,点击“资源变配-镜像操作-更换操作系统”就可以选到你的自定义镜像重装,好像会给你直接换个数据盘来安装。

这个时候输入新的公网IP,应该是能直接进入wordpress。但是还有两个操作别忘了:防火墙的端口设置也要照搬过来,否则宝塔面板是进不去的;还有域名解析也要更改到新的公网IP。

最后PING域名,成功解析到新IP,并且打开网站一切正常,搬家结束。

至于为什么偏爱杭州,我最近是真的被杭州的地理条件迷住了,我宣布它是我的梦中情乡,至少在自然环境上,是优于上海的,毕竟钱塘江和西湖群山真的太美了。

已经把杭州地图挂墙上了。每天看几眼就又想努力了。

这是从一个博主那要来的杭州高清地图,可惜水的颜色太寡淡了,试了颜色替换,准确度不是很好。也许以后会重新折腾ArcGIS吧。这个色号是我精挑细选了上千年的结果:#81c5d2

本文发表于鸦鸦的巢穴,感谢您的订阅!如需评论请前往服务器廉价续费迁移教程

姥姥和奶奶

作者Hary
2026年1月23日 20:09

 前几天老家下了大雪,从家里监控看到在下雪的第二天妈妈把姥姥接过来了,说是接过来住几天,难得妈妈在家这么长时间,临近春节了,也是想和她的妈妈待一起照顾几天吧。
 今天看到姥姥和奶奶在院子里面晒太阳,挺温暖的一幕,他们俩的日常生活轨迹完全不同的,也难得待在一起晒太阳。

 姥姥是胖胖的,好几年前还因为胆的问题做过两次手术,也就导致平常也不能干重活,走路干啥的都慢慢的,平常也就待在我的三舅家的小卖部帮忙照看一下,记得我小的时候就喜欢去姥姥家,那时候还是姥爷开的有间小卖铺,就喜欢去里面拿些小玩具啥的,每到春节还都能得到姥姥姥爷给的一把“枪”,那时候有一把玩具枪别提有多开心了,但是我的姥爷好像就停留在了那时候的某一年,就剩下我姥姥一个人了,应该都有快二十年了,我记得姥姥一直是这个样子,一直都是不紧不慢的,也可能是身体原因吧,反正每次有机会回老家都会回去看看姥姥。
 奶奶就不一样了,同样都是七十几岁的人,奶奶还是干劲十足,现在家里都是各种各样的农活,给人家扒红薯、种蒜、种辣椒、摘辣椒、电商打包、打玉米等等,真是啥活都干,一天有时候挣个三四十,有时候整个一百多,比人家年轻人都能干,尽管家里人都各种劝说,不要出去干活了,不要出去干活了,但是没一个人说的动,只要有活,别人打电话给她,肯定去。我的爷爷也是在我订婚的那一年走了,每次回家都盼望着能看到孙媳妇,如果再坚持半个月也就能看见了,最后还是没等到,爷爷的时间也就停留在了22年的春节,好像就是自从那之后,正好也是家里流行起来了日结干农活,专门找家里的老头老太太干些农活,管饭还给钱,也就很多人可以去,奶奶就经常出去干活,我想着,也可能是她自己一个人待在家无聊吧,出去干活好歹能多几个人唠唠嗑,反正各有利弊吧,有啥轻活重活都去干,最后再给身体累出病来还是不划算。
 树欲静而风不止,子欲养而亲不待,如果能有空还是抽出时间陪陪家里人,不要说真等百年之后再去后悔,那其实没有任何意义的,就算陪家里人在太阳底下晒暖,那也无疑不是一种尽孝。

溜冰场内年龄最大、技术最差、但最勇敢的人

作者崔话记
2026年1月21日 22:01

  周末跟女儿去滑冰了,离上次去滑冰,有近一个月了。滑冰场在商城里面,地铁直达,很是方便。来滑冰的多数是小朋友,看起来四五岁的都不少,还有少部分年轻人和滑冰教练。环视全场,我这个年龄的,恐怕就没有第二人了,跟我年龄接近的都在场边的家长休息区。我是抱着借机运动一下、来都来了、重在参与的思想下的场。

滑冰场

  这次刚进场的时候,我感到明显生疏了,只能挨着边上慢速的滑,滑一段就要扶着旁边的栏杆停下来,转弯和减速都不会了。滑了半个小时后,才找到一点平衡感了,不过也轻微摔了两次。我是全场技术最差的人之一了,看别人各种花式动作那么溜,真是佩服。休息了十分钟之后,又滑了半个小时,出了一身汗。运动完就在旁边的食通天吃午饭,等餐的时候女儿拿餐巾纸折了个千纸鹤。

午餐

千纸鹤

  女儿并不热衷于运动,虽然也愿意在家长的带动下出来运动,但如果给她自由选,她肯定选宅在家里做作业或者打游戏。爬山、打球、滑冰等等,我就只能以身入局了哈哈。珍惜现在的机会吧,随着她的长大,我的老去,这将越来越难得。

  当天没啥感觉,到周一的时候开始觉得大腿酸,周二也还腿酸,到周三才消失。平时我这胳膊腿的运动量确实太少了,希望今年加强一下。

年会没中奖,是不是等于没参加年会?

作者崔话记
2026年1月20日 20:12

  公司年会已经过去十来天了,现在来回忆一下。

  这两年的年会,公司都是租的会展中心的场馆,弄的恢弘大气。对我个人来说,最大的区别是,去年身体不好心情不好,今年身体好心情也好。最大的共同点是,我都没有中奖!每年上千个抽奖名额,我连续两年没中,那只能理解为幸运点数都用在别的地方去了吧。

  随着年龄的增长,对待年会的心态也产生了很大的变化。今年的年会当天直到中午,我都没意识到当天是年会时间,脑子里以为是下周,后来偶然的看了一眼企业微信才知道。

  刚工作的头几年在小公司的时候,并没有年会,遇到抠门的老板连个聚餐都没有。后来去了稍微大一点的公司,虽然没有年会,但是会有尾牙宴,也是其乐融融。去杭州工作的时候,是大一点的外企,也有了比较正式的年会,会有歌舞节目,会在酒店聚餐,会抽奖,会为同事的节目表演嗨起来喊,会被年会上讲话的人感动。

  现在公司规模不小,每年的年会也规模不小,两千多人的大厅,热闹非凡。大领导们意气风发豪言壮语,美女帅哥们歌舞升平。前几年我还觉得要去吃饱喝足的,这几年对年会上大同小异的餐食也没多大兴趣了,最期待的恐怕就是那个抽奖环节了,可能是因为凭运气取得的收获更能让普通人兴奋吧。哪怕一年里发生了再多不愉快的事情,只要年会幸运中奖,就会觉得这一年是以大幸运完美结束的。而没有中奖,就多少感到遗憾的,这就是我的小格局哈哈,格局大的都在台上给大家抽奖。

  几年前的我,在年会抽奖节目的时候,脑袋里想的是这个抽奖程序应该如何实现更好,需要考虑哪些关键点,如何更好的互动抽奖等等。现在的我,已经不会再去多思考这些了。我看其他同事也很直接,当一等奖的名单完全揭晓之后,大家就开始起身离席了,哪怕服务员的菜还没上完,哪怕舞台上还有人讲话或表演。今年年会的菜品味道真是退步了,炒面还有没炒熟的,但那么大的量,恐怕也确实是没办法做好。

  顺路吐槽一下年会的“小品”表演,每年都是可劲的霍霍四大名著或者白娘子法海,穿越搞笑,其实我对这种节目是一丁点儿兴趣都没有,感觉过于低俗搞笑了而且还并不太好笑。歌舞节目是我最喜爱的,每年都能见到几个虽不认识但已脸熟的面孔,她们的舞蹈也许比专业的差的远,但已经足够展示出热情与美丽了。现在的孩子们,在多才多艺这方面,真是比我这辈强太多了。

年会

  2025 已归档,2026 已新建文件夹。

给博客所有图片加个水印

作者Hary
2026年1月18日 16:37

 此方法为又拍云存储+腾讯云EdgeOne的组合,实现免费10G存储+无限流量的图片外链,理论上适用于所有对象存储和所有CDN的组合。
 正常一些技术博客发的技术文章还是比较有价值的,文章附图最好还是加个水印,也减少一点被盗的风险,我这生活水文博客那就看心情了,也没啥值得盗的,纯属折腾哈,简单记录一下。
 首先是要用云存储作为图床,无论是直接上传或者通过图床程序,在对应的云存储内找到图片处理功能

 接着设置一个间隔标识符,后面会用到,又拍云是有三个可选(! _ –),然后设置一个图片处理规则,这里面就按需配置,如果上传之前已经对图片进行过处理了,这里就推荐不要进行压缩或者更改格式的其他处理了,只开启添加水印一个功能,可以设置文字水印或者图片水印,选好水印放置的位置,设置好对应的参数之后,点击右侧的小喵咪可以进行刷新预览看一下最终呈现的样式,达到想要的效果之后进行保存此规则,注意样式命名,后面会用到。


 到此就可以进行实际图片测试了,比如原来的图片外链是https://img.hxy.cc/2026-ceshitupian.webp,加上前面设置的图片处理参数之后的格式就是https://img.hxy.cc/2026-ceshitupian.webp-shuiyin,这样其实还是没有达到目的,因为访问不带图片处理规则的原链接,还是没有水印效果的,想要最终实现不加参数又能加上水印,这就要去CDN加速那边设置了。
 又拍云的处理规则设置好之后,到腾讯EO的对应图床域名的规则引擎中设置回源URL重写,可以按照如下函数进行配置

正则表达式: ^/(.*\.(jpg|jpeg|png|gif|webp|bmp))$   (这里加上实际使用的图片格式的后缀)
替换为: /$1-shuiyin  (这里的-就是上面设置的间隔标识符,shuiyin就是上面设置的图片处理规则的名称)


 这样配置好之后,把EO这边的图床域名的缓存清除一下,然后再刷新文章内的外链图片,此时看到不用每张图片进行添加后缀,已经成功添加水印,这样设置的好处就是不用每张图片都单独进行添加,而且万一以后有换域名,直接把水印规则里面的水印换一下就行了,原图片不受影响。
 看了下七牛云的云存储,基本上一样的方式,也可以达到上面的效果。

 经常看到用对象存储的博友被刷多少多少流量,以至于产生巨额账单而劝退使用对象存储,我觉得还是没有做好防护措施吧,使用不限量的EO或者ESA,还有可以设置达量拉闸的多吉云,然后用http回源到对象存储,因为https可能会收费,这样基本上不会产生费用啊,我用了好几年的又拍云联盟,一年有61块的券,我25年按照这种方式设置之后才产生不到1块钱的费用。

天翼云电脑不休眠不关机教程

作者Hary
2026年1月18日 13:56

 有使用天翼云电脑的小伙伴知道,天翼云电脑默认有一个休眠机制,超过60分钟不使用,未使用客户端进行远程连接,则进入休眠状态,相当于自动关机,如果自己挂的一些程序或者软件啥的就会出现掉线。
 自从九月份入手了一台长期的天翼云电脑,现在我的所有的网上冲浪的一些东西全部在云电脑上面,用来挂一些软件和一些定时任务,还是非常方便的,前前后后也试了各种方法,目前在用的这种保活方法还算是比较满意的,分享一下,有需要的朋友可以试一下,不主动重启的话不会休眠。

 我的这台前几天我新装了一个软件,重启了一下,之前已经稳定运行20多天了,还是非常稳的。

小米音箱申请售后

作者Hary
2026年1月15日 22:03

 25年初的时候入手的一款新发布的小米音箱《入手小米智能音箱PRO,米家智能家电+1,使用一周初体验》,一直放在卧室里给小孩放儿歌讲故事,一直用着也没啥问题,后来回老家就带回去了,元旦回家媳妇就跟我讲,现在的小爱同学好像有点傻了,而且有的时候还喊了没反应,之前离得好远都可以轻松唤醒,现在在客厅都唤不醒在卧室的小爱同学。
 当时也没当回事,前几天看京东订单,好多小家电媳妇买东西都喜欢买个保险都是延保三年五年的,这个小米音箱也买了个4年质保,后来就想着不行就换一下,经常叫不醒还是挺让人抓狂的,就找到当时的订单准备申请一下维修售后,刚好看还没一年呢,可以直接用京东自带的一年内免费保修,也没浪费那个4年的保险,额外买的这个保险是只能用一次,第二年或者第四年都可以用,但是只能用一次。


 直接用了一年免费维修这个申请了,理由是唤醒不灵敏,有时候让唱歌或者讲故事也是答应了之后,说开始唱XXX或者讲XXX,然后就没有然后了,估计多少还是有点问题,提交售后之后客服也是打了个电话确认了下情况,说不用维修,直接换新,随后就直接生成了一个新的订单,新的到了之后,现场把旧的给京东快递员就行。
 果然换的新的还是好使,老远就能轻松唤醒,反应也挺快,而且还发现了个这款音箱支持蓝牙Mesh的功能,可以把不能联网的智能设备连接音箱,然后就可以通过小爱同学控制了,下次回家可以把只支持蓝牙Mesh的客厅和卧室的灯加进去,就可以通过小爱同学控制了。
 看来买东西顺手买个几块钱的保险还是很有性价比的,上面那个给小孩买了两年的保温杯,刚好看到有个两年的保险快到期了,也一起申请了个售后,倒是直接旧的也不用寄了,直接重新发新的,果然京东贵还是有贵的道理的。

❌