- 博客(71)
- 收藏
- 关注
原创 【__proto__ vs prototype 到底啥区别】
prototype 是函数的属性,用于 new 时指定实例的原型;__proto__ 是对象的内部链接,用于属性查找。关键区别:prototype 只有函数有,__proto__ 几乎所有对象都有。new 操作将实例的 __proto__ 指向构造函数的 prototype,二者通过 f.__proto__ === Foo.prototype 关联。函数既是对象(有 __proto__),又有自己的 prototype,两者指向不同。__proto__ 为非标准写法,推荐使用 Object.getProto
2026-11-06 03:00:41
221
原创 【Docker Compose 快速入门】
本教程通过构建一个基于 Flask 和 Redis 的计数器应用,介绍 Docker Compose 的核心用法。从项目搭建、Dockerfile 编写到 compose.yaml 配置,涵盖服务定义、端口映射、环境变量与健康检查。通过添加健康检查解决启动竞态,利用 develop.watch 实现代码热更新,提升开发效率。最终实现可持久化、自动恢复的多服务应用栈,适合初学者快速掌握 Compose 在 Web 开发中的实践。
2026-09-28 01:51:12
341
原创 【OpenEuler 安装 Docker】
在 openEuler 24.03 SP4 系统上安装 Docker,需关闭 SELinux 并修改源配置中的版本变量。使用阿里云或华为云镜像源,将 $releasever 替换为 7 以解决 404 错误。通过 dnf 安装 Docker 及插件,配置国内镜像加速,启动服务后运行 hello-world 验证成功。
2026-09-24 21:58:42
235
原创 【Linux 定时任务】
Linux定时任务体系分为一次性(at)与周期性(cron、systemd timer)。at用于单次执行,支持时间格式灵活;cron通过crontab或系统配置文件实现周期调度,支持用户级与系统级任务,并可通过anacron补跑未执行的任务。systemd timer以服务+定时器分离方式管理,支持持久化补跑(Persistent=true),并集成日志追踪(journalctl -u),是现代系统推荐的定时机制。
2026-09-16 02:30:58
228
原创 【Shell 知识速查表】
本文为Shell知识速查表,涵盖符号与括号用法、重定向操作、特殊变量、参数展开、正则表达式元字符及POSIX字符组,并总结echo与printf常用输出格式,适合快速查阅与复习。
2026-09-09 00:33:32
223
原创 【Linux 命令基础版】
Linux用户与用户组管理(核心文件、user/group命令、查询切换)及文件权限管理(普通/特殊权限、umask、chmod符号模式、chown/chgrp)和文件目录操作
2026-09-04 17:21:50
233
原创 vscode wsl和windows环境切换
环境左下角显示数据库 Host代码位置Windows 本地><127.0.0.1WSL172.x.x.x(查 resolv.conf)点击左下角 + 选择对应选项。
2026-07-14 21:25:31
299
原创 【4种打开Ubuntu(WSL)的方法】
本文介绍了4种打开Ubuntu(WSL)的方法:通过开始菜单搜索、Windows终端/PowerShell命令、Win+R快速启动以及VS Code开发模式。提供了首次使用时的系统更新指南和常用基础命令,包括文件操作、Windows与Ubuntu文件互访、软件安装等。还包含密码重置方法、WSL状态查看技巧以及一个典型的新手使用流程。文章特别强调开发推荐使用VS Code,并提醒注意sudo权限操作和内存释放问题,为WSL初学者提供了全面的操作指南。
2026-07-12 04:37:39
418
原创 【MySQL建索引】
本文总结了MySQL索引的建立规则与应用场景。可以建立索引的字段类型包括整数、小数、字符串、时间和枚举等,而blob和longtext只能建立前缀索引。索引分为主键、普通和唯一三种类型,各有不同约束条件。索引主要用于加速WHERE查询、ORDER BY排序、GROUP BY分组和JOIN关联操作,但无法优化!=、NOT LIKE等操作,且会降低写操作性能。适合建索引的字段包括频繁查询、关联、排序的列以及主键,而重复度高、很少查询或频繁更新的字段则不适合建索引。外键字段必须建立普通索引以确保关联查询效率。
2026-06-26 05:10:11
241
原创 【Future vs CompletableFuture vs JS Promise】
本文对比了Java中的Future与CompletableFuture的核心差异,重点剖析了中断机制的不同实现: 传统Future中断原理 FutureTask通过runner字段持有执行线程引用,cancel(true)会直接中断目标线程,而CompletableFuture作为通用结果容器不绑定执行线程,cancel()仅修改状态不中断线程。 设计思想对比 CompletableFuture与JavaScript的Promise高度同源,均采用异步可外部决议模型,支持链式调用、多任务组合(anyOf/a
2026-06-24 16:39:52
367
原创 【线程池全套高频坑点】
线程池高频坑点精要总结 异常处理:避免submit静默吞异常,execute需内部捕获所有Throwable,防止线程销毁;Error类异常无法恢复。 参数配置: 区分IO/CPU密集型任务设置线程数,公式参考:IO任务=CPU核心数×(1+等待耗时/计算耗时),CPU任务=CPU核心数+1。 禁用无界队列防OOM,有界队列需配自定义拒绝策略(如日志告警)。 核心线程闲置时通过allowCoreThreadTimeOut回收。 线程复用问题:ThreadLocal和MDC需及时清理,防内存泄漏和日志串号。
2026-06-21 22:37:19
371
原创 BlockingQueue 全家桶
本文总结了Java中6种主要的阻塞队列(BlockingQueue)及其特点: ArrayBlockingQueue:固定容量的数组实现,严格FIFO,读写互斥 LinkedBlockingQueue:链表实现,可指定容量,读写分离锁,并发性能更好 SynchronousQueue:零容量队列,生产者必须等待消费者取走 LinkedTransferQueue:无界队列,支持普通缓冲和同步交付两种模式 PriorityBlockingQueue:无界优先级队列,按元素优先级排序 DelayQueue:延时队列
2026-06-19 04:38:25
358
原创 【Unicode、UTF-8、UTF-16 及字符类型详解】
Unicode是一种统一的字符编码标准,为所有语言字符分配唯一二进制编码,包含17个平面共1114112个码位,其中基本多文种平面(BMP)最为常用。UTF-8是变长编码(1-6字节),兼容ASCII,适用于存储和传输;UTF-16则采用固定或代理对方式编码(2或4字节),Java默认使用UTF-16,其char类型和String类均基于UTF-16编码。需要注意的是,增补字符会占用两个char位置但视为一个逻辑单元,处理文本时建议以字符串整体操作确保准确性。Unicode与ISO 10646标准保持兼容,
2026-06-10 16:49:31
293
原创 【获取单词流】
这篇文章总结了Java中5种将文本转换为单词流的方法,重点推荐了最优组合方案: 分析了5种文本转流方法的特点: List/Arrays方式会生成中间集合/数组,内存占用高 Scanner.tokens()简单但性能一般 Pattern.splitAsStream()支持正则且流式处理 Files.lines()支持逐行读取 推荐终极解决方案: Files.lines(path) .flatMap(Pattern.compile("\\PL+")::splitAsStream) 该组合具有流式处理、不加载全文
2026-06-10 16:23:20
181
原创 【Intelij IDEA使用手册】
IntelliJ IDEA 常用快捷键速查手册 本文档整理了IntelliJ IDEA中高效的开发快捷键,分为三大类: 查找搜索:包含文件/字符串搜索(CTRL+F/R)、类结构查看(CTRL+H)、方法调用追踪(CTRL+ALT+H)等核心定位功能 代码编辑:涵盖智能补全(ALT+ENTER)、代码格式化(CTRL+ALT+L)、多光标编辑(ALT+SHIFT+点击)等高效编辑技巧 代码生成:提供快速生成Getter/Setter(ALT+INSERT)、main方法(psvm)、代码块包裹(CTRL+A
2026-06-03 15:37:13
327
原创 【JDK动态代理源码梳理】
摘要:JDK动态代理核心实现机制是通过Proxy.newProxyInstance()生成代理类,其内部采用缓存机制和双重检查锁保证线程安全。代理类继承Proxy并实现目标接口,所有方法调用均转发至InvocationHandler。生成过程包括权限校验、缓存处理、字节码生成和构造器反射实例化,最终生成形如$Proxy0的代理类,通过静态代码块预加载方法对象,在运行时将调用委托给处理器的invoke方法。
2026-06-03 04:52:18
193
原创 IDEA创建java项目
刚安装好会进入下面的创建页面,选择直接New Project创建新项目。如果后续打开IDEA,并且上次的项目存在,则会打默认开上次的项目,此时可以选择File -> New->Project创建新项目。
2024-02-24 00:49:05
818
1
原创 java开发环境安装
JDK环境变量配置Maven环境变量配置maven setting.xml:<?xml version="1.0" encoding="UTF-8"?><settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.ap
2020-09-18 18:30:26
191
原创 MySQL zip包安装
1. 下载MySQL zip包下载地址2. 配置解压到安装目录,例如:D:\Program Files\mysql-5.6.48在根目录下创建my.ini,如下仅供参考[mysql]# 设置mysql客户端默认字符集default-character-set=utf8 [mysqld]#绑定IPv4和3306端口bind-address=0.0.0.0port=3306secure_file_priv = 'D:/Program Files/mysql-5.6.48/testM
2020-09-18 18:15:14
202
原创 Gulp快速入门教程
Gulp介绍中文主页: http://www.gulpjs.com.cn/gulp是与grunt功能类似的前端项目构建工具, 也是基于Nodejs的自动任务(task)运行器能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的合并、压缩、检查、监听文件变化、浏览器自动刷新、测试等任务gulp更高效(异步多任务), 更易于使用, 插件高质量安装 nodejs, 查看版本: node -v创建一个简单的应用gulp_test|- di.
2020-06-25 01:25:52
252
原创 立即执行函数模块化
(function (window, $) { //数据 let data = 'I am a module'; //操作数据的函数 function foo() { //用于暴露有函数 console.log(`foo() ${data}`); $('body').css('background', 'red'); } function bar() {//用于暴露有函数 console.log(`bar() ${data}`); otherFun
2020-06-22 19:24:30
389
原创 ES6模块化
ES6-Babel-Browserify1. 定义package.json文件json { "name" : "es6-babel-browserify", "version" : "1.0.0" }2. 安装babel-cli, babel-preset-es2015和browserifynpm install babel-cli browserify -gnpm install babel-preset-es2015 --save-dev3. 定义.babelrc文件json { "
2020-06-22 19:12:30
255
原创 AMD-RequireJS模块化
require.js使用1. 下载require.js, 并引入官网: http://www.requirejs.cn/github: https://github.com/requirejs/requirejs将require.js导入项目: js/libs/require.js2. 创建项目结构|-js |-libs |-require.js |-modules |-alerter.js |-dataService.js |-main.js|-ind
2020-06-22 18:54:14
303
原创 CommonJS-Browserify模块化
Browserify模块化Browserify让你可以使用require('modules')在浏览器端打包模块依赖创建项目结构|-js |-dist |-src |-module1.js |-module2.js |-module3.js |-app.js|-index.html|-package.json { "name": "browserify-demo", "version": "1.0.0" }-dist 打包生成文
2020-06-22 18:20:03
205
原创 nodejs使用的CommonJS规范
模块的引用使用 require()函数来引入一个模块例子:var 变量 = require("模块的标识");模块的定义在node中一个js文件就是一个模块默认情况下在js文件中编写的内容,都是运行在一个独立的函数中,外部的模块无法访问导出变量和函数使用 exportsexports.属性 = 属性值;exports.方法 = 函数;注意:不能复制一个对象使用module.exportsmodule.exports.属性 = 属性值;module.export
2020-06-21 16:57:30
503
原创 npm 常用命令
npm -v 查看npm的版本npm version 查看所有模块的版本npm search 包名 搜索包npm install/i 包名 安装包npm remove/r 包名 删除包npm install 包名 --save 安装包并添加到依赖中npm install 下载当前项目所依赖的包npm install 包名 -g 全局安装包(全局安装的包一般都是一些工具)...
2020-06-21 16:40:42
298
原创 ActiveMQ入门
ActiveMQ是JMS规范的一种实现ActiveMQ的消息形式Java消息服务应用程序结构支持两种模型:1.点对点模型(基于队列)每个消息只能有一个消费者。消息的生产者和消费者之间没有时间上的相关性。可以由多个发送者,但只能被一个消费者消费。一个消息只能被一个接受者接受一次生产者把消息发送到队列中(Queue),这个队列可以理解为电视机频道(channel)在这个消息中间件上有多个这样的channel接受者无需订阅,当接受者未接受到消息时就会处于阻塞状态2. 发布者/订阅者模型(基
2020-06-18 17:16:27
285
原创 Executor 并发线程池框架
摘要: Executor框架基于生产者-消费者模型,解耦任务提交与线程管理,提供多级接口(Executor→ExecutorService→ScheduledExecutorService)支持任务执行、生命周期控制和定时调度。核心实现类ThreadPoolExecutor通过七大参数(核心/最大线程数、存活时间、阻塞队列、线程工厂、拒绝策略)动态管理线程,任务提交遵循"核心线程→队列→扩容→拒绝"四步流程。Executors工具类预置五种线程池(如固定/缓存/单线程池),但无界队列设计存在OOM风险,生产
2020-06-17 19:37:43
324
原创 MySQL基础介绍
本文摘要了MySQL数据库的基础知识,主要包含以下内容:1)SQL语句四大分类(DDL数据定义语言、DML数据操作语言、DCL数据控制语言和DQL数据查询语言)及其常用关键字;2)常用字段类型选型规范;3)数据库和表的DDL操作;4)数据的增删改查DML操作;5)用户权限管理的DCL操作;6)基础查询语法。文章提供了详细的SQL示例和注意事项,适合作为MySQL入门参考资料。
2020-06-12 03:24:50
212
原创 MySQL的存储过程
存储函数一个生成长度固定的随机字符串DROP FUNCTION IF EXISTS random_str;DELIMITER //CREATE FUNCTION random_str(len INT) RETURNS VARCHAR(32)BEGIN DECLARE letterTable VARCHAR(52) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwxyz'; DECLARE randomStr VARCHA
2020-06-12 01:48:12
200
原创 JavaScript继承
通过Person.call(this, name)实现对象冒充,使子类Ninja继承父类属性;再将Ninja.prototype指向Person实例以继承原型方法,避免原型链断裂。使用Object.defineProperty修复constructor指向,确保继承正确性。最终ninja.say()与feint()正常调用,完整实现基于函数原型的继承。
2020-06-08 02:10:18
149
原创 JavaScript函数
函数是JavaScript的一等对象函数是JavaScript的一等对象(first-class object),或者说是一等公民(first-class zitizens)。 // 使用字面量定义一个空对象 let ninja = {}; // 分配属性 ninja.name = "Hanzo"; // 为对象的属性赋值为一个新对象 ninja.data = {}; // 使用字面量定义一个数组 let ninjaArray = [];
2020-06-07 01:01:36
208
原创 编写Dockerfile的最佳实践
编写Dockerfile的最佳实践本文档介绍了用于构建有效图像的推荐最佳实践和方法。Docker通过从一个Dockerfile文本文件中读取指令来自动构建镜像,该文本文件按顺序包含构建给定镜像所需的所有命令。一个Dockerfile遵循特定的格式和指令集,您可以在Dockerfile 的reference中找到。Docker镜像由只读层组成,每个只读层代表一个Dockerfile指令。这些层是堆叠的,每个层都是前一层的变化的增量。考虑一下Dockerfile:FROM ubuntu:18.04CO
2020-05-29 01:20:57
328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅