作者: admin

  • 后端开发自学教程 | 后端开发学习资源 | 免费在线课程

    后端开发自学教程 | 后端开发学习资源 | 免费在线课程

    一、后端开发是什么?为什么值得学?

    很多刚接触编程的朋友可能听过“前端”和“后端”这两个概念,但不太清楚它们的具体区别。简单来说,前端是你在网页上能看到、能点击交互的部分(比如按钮、表单、动画效果),而后端则是处理数据、执行业务逻辑、管理数据库的“幕后英雄”。

    举个例子,当你登录一个网站时,前端负责显示登录页面和输入框,后端则接收你输入的账号密码,去数据库里验证是否正确,然后返回登录结果给你。没有后端,网站就只是一个“空壳子”,什么都干不了。

    后端学习路线:编程语言→数据库→Web框架→实战项目→计算机基础

    后端开发为什么值得学?

    首先,后端开发的岗位需求非常大。几乎所有的互联网公司都需要后端开发,从BAT这样的大厂到创业公司,后端工程师都是核心角色。其次,后端开发的薪资待遇普遍不错,而且技术栈相对稳定,一旦掌握了核心技能,职业发展路径非常清晰。

    更重要的是,后端开发能让你真正理解程序的运行逻辑。当你学会处理数据、设计API、管理数据库之后,你会对整个软件系统有更深入的认识,这种能力是其他方向很难替代的。

    二、后端开发需要学什么?

    后端开发的技术栈比较庞大,对于零基础小白来说,常常不知道从哪学起。我建议按照以下顺序来构建知识体系:

    2.1 编程语言基础

    后端开发可以选择的主流语言有Java、Python、Go等,每种语言都有自己的特点和适用场景。

    Java是目前企业级应用最广泛的语言,大型互联网公司的后端服务很多都是用Java开发的。Java的生态系统非常成熟,有Spring这样的强大框架,也有MySQL、Redis等完善的周边技术支持。如果你目标是进大厂,Java是首选。

    Python语法简洁、上手快,在Web开发、数据科学、人工智能等领域都有广泛应用。Flask和Django是Python最流行的Web框架,对于快速开发小中型项目来说非常高效。

    Go是近年来增长最快的后端语言之一,以高性能、并发能力强著称。很多云原生项目和微服务架构都选择Go来实现。

    初学者可以根据自己的兴趣和目标选择一门语言深入学习,不建议同时学多门语言,容易样样通、样样松。

    2.2 数据库技术

    后端开发离不开数据库,你需要学习关系型数据库(如MySQL)和非关系型数据库(如Redis、MongoDB)。

    MySQL是最流行的开源关系型数据库,大多数Web应用都用它来存储业务数据。你需要掌握SQL基本操作(增删改查)、索引原理、事务处理、数据库设计规范等内容。

    Redis是一个内存数据库,读写速度极快,常用于缓存、消息队列、分布式锁等场景。学会用Redis可以大幅提升系统性能。

    2.3 Web框架和API开发

    学会语言基础后,你需要学习Web框架来快速开发应用服务。

    Java生态里最常用的是Spring Boot,它简化了Spring框架的配置,开箱即用,社区资源丰富。Python的Flask和Django也很不错,Django适合快速构建完整项目,Flask则更轻量灵活。

    这部分要重点学习RESTful API的设计规范,学会设计清晰的接口、做好参数校验、统一返回格式。

    2.4 计算机基础知识

    虽然这部分相对枯燥,但要想成为高级后端工程师,数据结构、算法、操作系统、计算机网络等基础知识是必须掌握的。

    不过对于零基础入门阶段,可以先不深入这部分内容,等有了实战经验后再系统学习效率更高。

    三、自学资源推荐

    3.1 B站免费视频课程

    B站是程序员自学的重要阵地,上面有大量优质的免费教程。

    Java后端学习推荐

    • 【零基础入门Java】系列视频,讲授清晰,适合完全没接触过编程的小白
    • 【Spring Boot实战】系列,手把手教你搭建Web应用
    • 【MySQL数据库从入门到精通】系统讲解数据库知识

    Python后端学习推荐

    • 【Python Web开发】系列,从Flask/Django基础讲起
    • 【Python爬虫与数据分析】实战项目,帮助理解后端逻辑

    Go后端学习推荐

    • 【Go语言入门到实战】系列,讲解简洁明了
    • 【Go语言实现Web框架】深入理解底层原理

    3.2 GitHub开源学习路线

    GitHub上有几个非常火的开发者学习指南仓库,强烈建议收藏:

    developer-roadmaphttps://github.com/kamranahmedse/developer-roadmap
    这个项目获得了超过10万star,提供前端、后端、DevOps等多个方向的学习路线图。每条路线都详细列出了需要掌握的技术点,你可以对照检查自己的学习进度。

    JavaGuidehttps://github.com/Snailclimb/JavaGuide
    Java技术面试必备指南,内容涵盖Java基础、集合、并发、JVM等核心知识点,还有大量面试题解析,是准备面试的利器。

    CS-Noteshttps://github.com/CyC2018/CS-Notes
    计算机基础知识总结,包括数据结构与算法、操作系统、计算机网络、数据库等模块,适合系统复习基础知识。

    architect-awesomehttps://github.com/xingshaocheng/architect-awesome
    后端架构师技术图谱,对后端知识体系归纳得非常全面,可以作为学习参考。

    3.3 技术博客和社区

    掘金https://juejin.cn):字节跳动旗下的技术社区,干货文章多,质量较高
    CSDNhttps://blog.csdn.net):老牌技术博客,教程丰富,但需要筛选优质内容
    知乎:可以关注一些后端大V,看他们的专栏和回答
    Stack Overflow:遇到技术问题可以在这里搜索解决方案

    3.4 实战项目推荐

    光看不练是学不好后端的,建议学完基础后尝试做几个实战项目:

    用户管理系统:包含用户注册、登录、权限管理等基本功能
    博客系统:实现文章发布、评论、分类等功能
    电商后台:模拟订单管理、商品管理、支付对接等场景

    这些项目可以在GitHub上找到很多参考,强烈建议你先模仿、然后自己实现一遍。

    四、学习建议

    4.1 多动手,别光看

    后端开发是实践性很强的技能,一定要多敲代码。看教程的时候,不要只是看,要跟着教程把代码敲一遍,然后试着自己改动一些内容。

    4.2 善用搜索引擎

    遇到问题先自己思考,确实解决不了就搜索。善用GitHub issues、Stack Overflow、CSDN等技术社区。

    4.3 坚持写学习笔记

    建议用Markdown写技术笔记,把学到的知识点、踩过的坑、解决方案都记录下来。

    4.4 加入学习社群

    找到志同道合的学习伙伴,互相监督、互相解答问题。

    五、相关学习资源链接

    六、总结

    后端开发自学是一个需要长期坚持的过程。保持每天学习的习惯,遇到困难不轻易放弃,多动手实践、多交流分享。

    记住,技术这条路没有捷径,但只要你坚持走下去,一定会看到成效。

    本文整合自B站、GitHub等技术社区的优质资源,供自学爱好者参考学习。

  • 日语自学教程 | 日语学习资源 | 免费在线课程

    日语自学教程 | 日语学习资源 | 免费在线课程

    为什么要学日语?

    在所有外语里,日语可能是中国人学起来最省力的一个。为什么?因为日语里有大量汉字,就算完全不懂日语,你也能大概猜出一段日文的意思。

    学日语的理由,每个人可能都不一样:

    • 追番看剧:再也不用等字幕组,早别人一步看生肉
    • 留学深造:日本教育资源优质,性价比高
    • 工作机会:日企待遇不错,会日语是加分项
    • 文化体验:动漫、美食、旅游,用日语体验更深入
    • 纯粹爱好:喜欢就是理由,不需要别的

    不管你的理由是什么,学日语这件事本身是值得的。语言不只是工具,更是打开新世界的大门。

    日语自学全流程配图 - 五十音记忆、语法入门、词汇积累、听说读写练习学习路径,从新手到日语达人成长路线

    日语基础知识科普

    日语文字系统

    日语由三种文字组成:

    1. 平假名(ひらがな)

    源于汉字草书,笔画柔和圆润。

    plaintext

    あ い う え お
    か き く け こ
    さ し す せ そ
    

    用于:动词词尾、助词、native日语词汇

    2. 片假名(カタカナ)

    源于汉字楷书偏旁,笔画方正。

    plaintext

    ア イ ウ エ オ
    カ キ ク ケ コ
    サ シ ス セ ソ
    

    用于:外来语(英语音译词)、拟声拟态词、强调

    3. 汉字(漢字)

    日语里用的是繁体字或者旧体字。

    plaintext

    日本語 = 日本 + 語 = Japanese language
    学校 = 学校 = school
    

    特点:大部分汉字意思和中文相近

    五十音图

    五十音图是日语的”字母表”,由あ行到わ行的46个基本假名,加上浊音、半浊音组成。

    元音五天王

    平假名片假名读音
    a
    i
    u
    e
    o

    浊音变化(か行→が行):

    plaintext

    か→が(ka→ga)
    き→ぎ(ki→gi)
    く→ぐ(ku→gu)
    け→げ(ke→ge)
    こ→ご(ko→go)
    

    半浊音(ぱ行):

    plaintext

    ぱ ぴ ぷ ぺ ぽ(pa pi pu pe po)
    

    第一步:攻克五十音图

    五十音图是日语的起点,必须拿下。很多人在这一步就放弃了,其实是没找对方法。

    记忆技巧

    1. 联想记忆法

    每个假名都可以联想一个画面:

    plaintext

    あ → "安"的草书,像一个人在鞠躬说"啊"
    い → "以"的草书,像两根筷子
    う → "宇"的草书,像一个人捂着脸
    え → "衣"的草书,像工厂的烟囱
    お → "於"的草书,像一个人在跪着
    

    2. 分类记忆法

    按行记,按列记:

    • か行:ka ki ku ke ko(咖咖库咖扣?)
    • さ行:sa shi su se so(撒西苏塞搜)
    • た行:ta chi tsu te to(他七词太拖)

    3. 歌曲记忆法

    网上有各种五十音图之歌,听着听着就记住了。推荐B站搜索”五十音图之歌”。

    学习工具

    工具类型特点
    沪江日语网站/App五十音图课程免费
    MOJi辞书App查词+记忆卡片
    日语入门学堂App游戏化学习
    卡片记忆手写传统但有效

    检验标准

    通关标准

    • 看到一个假名,0.5秒内反应出读音
    • 听到一个读音,能写出假名
    • 能按顺序默写五十音图(平假名+片假名)

    学习时间:集中学习1周,每天2小时,能基本掌握。

    第二步:日语语法入门

    日语语法和中文差异很大,最大的区别是语序

    核心语序对比

    plaintext

    中文:主语 + 谓语 + 宾语(我 吃 饭)
    日文:主语 + 宾语 + 谓语(私は ご飯を 食べます)
    

    日语是”主宾谓”结构,动词永远在最后。

    必学基础句型

    1. 判断句

    plaintext

    A は B です(A是B)
    私は 学生です。(我是学生)
    

    2. 存在句

    plaintext

    A は B に あります(A在B)
    猫 は 箱 に います。(猫在箱子里)
    
    B に A が あります/います(B里有A)
    箱 に 猫 が います。(箱子里有猫)
    

    3. 动作句

    plaintext

    A は B を 动词ます(A做B)
    私 は 本 を 読みます。(我读书)
    

    助词系统

    助词是日语的”黏合剂”,决定句子成分关系。

    助词用法例句
    提示主题私は学生です
    提示主语猫がいます
    提示宾语本を読みます
    提示时间/地点家に帰ります
    提示场所/方式学校で勉強します
    私の本

    动词变形

    日语动词有很多变形,是语法难点。

    ます形(礼貌体)

    plaintext

    一类动(う→い):書く→書きます
    二类动(る→ます):食べる→食べます
    三类动(する→します):する→します
    

    て形(进行/请求)

    plaintext

    一类动:く→いて、んで、って
    書く→書いて(写完了)
    読む→読んで(正在读)
    
    二类动:る→て
    食べる→食べて(正在吃)
    
    三类动:する→して
    する→して(正在做)
    

    第三步:词汇积累

    基础词汇表

    数字

    中文日语罗马音
    0rei/zero
    1ichi
    2ni
    3san
    4yon/shi
    5go
    6roku
    7nana/shichi
    8hachi
    9kyuu/ku
    10juu

    时间

    中文日语罗马音
    今天今日kyou
    明天明日ashita
    昨天昨日kinou
    现在ima
    早上asa
    中午hiru
    晚上yoru

    家庭成员

    中文日语罗马音
    父亲お父さんotousan
    母亲お母さんokaasan
    哥哥お兄さんoniisan
    姐姐お姉さんoneesan
    弟弟outou
    妹妹imouto

    词汇记忆方法

    1. 场景记忆法

    按场景背单词,而不是按字母表:

    • 超市场景:牛乳、肉、野菜、果物
    • 餐厅场景:メニュー、注文、勘定、定食
    • 交通场景:電車、バス、駅、切符

    2. 联想法

    用中文谐音或形象记忆:

    plaintext

    さかな(鱼)→ 撒卡娜(想象撒网捕鱼)
    すみません → 死米马森(道歉谐音)
    

    3. 词根词缀法

    plaintext

    日本語(にほんご)
    日本(にほん)+ 語(ご)= 日本语
    学校(がっこう)
    学(がく)+ 校(こう)= 学校
    

    推荐词典App

    App特点
    MOJi辞书例句丰富,收藏复习
    沪江小D轻量方便
    物书无广告,免费
    Anki间隔重复记忆

    第四步:听力口语入门

    听力训练

    入门阶段素材

    1. 教材音频:标准日本语、大家的日语配套音频
    2. NHK慢速日语https://www3.nhk.or.jp/news/easy/ 语速慢,词汇简单
    3. 动漫日剧:选择日常番,如《哆啦A梦》《蜡笔小新》

    听力练习方法

    Step 1:盲听一遍,抓关键词
    Step 2:看字幕,找出生词
    Step 3:跟读模仿,纠正发音
    Step 4:脱字幕再听,直到听懂大意

    口语练习

    1. 影子跟读(Shadowing)

    播放一句话,1-2秒后跟读,模仿语调。这是练习口语最有效的方法。

    2. 自言自语

    日常生活中,用日语描述正在做的事:

    plaintext

    今、コーヒーを飲んでいます。(现在在喝咖啡)
    今日は天気がいいですね。(今天天气真好)
    

    3. 语言交换App

    App特点
    HelloTalk语言交换,找母语者聊天
    Tandem全球语言伙伴
    SpeakBooAI陪练

    4. 日语角/社群

    加入日语学习群,尝试用日语交流。

    第五步:JLPT考级规划

    JLPT(日本语能力测试)是全球最权威的日语能力认证,分为5个级别:

    级别难度词汇量要求语法要求
    N5入门约800基础语法
    N4初级约1500日常会话
    N3中级约3000报纸摘要
    N2中高级约6000日剧生肉
    N1高级约10000原版书籍

    学习时间规划

    目标等级学习时间适用人群
    N53-6个月兴趣入门
    N46-12个月工作/留学预备
    N21.5-2年日企就业
    N12-3年翻译/学术

    考级资源推荐

    教材

    • 《新标准日本语》:体系完整,配套丰富
    • 《大家的日语》:偏重会话,实用性强
    • 《TRY!新日语能力考试》:针对性强

    真题

    • 历年真题(网上可下载)
    • 沪江日语真题频道
    • JLPT官方真题集

    备考App

    • JLPT日语考级(历年真题)
    • MojiTest(词汇语法练习)
    • 烧饼日语(真题练习)

    第六步:学习资源大全

    免费学习网站

    网站内容链接
    沪江日语综合学习https://jp.hjenglish.com/
    喜马拉雅日语听力资源搜索”日语听力”
    NHK Easy新闻听力https://www3.nhk.or.jp/news/easy/
    青空文库小说阅读https://www.aozora.gr.jp/

    视频教程

    B站UP主推荐

    UP主内容特点
    出口仁语法讲解详细
    日本語の森日语母语者教学
    葉子先生零基础入门
    周业坚持N2/N1考级

    课程推荐

    • 《新版中日交流标准日本语》配套视频
    • 《大家的日语》配套课程

    App推荐

    App用途
    MOJi辞书查词
    沪江开心词场背单词
    HelloTalk语言交换
    喜马拉雅听力
    Anki记忆卡片

    辅助工具

    输入法

    • 手机:系统自带日语输入法
    • 电脑:Google日语输入法、MS IME

    翻译辅助

    • Google翻译(支持拍照翻译)
    • DeepL(翻译质量高)
    • MOJi翻译

    第七天:系统学习路线

    入门阶段(0-3个月)

    目标:掌握五十音图,基础词汇500+,简单会话

    学习内容

    plaintext

    第1周:五十音图(平假名+片假名)
    第2周:基本句型(は・が・を・に・で)
    第3-4周:动词ます形、て形
    第5-8周:名词句、形容词句、动词句
    第9-12周:基础会话、简单阅读
    

    每日任务(约1.5小时):

    • 早晨:背单词(20个)
    • 上午:学语法(1课)
    • 下午:听力(30分钟)
    • 晚上:跟读(30分钟)

    初级阶段(3-6个月)

    目标:N4水平,能进行日常会话

    学习内容

    • 全部动词变形
    • 常见语法句型(约100个)
    • 词汇量达到1500
    • 简单文章阅读
    • 日常对话练习

    中级阶段(6-12个月)

    目标:N3水平,能看懂一般日剧动漫

    学习内容

    • 复杂语法结构
    • 敬语系统
    • 词汇量达到3000
    • 新闻听力
    • 原版阅读(简单小说)

    进阶阶段(1-2年)

    目标:N2水平,职场/留学无障碍

    学习内容

    • 商务日语
    • 专业领域词汇
    • 学术日语
    • 写作训练
    • JLPT N2备考

    学习建议与心态调整

    常见问题解答

    Q:五十音图背不下来怎么办?

    A:不要死记硬背,结合单词记忆。比如”あさ”(早晨)包含あ、さ两个假名,在单词里记更牢固。

    Q:语法太难了,想放弃?

    A:语法确实需要时间消化。可以先跳过复杂语法,用”模仿+重复”的方式建立语感,后续再回头理解。

    Q:学了就忘怎么办?

    A:正常现象。遗忘是正常的,关键是多复习。用Anki等间隔重复工具,按照遗忘曲线复习。

    Q:没有语言环境怎么办?

    A:自己创造环境。看日剧动漫(开日语字幕)、听日语歌、用日语自言自语。现在网上资源很丰富,不愁没环境。

    学习心态

    1. 不要急:日语需要积累,不可能一个月速成
    2. 坚持:每天学一点比一周学一天有效
    3. 实用:以用促学,学以致用
    4. 快乐:保持兴趣,学习要有成就感

    相关资源推荐

    资源类型推荐名称链接
    综合学习沪江日语https://jp.hjenglish.com/
    听力NHK Easy Newshttps://www3.nhk.or.jp/news/easy/
    词典MOJi辞书App Store搜索
    背单词沪江开心词场App Store搜索
    语言交换HelloTalkApp Store搜索
    考级JLPT日语能力考App Store搜索
    语法日语语法酷微信搜索
    视频B站日语教程搜索”日语入门”

    结语

    日语学习是一场马拉松,不是短跑。

    从五十音图到N1,每个日语达人都是这么过来的。你不需要天赋异禀,只需要:

    • 正确的方法
    • 持续的行动
    • 保持的热情

    现在,就从打开一篇日语文章、播放一首日语歌、记住一个假名开始吧。

    加油,未来的日语达人!

    お疲れ様でした!

    本文由自学导航网站整理发布,定期更新优质语言学习资源。

  • PPT制作自学教程 | PPT学习资源 | 免费在线课程

    PPT制作自学教程 | PPT学习资源 | 免费在线课程

    为什么你的PPT总是不够好看?

    在职场,PPT是个逃不掉的话题。工作汇报、项目展示、毕业答辩、甚至追女生(划掉),都离不开PPT。

    但你有没有这种感觉:明明内容差不多,别人的PPT就是比你好看?

    其实PPT制作是有套路的。掌握了这些套路,你也能做出让人眼前一亮的演示文稿。

    常见PPT问题,你中了几个?

    • 文字堆砌,满屏都是字
    • 配色混乱,红绿蓝紫全上阵
    • 排版随意,对齐全靠缘分
    • 字体乱用,正文用艺术字
    • 滥用特效,动画闪瞎眼

    这些问题,今天一次性帮你解决。

    PPT 自学全流程配图 - 基础操作、设计理论、实战技巧、职场场景学习路径,从新手到 PPT 高手成长路线

    第一步:认识PPT制作工具

    Microsoft PowerPoint(最主流)

    微软出品的PPT软件,装机必备。

    版本选择

    版本特点适合人群
    PowerPoint 2016/2019功能稳定,经典界面习惯传统操作
    Microsoft 365最新功能,云端同步追求新功能
    PowerPoint Online免费,浏览器可用临时使用

    优点:生态成熟,模板丰富,兼容性最好
    缺点:需要付费(除非用盗版或365订阅)

    WPS演示(国产免费)

    金山出品的办公套件,WPS里包含演示功能。

    优点

    • 完全免费
    • 模板数量多
    • 对电脑配置要求低

    缺点:部分高级功能不如Office

    Keynote(苹果专属)

    苹果设备上的演示软件,颜值担当。

    优点

    • 默认模板颜值高
    • 动画效果流畅
    • 导出方便

    缺点:只能在Mac/iPad上用

    新手推荐:先用WPS或PowerPoint,功能差不多,关键是学会思路。

    第二步:PPT设计基础理论

    配色基础知识

    配色是PPT颜值的灵魂。好配色让你的PPT高级,烂配色让内容再精彩也白搭。

    1. 基础配色方案

    单色系:用一个颜色不同深浅

    • 主色:深蓝
    • 辅色:浅蓝
    • 背景:淡蓝/白色

    邻近色系:色轮上相邻的颜色

    • 蓝+青+绿
    • 橙+黄+红

    对比色系:互补色搭配(慎用)

    • 蓝+橙
    • 紫+黄

    2. 职场配色推荐

    不想出错?记住这几个安全配色:

    场景主色辅色背景
    商务汇报深蓝浅蓝白色
    项目展示蓝色橙色浅灰
    学术报告黑色深灰白色
    产品发布渐变色白色深色

    3. 配色工具推荐

    排版设计原则

    1. 对齐原则

    页面元素必须对齐!对齐!对齐!(重要的事说三遍)

    • 左对齐:最常用,适合阅读习惯
    • 居中对齐:适合标题和强调
    • 两端对齐:让文字更整齐

    2. 对比原则

    重要信息和次要信息要有大小、颜色对比:

    • 标题:大字号、加粗
    • 正文:正常字号、浅色
    • 强调:变色、加粗、框选

    3. 亲密原则

    相关内容放一起,不相关内容拉开距离:

    plaintext

    ❌ 错误示范:
    标题A     说明A     标题B     说明B
    
    ✅ 正确示范:
    标题A
    说明A
    
    标题B
    说明B
    

    4. 重复原则

    整个PPT的风格要统一:

    • 统一的配色方案
    • 统一的字体
    • 统一的标题样式

    第三步:PPT结构设计

    优秀PPT的标准

    一个好的PPT应该:

    1. 逻辑清晰:观众能跟上你的思路
    2. 重点突出:一眼看到核心信息
    3. 视觉美观:看着舒服,愿意看下去
    4. 图文结合:文字+图表+图片

    PPT页面类型

    1. 封面页

    • 标题要醒目
    • 副标题补充说明
    • 可以加装饰元素

    2. 目录页

    • 清晰的章节划分
    • 方便观众知道进度
    • 可以加页码导航

    3. 内容页

    这是重点!内容页要遵循”一页一主题”原则:

    • 每页只讲一个核心观点
    • 用标题概括这一页的内容
    • 辅助内容支持核心观点

    4. 数据页

    展示数据的页面:

    • 优先用图表(柱状图、饼图、折线图)
    • 图表要简洁,去掉不必要的元素
    • 数据旁边加文字说明

    5. 总结页

    结尾总结:

    • 回顾核心观点
    • 可以加”谢谢观看”
    • 联系方式(如果需要)

    内容布局模板

    1. 左右分栏

    plaintext

    ┌────────────────────────────────┐
    │ 标题                           │
    ├─────────────────┬──────────────┤
    │                 │              │
    │    左侧内容     │   右侧内容   │
    │    (文字/图片)│   (文字/图片││
    │                 │              │
    └─────────────────┴──────────────┘
    

    适用场景:对比分析、优劣势展示

    2. 上下结构

    plaintext

    ┌────────────────────────────────┐
    │ 标题                           │
    ├────────────────────────────────┤
    │                                │
    │         核心内容区域           │
    │         (图表/图片)          │
    │                                │
    ├────────────────────────────────┤
    │ 说明文字                        │
    └────────────────────────────────┘
    

    适用场景:数据分析、产品展示

    3. 三栏布局

    plaintext

    ┌────────────────────────────────┐
    │ 标题                           │
    ├──────────┬──────────┬──────────┤
    │          │          │          │
    │   第一栏  │  第二栏  │  第三栏  │
    │          │          │          │
    └──────────┴──────────┴──────────┘
    

    适用场景:功能介绍、三点总结

    第四步:PPT制作实战技巧

    文字处理技巧

    1. 字体选择

    场景推荐字体
    中文正文微软雅黑、思源黑体
    中文标题方正粗黑简体、思源黑体 Bold
    英文正文Arial、Calibri
    英文标题Helvetica、Arial Bold

    注意:正文字号不小于16pt,标题不小于28pt

    2. 文字排版

    • 行间距:1.2-1.5倍
    • 段间距:段前0.5行
    • 不要超过7行文字
    • 每行不超过7个字(中文)

    3. 金句提炼

    把长段文字提炼成关键词/短句:

    plaintext

    ❌ 错误:
    "我们的产品能够帮助企业提升30%的运营效率,降低20%的人力成本,实现数字化转型升级。"
    
    ✅ 正确:
    "效率提升 30%"
    "成本降低 20%"
    "数字化升级"
    

    图片使用技巧

    1. 图片来源

    网站特点
    Unsplash免费高清,质量高
    Pexels免费商用,选择多
    站酷海洛国内正版,需付费
    阿里巴巴图标库矢量图标,免费

    2. 图片处理

    • 统一图片风格(照片/插画二选一)
    • 图片加蒙版或边框
    • 重要信息不要放在图片上

    3. 图片布局

    • 左图右文 / 左文右图
    • 环绕式布局
    • 卡片式布局

    图表制作技巧

    1. 图表选择

    数据类型推荐图表
    占比对比饼图、环形图
    时间趋势折线图、面积图
    数量对比柱状图、条形图
    关系对比散点图

    2. 图表优化

    • 删除不必要的网格线
    • 数据标签直接显示
    • 颜色不超过5种
    • 标题简洁明了

    第五步:PPT高阶技巧

    视觉层次设计

    想让PPT更有冲击力?学会制造视觉层次:

    1. 大小对比

    plaintext

    大标题 + 小正文
    大图片 + 小文字说明
    大数字 + 小说明文字
    

    2. 颜色对比

    • 深色标题 + 浅色正文
    • 强调色用于重点内容
    • 背景色与内容形成对比

    3. 空间对比

    • 留白让页面呼吸
    • 重要内容周围留空间
    • 边缘信息紧凑处理

    动画与切换

    1. 切换效果

    • 简单页面:淡入淡出
    • 内容多的页面:无切换
    • 重要页面:推进、溶解

    2. 内容动画

    • 进入动画:淡入、飞入
    • 强调动画:放大、变色
    • 退出动画:淡出、飞出

    3. 注意事项

    • 动画不要太多
    • 速度不要太快(1秒左右)
    • 同一页面风格统一

    快捷键大全

    快捷键功能
    Ctrl + C复制
    Ctrl + V粘贴
    Ctrl + Z撤销
    Ctrl + S保存
    Ctrl + A全选
    Ctrl + D复制对象
    Ctrl + G组合对象
    Ctrl + Shift + G取消组合
    F5从头放映
    Shift + F5从当前页放映
    B放映时黑屏
    W放映时白屏

    第六步:免费资源推荐

    PPT模板网站

    网站特点费用
    OfficePlus微软官方,质量高免费
    稻壳儿模板丰富,国人制作部分免费
    第一PPT模板数量多免费
    PPT之家综合资源站免费

    图标资源

    网站特点
    阿里巴巴图标库矢量图标,中文搜索
    Remix Icon风格统一,开源免费
    Flaticon资源丰富,支持SVG

    图片资源

    网站特点
    Unsplash免费高清摄影
    Pexels免费商用
    站酷海洛国内正版

    学习资源

    视频教程

    • B站搜索”PPT教程 零基础”
    • B站搜索”PPT配色技巧”
    • B站搜索”PPT排版设计”

    图文教程

    • 知乎专栏”PPT进阶之路”
    • 公众号”旁门左道PPT”
    • 公众号”秋叶PPT”

    第七步:职场PPT场景指南

    工作汇报PPT

    结构建议

    plaintext

    1. 封面页(标题 + 汇报人)
    2. 目录页(本次汇报内容)
    3. 背景介绍(为什么做这个项目)
    4. 工作内容(做了什么)
    5. 成果展示(做得怎么样)
    6. 问题分析(遇到什么困难)
    7. 下一步计划
    8. 结束页(谢谢 / 提问)
    

    注意事项

    • 数据说话,用图表展示成果
    • 问题分析要客观
    • 计划要具体可执行

    产品展示PPT

    结构建议

    plaintext

    1. 封面(产品名称 + slogan)
    2. 痛点(用户有什么问题)
    3. 解决方案(我们怎么解决)
    4. 产品介绍(核心功能)
    5. 产品优势(为什么选我们)
    6. 案例展示(谁在用)
    7. 合作方式(怎么联系我们)
    

    注意事项

    • 突出产品亮点
    • 多用图片和视频
    • 案例要具体可信

    毕业答辩PPT

    结构建议

    plaintext

    1. 封面(论文题目 + 姓名 + 导师)
    2. 目录
    3. 研究背景
    4. 研究目的与意义
    5. 研究方法
    6. 研究结果
    7. 结论与展望
    8. 致谢
    

    注意事项

    • 学术风格,简洁大方
    • 图表要规范
    • 时间控制(一般15-20分钟)

    PPT制作常见问题

    Q:PPT颜色怎么搭配才好看?

    A:记住”60-30-10法则”,一个主色占60%,辅色30%,强调色10%。如果不确定,深蓝+白色是最安全的商务配色。

    Q:PPT文字太多怎么办?

    A:做减法!把长段文字提炼成关键词,用图表、图片代替文字。记住”一页一主题,一主题三要点”原则。

    Q:找不到合适的图片怎么办?

    A:用图标代替图片,或者用形状/色块做装饰。也可以用PPT自带的在线图片功能搜索。

    Q:动画要不要加?

    A:少而精。封面页可以加切换动画,内容页内容动画点到为止,避免花哨。

    Q:PPT播放时需要注意什么?

    A

    • 提前测试设备和投影
    • 准备备份(PDF版)
    • 激光笔或遥控器
    • 控制节奏,不要念稿

    学习路线总结

    plaintext

    入门阶段(第1-2周)
    ├─ 熟悉PPT基本操作
    ├─ 学会插入文字、图片、形状
    ├─ 掌握基础排版
    └─ 临摹2-3个完整PPT
    
    进阶阶段(第3-4周)
    ├─ 学习配色原理
    ├─ 掌握图表制作
    ├─ 学习高级排版技巧
    └─ 开始形成自己的风格
    
    高手阶段(持续)
    ├─ 提升审美,多看优秀案例
    ├─ 研究动画和交互
    ├─ 整理自己的素材库
    └─ 形成高效制作流程
    

    相关资源推荐

    资源类型推荐名称链接
    模板网站OfficePlushttps://www.officeplus.cn/
    模板网站稻壳儿https://www.docer.com/
    图标资源阿里巴巴图标库https://www.iconfont.cn/
    图片资源Unsplashhttps://unsplash.com/
    图片资源Pexelshttps://www.pexels.com/
    学习平台B站PPT教程搜索”PPT制作教程”
    公众号旁门左道PPT微信搜索
    公众号秋叶PPT微信搜索

    结语

    PPT制作是一项实用技能,不需要天赋,只需要练习。

    核心要点回顾

    1. 配色统一:一个主色调贯穿全文
    2. 排版对齐:元素对齐,整洁大方
    3. 内容提炼:文字精简,重点突出
    4. 图文结合:图表比文字更有说服力
    5. 风格一致:全篇保持统一的视觉风格

    记住这五点,你的PPT就已经比80%的人好看了。

    剩下的,就是多看、多练、多模仿。加油!

    本文由自学导航网站整理发布,定期更新优质办公软件学习资源。

  • UI设计自学教程 | UI学习资源 | 免费在线课程

    UI设计自学教程 | UI学习资源 | 免费在线课程

    UI设计是什么?好入门吗?

    很多人听到”UI设计”就觉得很专业、很难。确实,UI设计需要掌握的技能不少,但它绝对不是高不可攀的。恰恰相反,UI设计的入门门槛在互联网行业里算是比较低的。

    UI设计到底做什么?

    UI(User Interface)设计,简单说就是设计用户界面。你每天用的APP、刷的网页、点的小程序,这些界面的布局、配色、图标、按钮,都是UI设计师的工作成果。

    举个例子,你打开微信,底部那个导航栏、聊天列表的排版、输入框的样式,这些都是UI设计师一笔一笔画出来的。

    为什么说UI设计好入门?

    1. 工具简单:Figma、即时设计这些工具,免费且容易上手
    2. 学习资源丰富:B站、设计网站上有海量教程
    3. 临摹难度低:扁平化设计流行后,大部分界面就是色块+文字
    4. 硬件要求不高:普通笔记本就能跑动设计软件

    当然,入门容易但精通难。想成为优秀的UI设计师,需要不断学习设计理论、提升审美、积累项目经验。但这条路是走得通的。

    UI 自学全流程配图 - 工具入门、设计基础、临摹练习、项目实战学习路径,从新手到职业设计师成长路线

    第一步:了解UI设计要学什么

    UI设计师的核心能力

    plaintext

    视觉设计能力 → 交互设计能力 → 用户体验思维 → 设计工具熟练度
    

    具体要掌握的知识

    1. 设计工具

    工欲善其事,必先利其器。UI设计师最常用的工具:

    工具平台费用特点
    Figma全平台免费协作功能强,业内最流行
    即时设计国产免费中文界面,对新人友好
    SketchMac专属$99/年插件生态丰富
    Adobe XD全平台免费和PS/AI无缝衔接

    新手推荐从Figma开始,它是目前行业内最主流的工具,学会后找工作最吃香。

    2. 设计基础理论

    • 色彩搭配:主色、辅色、强调色的使用
    • 排版布局:对齐、对比、亲密性、重复
    • 图标设计:线性图标、面性图标
    • 字体选择:衬线体、非衬线体的使用场景

    3. 设计规范

    • iOS设计规范:苹果的HIG(Human Interface Guidelines)
    • Material Design:谷歌的安卓设计语言
    • 设计系统:组件化、模块化的设计思维

    4. 交互设计基础

    • 用户流程图设计
    • 页面跳转逻辑
    • 交互反馈设计(点击、滑动、加载等)

    第二步:选择合适的工具

    Figma入门指南

    Figma是现在UI设计圈当之无愧的”一哥”,它的优势:

    • 浏览器就能用:不用下载客户端
    • 实时协作:可以和别人同时编辑一个文件
    • 社区资源丰富:有大量免费组件和模板
    • 导出方便:支持各种格式

    Figma基本操作

    1. 创建画板(Frame)

    • 按F键快速创建画板
    • 常用尺寸:iPhone(375×812)、Android(360×640)、Web(1440×900)

    2. 基础绘图

    • 矩形(R):画卡片、按钮背景
    • 椭圆(O):画头像、图标
    • 文字(T):输入文字
    • 钢笔(P):画自定义形状

    3. 图层管理

    • 左侧是图层列表,类似PS的图层面板
    • 命名规范很重要,方便查找

    4. 组件化设计

    • 把重复使用的元素变成组件(Component)
    • 修改组件母版,所有实例自动更新
    • 这是设计系统的基础

    Figma学习资源

    资源内容链接
    Figma官方教程官方出品的入门指南https://help.figma.com/
    B站Figma教程中文视频讲解搜索”Figma入门教程”
    即时设计国产替代,中文友好https://js.design/
    Figma Community社区模板和组件Figma软件内搜索

    第三步:掌握设计基础理论

    色彩搭配

    颜色是界面的灵魂。好的配色让界面舒适,差的配色让人想关掉页面。

    1. 色彩基础知识

    • 色相:红、橙、黄、绿、蓝、紫
    • 明度:颜色的明暗程度
    • 饱和度:颜色的鲜艳程度

    2. 界面配色原则

    • 60-30-10法则:主色占60%,辅色占30%,强调色占10%
    • 邻近色搭配:色轮上相邻的颜色,搭配和谐
    • 对比色突出:需要强调的内容用对比色

    3. 常见配色网站

    排版设计

    排版是UI设计的基本功,很多新手做出来的界面”土”,问题往往出在排版上。

    四大原则

    1. 对齐(Alignment)

    页面元素要有明确的对齐线,不能东倒西歪。常用对齐方式:

    • 左对齐(最常用)
    • 居中对齐(标题、卡片)
    • 右对齐(数字、金额)

    2. 对比(Contrast)

    重要信息和次要信息要有对比:

    • 字号对比:大标题和小正文
    • 颜色对比:主色和灰色
    • 粗细对比:粗体标题和正常正文

    3. 亲密性(Proximity)

    相关的内容放在一起,不相关的内容拉开距离:

    • 表单:标签和输入框最近
    • 卡片:标题、内容、按钮是一组

    4. 重复(Repetition)

    页面中的样式要保持一致性:

    • 相同的元素用相同的样式
    • 统一的间距规范
    • 统一的圆角大小

    字体选择

    字体选对了,界面质感提升一大截。

    1. 无衬线体(推荐用于界面)

    • 思源黑体:免费开源,Google和Adobe出品
    • 苹方字体:iOS系统字体
    • Roboto:Android系统字体

    2. 衬线体(一般用于正文)

    • 思源宋体:适合阅读长文
    • Noto Serif:Google字体库

    3. 字号规范

    场景字号说明
    大标题24-32px页面主标题
    副标题18-20px区块标题
    正文14-16px主要阅读内容
    说明文字12px辅助说明

    第四步:系统学习路径

    入门阶段(1-2个月)

    目标:掌握工具,能临摹简单界面

    学习内容

    1. 工具入门(第1-2周)
      • 安装Figma或即时设计
      • 熟悉基本操作:画板、形状、图层
      • 完成简单图形临摹(登录页、列表页)

    2. 设计规范(第3-4周)
      • 学习iOS和Android设计规范
      • 了解移动端和PC端的区别
      • 掌握常见组件的尺寸(导航栏、标签栏)

    3. 基础临摹(第5-8周)
      • 临摹3-5个完整APP界面
      • 从简单到复杂(工具类→社交类→电商类)
      • 记录问题和解决方法

    每日练习建议

    • 早起刷Dribbble、站酷
    • 每天临摹1个界面组件
    • 每周完成1个完整页面

    进阶阶段(2-3个月)

    目标:独立设计简单页面

    学习内容

    1. 设计系统
      • 学习组件设计
      • 搭建自己的组件库
      • 设计规范文档

    2. 交互设计
      • 学习用户流程设计
      • 了解常见交互模式
      • 制作简单交互原型

    3. 作品积累
      • 设计2-3个完整APP
      • 整理作品集
      • 模拟面试作品讲解

    高级阶段(持续学习)

    目标:达到就业水平

    提升方向

    • 提升审美,多看优秀作品
    • 学习用户体验设计
    • 了解运营设计、B端设计
    • 准备完整作品集

    第五步:高质量学习资源

    视频教程

    B站UP主推荐

    UP主内容特点适合阶段
    黑马程序员体系完整,适合零基础入门
    索索实验室设计技巧分享进阶
    酸梅果子的设计铺实战项目讲解进阶
    野生数据研究所设计师职业发展全阶段

    平台课程

    设计社区

    灵感来源

    学习参考

    工具资源

    图标库

    配色工具

    样机Mockup

    第六步:临摹练习方法

    临摹的正确姿势

    很多新手临摹就是”照着画”,这样进步很慢。正确的临摹要有思考:

    1. 分析阶段

    拿到一个界面,先观察:

    • 整体布局是怎样的?(卡片式?列表式?)
    • 用了什么颜色?(主色是什么?背景色?)
    • 信息层次怎么安排的?(哪些是标题?哪些是正文?)

    2. 临摹阶段

    • 先从框架开始(画板、导航栏、内容区)
    • 再填充细节(文字、图片、图标)
    • 最后调整细节(间距、颜色、圆角)

    3. 复盘阶段

    临摹完成后,问自己:

    • 这个设计好在哪里?
    • 如果我来做会怎么做?
    • 有没有可以改进的地方?

    临摹素材推荐

    APP界面

    1. 微信(社交类基础)
    2. 小红书(内容平台,布局复杂)
    3. 淘宝(电商类,综合性强)
    4. Keep(运动类,风格清新)

    临摹顺序建议

    plaintext

    登录注册页 → 首页 → 列表页 → 详情页 → 个人中心
    

    第七步:打造作品集

    作品集的重要性

    找工作最重要的就是作品集,它是你的敲门砖。一个好的作品集应该展示:

    • 设计能力(视觉、配色、排版)
    • 思考能力(为什么这样设计)
    • 执行能力(完整的设计流程)

    作品集包含什么

    1. 作品数量

    • 2-3个完整APP设计(主要)
    • 5-10个界面组件(次要)
    • 1-2个其他设计作品(加分项)

    2. 每个作品的展示内容

    • 项目背景(为什么做这个)
    • 设计目标(要解决什么问题)
    • 用户画像(目标用户是谁)
    • 设计流程(调研→方案→验证)
    • 界面展示(高质量截图+标注)
    • 设计总结(学到了什么)

    3. 注意事项

    • 作品要真实,不要造假
    • 展示思考过程,不只是效果图
    • 注重版式,作品集本身也要设计感

    作品集展示工具

    • Figma:可以直接分享链接
    • 即时设计:支持一键导出
    • Behance:专业设计作品展示平台
    • 个人网站:牛客网、GitHub Pages

    设计师常见问题

    Q:没有美术基础能学UI设计吗?

    A:当然可以!UI设计不需要你会画画,关键是对设计理论和工具的掌握。很多成功的UI设计师之前都是非设计专业的。

    Q:UI设计会不会被AI取代?

    A:短期内不会。AI可以辅助设计,但无法替代设计师的创意和思考。而且AI时代,设计师更需要提升自己的核心竞争力。

    Q:学多久能找到工作?

    A:因人而异。投入度高、练习多的,3-6个月可以找到实习;系统学习加实战项目的,6-12个月可以找到正式工作。关键是作品集的质量。

    Q:需要报培训班吗?

    A:不一定。如果自律性强、搜集能力好,完全可以自学。如果需要系统指导和项目实战,可以考虑报班。选择培训班要看口碑和师资,不要只看价格。

    学习路线总结

    plaintext

    第一月:工具入门
    ├─ 安装Figma/即时设计
    ├─ 熟悉基本操作
    └─ 临摹简单界面
    
    第二月:设计基础
    ├─ 学习色彩搭配
    ├─ 掌握排版原则
    └─ 了解设计规范
    
    第三月:综合练习
    ├─ 独立设计简单页面
    ├─ 学习交互基础
    └─ 整理设计资产
    
    第四月-第六月:作品打造
    ├─ 设计2-3个完整APP
    ├─ 搭建组件库
    └─ 准备作品集
    

    相关资源推荐

    资源类型推荐名称链接
    设计工具Figmahttps://www.figma.com/
    设计工具即时设计https://js.design/
    学习平台B站UI设计教程搜索”UI设计入门”
    设计社区Dribbblehttps://dribbble.com/
    设计社区站酷https://www.zcool.com.cn/
    图标资源Iconifyhttps://icon-sets.iconify.design/
    配色工具Coolorshttps://coolors.co/

    结语

    UI设计是一个入门容易、进阶难的职业。入门阶段,你需要快速掌握工具和基础理论,多临摹、多练习;进阶阶段,你需要提升审美、积累项目经验、形成自己的设计方法论。

    记住这几点

    1. 工具只是工具,重要的是设计思维
    2. 多看优秀作品,提升审美
    3. 动手实践,别只看不练
    4. 保持热情,设计需要热爱

    UI设计这条路很长,但只要你愿意走,就一定能走到目的地。加油,未来的UI设计师!

    本文由自学导航网站整理发布,定期更新优质设计学习资源。

  • Java编程自学教程 | Java学习资源 | 免费在线课程

    Java编程自学教程 | Java学习资源 | 免费在线课程

    为什么选择Java?

    在编程世界里,Java绝对是个”老大哥”级别的存在。从1995年诞生至今,Java一直是企业级开发的主力军。TIOBE编程语言排行榜上,Java常年稳居前五,国内百度指数日均搜索量超过13000次,说明什么?说明这语言依然很香!

    Java的应用场景特别广泛

    • 企业级后台开发:银行系统、电商平台后台基本都用Java
    • Android应用开发:虽然Kotlin崛起,但Java依然是Android开发的主流语言
    • 大数据技术:Hadoop、Spark这些大数据框架都是Java写的
    • 服务器端应用:Spring、SpringBoot这些框架让Java开发效率飞起

    所以学Java,就业面是真的宽。不信你去招聘网站搜搜,Java开发工程师的岗位数量永远名列前茅。

    Java 自学全流程配图 - 基础语法、数据库、Web 开发、Spring Boot 框架学习路径,代码实战与项目演练指南

    第一步:做好准备工作

    硬件准备

    说实话,Java对电脑要求真不高。你那台大学用了四年的老笔记本可能都够用。我建议:

    • 内存:8GB起步,16GB更舒服(跑IDEA不卡)
    • 硬盘:256GB SSD足够,现在电脑基本都标配
    • CPU:i5或同等性能就行,别被那些”必须i7″的帖子吓到

    软件准备

    **JDK(Java Development Kit)**是必须装的,这是Java开发的基础环境。

    下载地址:https://www.oracle.com/java/technologies/downloads/

    建议选择JDK 17或JDK 21 LTS版本,这两个是长期支持版本,稳定性好,企业用得多。

    **IDE(集成开发环境)**的选择:

    IDE特点适合人群
    IntelliJ IDEA功能强大,智能提示超准进阶开发者
    Eclipse免费开源,插件丰富习惯免费工具的
    VS Code轻量级,可配置喜欢简洁的

    新手我推荐IntelliJ IDEA社区版,免费且足够用,而且企业里也大量使用这个。

    第二步:Java基础入门(1-2个月)

    学习路线

    plaintext

    Java基础语法 → 面向对象 → 集合框架 → 异常处理 → IO流 → 常用类库
    

    核心知识点

    1. Java基础语法

    这是地基,必须打牢:

    • 变量和数据类型(int、double、String、boolean…)
    • 运算符(算术、比较、逻辑)
    • 流程控制(if-else、for、while、switch)
    • 数组(一维数组、二维数组)

    java

    // 来个Hello World热身
    public class HelloWorld {
        public static void main(String[] args) {
            System.out.println("Hello, Java!");
        }
    }
    

    2. 面向对象编程(OOP)

    这是Java的核心思想,必须深入理解:

    • 类和对象(类是模板,对象是实例)
    • 封装(把数据藏起来,给统一访问入口)
    • 继承(子类继承父类,复用代码)
    • 多态(同一个方法,不同对象不同表现)

    java

    // 面向对象示例:定义一个学生类
    public class Student {
        private String name;  // 封装:私有属性
        private int age;
        
        // 构造方法
        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }
        
        // Getter和Setter
        public String getName() {
            return name;
        }
        
        public void study() {
            System.out.println(name + "正在学习Java");
        }
    }
    

    3. 集合框架

    Java的灵魂工具箱,开发中天天用:

    • List(ArrayList、LinkedList):有序可重复
    • Set(HashSet、TreeSet):无序不可重复
    • Map(HashMap、TreeMap):键值对存储

    java

    import java.util.ArrayList;
    import java.util.HashMap;
    
    public class CollectionDemo {
        public static void main(String[] args) {
            // 列表:存多个学生
            ArrayList<String> students = new ArrayList<>();
            students.add("张三");
            students.add("李四");
            
            // 映射:学号-姓名
            HashMap<Integer, String> studentMap = new HashMap<>();
            studentMap.put(1001, "张三");
            studentMap.put(1002, "李四");
        }
    }
    

    4. 异常处理

    程序出错了怎么办?用try-catch捕获:

    java

    try {
        int result = 10 / 0;  // 会抛出ArithmeticException
    } catch (ArithmeticException e) {
        System.out.println("除数不能为0!");
    } finally {
        System.out.println("这里一定会执行");
    }
    

    推荐学习资源

    在线课程

    1. B站 – 韩顺平Java零基础入门
      • 优点:讲得细,适合零基础,每个知识点都有代码演示
      • 链接:搜索”韩顺平 零基础学Java”

    2. 尚硅谷Java零基础教程
      • 优点:视频质量高,课程体系完整
      • 链接:搜索”尚硅谷 Java基础”

    3. 菜鸟教程Java教程

    书籍

    • 《Java核心技术卷I》:经典入门书,知识点全面
    • 《Head First Java》:图文并茂,适合小白

    第三步:数据库与Web基础(1-2个月)

    数据库(MySQL)

    动态网站离不开数据存储,MySQL是入门首选:

    核心知识点

    • DDL(数据定义语言):CREATE、DROP、ALTER
    • DML(数据操作语言):INSERT、UPDATE、DELETE
    • DQL(数据查询语言):SELECT、WHERE、ORDER BY
    • 表关联:JOIN、LEFT JOIN

    sql

    -- 创建学生表
    CREATE TABLE student (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(50) NOT NULL,
        age INT,
        create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    );
    
    -- 插入数据
    INSERT INTO student (name, age) VALUES ('张三', 20), ('李四', 21);
    
    -- 查询学生
    SELECT * FROM student WHERE age > 20 ORDER BY age DESC;
    

    学习资源

    • 视频:MySQL基础教程(B站搜索”MySQL基础教程 通俗易懂”)
    • 练习:SQLZoo(https://sqlzoo.net/)在线练习

    前端基础(HTML/CSS/JavaScript)

    Web开发三件套,不用精通但要会:

    • HTML:网页骨架,了解常用标签就行
    • CSS:美化网页,让页面好看
    • JavaScript:网页交互,实现动态效果

    JDBC

    Java连接数据库的官方API,必须掌握:

    java

    import java.sql.*;
    
    public class JdbcDemo {
        public static void main(String[] args) {
            String url = "jdbc:mysql://localhost:3306/test";
            String user = "root";
            String password = "123456";
            
            try (Connection conn = DriverManager.getConnection(url, user, password);
                 Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery("SELECT * FROM student")) {
                
                while (rs.next()) {
                    System.out.println("姓名:" + rs.getString("name"));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    第四步:JavaWeb开发(1-2个月)

    学习路线

    plaintext

    Servlet → JSP → Session/Cookie → Filter → Listener → MVC模式
    

    核心知识点

    Servlet:JavaWeb的核心,处理HTTP请求:

    java

    @WebServlet("/hello")
    public class HelloServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
                throws ServletException, IOException {
            resp.setContentType("text/html;charset=UTF-8");
            PrintWriter out = resp.getWriter();
            out.println("<h1>Hello, JavaWeb!</h1>");
        }
    }
    

    JSP:让HTML里能写Java代码(虽然现在不推荐,但要知道):

    jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <body>
        <h1>当前时间:<%= new java.util.Date() %></h1>
    </body>
    </html>
    

    Session和Cookie

    • Cookie:存在浏览器,小量数据
    • Session:存在服务器,更安全

    第五步:主流框架(2-3个月)

    Spring Boot

    现在企业做JavaWeb,基本都是Spring Boot的天下了。它把Spring家族的东西整合好,让你”开箱即用”。

    特点

    • 快速构建项目
    • 自动配置
    • 内嵌服务器(Tomcat、Jetty)
    • 生态丰富

    java

    @SpringBootApplication
    @RestController
    public class DemoApplication {
        
        @GetMapping("/hello")
        public String hello() {
            return "Hello, Spring Boot!";
        }
        
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    }
    

    MyBatis

    数据库访问层框架,比JDBC爽多了:

    xml

    <!-- mapper接口 -->
    public interface UserMapper {
        @Select("SELECT * FROM user WHERE id = #{id}")
        User findById(Long id);
        
        @Insert("INSERT INTO user(name) VALUES(#{name})")
        void insert(User user);
    }
    

    学习资源

    第六步:项目实战(持续)

    学了这么多,不做项目等于没学。推荐几个适合新手的项目:

    入门级

    1. 个人博客系统

    • 技术栈:Spring Boot + MyBatis + Thymeleaf
    • 功能:文章发布、分类、标签、评论
    • 学习资源:GitHub搜索”blog-system”

    2. 员工管理系统

    • 技术栈:Spring Boot + MySQL + Layui
    • 功能:CRUD、员工管理、部门管理
    • 学习价值:完整走一遍增删改查

    进阶级

    3. 秒杀系统

    • 技术栈:Spring Boot + Redis + RabbitMQ
    • 学习重点:高并发、缓存、消息队列
    • 面试价值:秒杀是高频面试题

    4. 仿外卖平台

    • 技术栈:Spring Boot + MySQL + Redis + 微信小程序
    • 功能:用户端、商家端、配送端

    学习建议与心态调整

    给自学者的几点忠告

    1. 别只看视频,要动手敲代码

    这是最大的坑。很多人”刷”完了整套视频,觉得自己会了,结果一动手就抓瞎。正确姿势是:看5分钟视频,立刻关掉,自己敲一遍,敲不出来再回去看。

    2. 遇到问题先自己解决

    善用搜索引擎和Stack Overflow。程序员80%的时间都在解决bug,这是常态。

    3. 坚持写学习笔记

    推荐用Notion或语雀,记录每天学了什么、踩了什么坑。笔记是你最宝贵的财富。

    4. 加入学习社群

    一个人自学容易放弃,找几个志同道合的伙伴,互相监督,共同进步。

    学习时间规划

    阶段内容建议时间
    入门期Java基础、面向对象每天2小时,持续6-8周
    进阶期数据库、Web基础每天3小时,持续6-8周
    框架期Spring Boot、MyBatis每天3小时,持续8-10周
    项目期实战项目每天4小时,持续4-6周

    相关资源推荐

    资源类型推荐名称链接
    在线课程菜鸟教程Javahttps://www.runoob.com/java/java-tutorial.html
    在线课程B站韩顺平Java零基础搜索”韩顺平 零基础学Java”
    在线课程尚硅谷Java基础搜索”尚硅谷 Java基础教程”
    书籍Java核心技术卷I各大电商平台有售
    书籍Head First Java各大电商平台有售
    社区CSDN Java频道https://www.csdn.net/
    社区掘金Javahttps://juejin.cn/

    结语

    Java自学是一条漫长的路,但只要方向对了,坚持下去就会有收获。从Hello World到独立完成项目,每个程序员都是这么过来的。

    记住:编程不是天赋,而是技能。技能靠的是练习,不是智商。你不需要有多聪明,只需要足够坚持。

    现在就去装JDK,打开IDE,开始你的Java编程之旅吧!有问题随时搜索引擎,你会感谢自己当初的选择。

    加油,未来的Java工程师!

    本文由自学导航网站整理发布,定期更新优质编程学习资源。

  • Linux命令行实战指南:从入门到精通

    Linux命令行实战指南:从入门到精通

    一、Linux基础入门

    什么是Linux命令行?

    Linux命令行(Command Line Interface,CLI)是与Linux系统交互的主要方式之一。与图形界面不同,命令行通过文本指令来控制系统,虽然学习曲线较陡,但具有以下优势:

    • 高效快捷:熟练后可实现秒级操作
    • 远程连接:通过SSH轻松管理远程服务器
    • 可自动化:配合脚本实现批量处理
    • 资源节省:不消耗图形界面资源
    • 精确控制:可实现复杂精细的操作
    Linux命令示例配图 - 常用命令操作展示

    打开终端

    bash

    # Ubuntu/Debian:Ctrl + Alt + T
    # macOS:Command + Space 搜索"Terminal"
    # Windows:WSL或安装Git Bash
    
    # 远程连接Linux服务器
    ssh username@server_ip
    ssh -p 2222 username@server_ip  # 指定端口
    ssh -i ~/.ssh/private_key username@server_ip  # 密钥登录
    

    基础命令

    bash

    # 查看当前用户
    whoami
    
    # 查看主机名
    hostname
    
    # 查看当前目录
    pwd
    
    # 查看当前日期时间
    date
    
    # 查看日历
    cal
    cal 2026  # 查看全年日历
    
    # 显示帮助信息
    man ls          # 查看命令手册
    ls --help       # 快速帮助
    help cd         # Shell内置命令帮助
    

    二、文件和目录管理

    目录操作

    bash

    # 切换目录
    cd /home          # 切换到绝对路径
    cd ./folder       # 切换到相对路径
    cd ..             # 返回上级目录
    cd ~              # 返回用户主目录
    cd -              # 返回上一次目录
    
    # 查看目录内容
    ls                # 简单列表
    ls -l             # 详细列表
    ls -a             # 显示隐藏文件
    ls -lh            # 人类可读大小
    ls -lt            # 按修改时间排序
    ls -lS            # 按文件大小排序
    ls -R             # 递归显示子目录
    
    # 创建目录
    mkdir folder              # 创建单个目录
    mkdir -p folder/sub        # 递归创建
    mkdir -p folder1 folder2   # 同时创建多个
    
    # 删除目录
    rmdir folder              # 删除空目录
    rm -rf folder             # 删除非空目录(慎用)
    

    文件操作

    bash

    # 创建文件
    touch file.txt           # 创建空文件
    touch file1.txt file2.txt # 创建多个
    touch -t 202604160830 file.txt  # 设置时间戳
    
    # 复制文件
    cp source.txt dest.txt              # 复制
    cp -r folder/ backup/               # 递归复制目录
    cp -i source.txt dest.txt           # 询问确认
    cp -v source.txt dest.txt          # 显示过程
    cp -p source.txt dest.txt           # 保留属性
    
    # 移动/重命名
    mv old.txt new.txt          # 重命名
    mv file.txt /path/to/       # 移动文件
    mv -i file.txt /path/       # 询问确认
    mv folder1 folder2          # 重命名目录
    
    # 删除文件
    rm file.txt                 # 删除单个
    rm -i file.txt              # 询问确认
    rm -f file.txt             # 强制删除
    rm -rf folder              # 删除目录
    
    # 查看文件类型
    file image.jpg
    file document.pdf
    

    文件查找

    bash

    # find命令
    find /home -name "*.txt"                    # 按名称查找
    find /home -type f -name "*.log"            # 查找所有日志文件
    find /home -type d -name "backup"           # 查找目录
    find /home -mtime -7                         # 7天内修改的文件
    find /home -size +100M                       # 大于100MB的文件
    find /home -user username                    # 按用户查找
    find /home -perm 755                         # 按权限查找
    find /home -name "*.tmp" -delete            # 找到并删除
    
    # locate命令(更快,需先建立数据库)
    locate filename
    updatedb  # 更新文件数据库
    
    # which和whereis
    which python3        # 查找命令位置
    whereis python3     # 查找命令和手册位置
    

    三、文本查看与处理

    查看文件内容

    bash

    # cat命令
    cat file.txt                    # 显示全部内容
    cat -n file.txt                # 显示行号
    cat -b file.txt                # 非空行编号
    cat file1.txt file2.txt        # 合并显示
    cat > newfile.txt              # 创建并输入内容
    cat file1.txt >> file2.txt     # 追加内容
    
    # more和less(分页查看)
    more file.txt      # 空格下一页,q退出
    less file.txt      # 可上下翻页,/搜索
    
    # head和tail
    head file.txt                # 默认前10行
    head -n 20 file.txt          # 前20行
    tail file.txt                # 默认后10行
    tail -n 20 file.txt          # 后20行
    tail -f log.txt              # 实时跟踪日志
    tail -f -s 2 log.txt         # 每2秒刷新
    
    # wc命令
    wc file.txt      # 行数、词数、字符数
    wc -l file.txt   # 只看行数
    wc -w file.txt   # 只看词数
    wc -c file.txt   # 只看字符数
    

    文本处理三剑客

    grep – 文本搜索

    bash

    # 基本用法
    grep "pattern" file.txt                 # 搜索匹配行
    grep -i "pattern" file.txt              # 忽略大小写
    grep -n "pattern" file.txt              # 显示行号
    grep -v "pattern" file.txt             # 反向选择
    grep -c "pattern" file.txt             # 统计匹配行数
    grep -r "pattern" /path/               # 递归搜索
    
    # 正则表达式
    grep "^root" /etc/passwd                # 以root开头
    grep "bash$" /etc/passwd                # 以bash结尾
    grep "[0-9]\{3\}" file.txt              # 匹配三位数字
    grep -E "error|warning" log.txt        # 多个匹配
    
    # 输出控制
    grep -l "pattern" *.txt                 # 只显示文件名
    grep -o "pattern" file.txt             # 只输出匹配部分
    grep -A 2 "pattern" file.txt           # 显示匹配后2行
    grep -B 2 "pattern" file.txt           # 显示匹配前2行
    grep -C 2 "pattern" file.txt           # 显示前后各2行
    

    sed – 流编辑器

    bash

    # 基本替换
    sed 's/old/new/' file.txt               # 替换每行第一个
    sed 's/old/new/g' file.txt              # 替换所有
    sed 's/old/new/2' file.txt              # 替换第二个
    
    # 替换并保存
    sed -i 's/old/new/g' file.txt           # 直接修改文件
    sed -i.bak 's/old/new/g' file.txt      # 备份后修改
    
    # 限定范围
    sed '1,10s/old/new/g' file.txt         # 1-10行
    sed '/start/,/end/s/old/new/g' file.txt  # start到end之间
    
    # 删除行
    sed '3d' file.txt                       # 删除第3行
    sed '1,5d' file.txt                     # 删除1-5行
    sed '/pattern/d' file.txt              # 删除匹配行
    
    # 显示特定行
    sed -n '5,10p' file.txt                # 显示5-10行
    sed -n '/pattern/p' file.txt           # 显示匹配行
    

    awk – 文本分析

    bash

    # 基本用法
    awk '{print $1}' file.txt               # 打印第一列
    awk '{print $1, $3}' file.txt          # 打印第1、3列
    awk '{print NF}' file.txt              # 打印列数
    
    # 字段分隔符
    awk -F: '{print $1}' /etc/passwd      # 以:分隔
    awk -F'[,;]' '{print $2}' file.txt     # 多个分隔符
    
    # 条件判断
    awk '{if ($3 > 18) print $1}' file.txt
    awk '$3 > 18 {print $1}' file.txt
    
    # 内置变量
    awk '{print NR, $0}' file.txt          # NR当前行号
    awk '{print NF, $NF}' file.txt         # NF列数, $NF最后一列
    awk 'BEGIN {FS=":"} {print $1}' file.txt  # FS字段分隔符
    awk 'BEGIN {OFS="-"} {print $1, $2}' file.txt  # OFS输出分隔符
    
    # 统计计算
    awk '{sum+=$3} END {print sum}' file.txt
    awk '{count++} END {print count}' file.txt
    

    四、权限管理

    理解权限

    Linux的文件权限分为三组:所有者(owner)、用户组(group)、其他人(others)。每组有三种权限:读(r)、写(w)、执行(x)。

    bash

    # 查看文件权限
    ls -l file.txt
    # -rw-r--r--  1 user group  1024 Apr 16 08:30 file.txt
    # -文件 d目录 l链接
    # rw-所有者权限
    # r--用户组权限
    # r--其他人权限
    
    # 权限数值
    # r=4, w=2, x=1
    # rwx = 7
    # rw- = 6
    # r-x = 5
    # r-- = 4
    

    修改权限

    bash

    # 文字设定法
    chmod u+x file.txt              # 给所有者添加执行权限
    chmod g-w file.txt              # 给用户组移除写权限
    chmod o+r file.txt              # 给其他人添加读权限
    chmod a+x file.txt              # 给所有人添加执行权限
    chmod +x file.txt               # 同上
    
    # 数字设定法
    chmod 755 file.txt              # rwxr-xr-x
    chmod 644 file.txt              # rw-r--r--
    chmod 700 file.txt              # rwx------
    chmod 600 file.txt              # rw-------
    chmod 777 file.txt              # rwxrwxrwx(慎用)
    
    # 递归设置
    chmod -R 755 folder/           # 递归设置目录权限
    chmod -R +x folder/*.sh        # 只设置shell文件
    

    修改所有者

    bash

    # 修改文件所有者
    chown user file.txt
    
    # 修改所有者和用户组
    chown user:group file.txt
    
    # 递归修改
    chown -R user:group folder/
    
    # 只修改用户组
    chgrp group file.txt
    chgrp -R group folder/
    

    特殊权限

    bash

    # SUID(4) - 执行时以所有者身份运行
    chmod 4755 /usr/bin/passwd     # passwd命令
    chmod u+s /usr/bin/script
    
    # SGID(2) - 执行时以用户组身份运行
    chmod 2755 /usr/local/bin/script
    
    # Sticky Bit(1) - 只允许所有者删除
    chmod 1777 /tmp                # 共享目录
    

    五、进程管理

    查看进程

    bash

    # 查看所有进程
    ps aux              # BSD风格
    ps -ef              # System V风格
    ps -efH             # 树状显示
    
    # 查找特定进程
    ps aux | grep nginx
    ps -ef | grep python
    
    # 实时监控进程
    top                 # 动态显示
    top -u username     # 只看指定用户
    top -p 1234         # 监控指定PID
    htop                # 增强版top(需安装)
    
    # 按资源排序
    top  # 然后按 M(内存)P(CPU)T(时间)
    

    进程操作

    bash

    # 以后台方式运行
    command &
    nohup command &        # 忽略挂断信号
    nohup command > output.log 2>&1 &
    
    # 切换到后台/前台
    Ctrl+Z                 # 挂起当前进程
    jobs                   # 查看后台任务
    fg %1                  # 切换到前台
    bg %1                  # 后台继续运行
    
    # 终止进程
    kill PID              # 正常终止
    kill -9 PID           # 强制终止
    kill -15 PID          # 礼貌终止(默认)
    killall process_name  # 按名称终止
    pkill -f pattern      # 按模式终止
    
    # 查看进程树
    pstree
    pstree -p username    # 指定用户
    

    系统资源

    bash

    # 查看内存
    free
    free -h              # 人类可读
    free -m              # 以MB为单位
    
    # 查看磁盘
    df -h                # 磁盘使用
    df -i                # inode使用
    
    # 查看CPU
    lscpu                # CPU详细信息
    nproc                # CPU核心数
    
    # 资源监控
    vmstat 1 5           # 每秒1次,共5次
    iostat               # I/O统计
    netstat -tuln        # 网络连接
    ss -tuln             # 同上,更快
    

    六、用户和组管理

    用户操作

    bash

    # 创建用户
    useradd -m username              # 创建用户并创建家目录
    useradd -m -s /bin/bash username # 指定shell
    useradd -m -G sudo username      # 添加到sudo组
    
    # 设置密码
    passwd username
    
    # 修改用户
    usermod -l newname oldname       # 重命名
    usermod -L username              # 锁定账户
    usermod -U username              # 解锁账户
    usermod -aG group username       # 添加到组
    
    # 删除用户
    userdel username                 # 删除用户
    userdel -r username              # 删除用户及家目录
    

    组操作

    bash

    # 创建组
    groupadd developers
    
    # 添加用户到组
    usermod -aG developers username
    gpasswd -a username developers
    
    # 查看用户组
    groups username
    id username
    
    # 删除组
    groupdel developers
    

    sudo权限

    bash

    # 添加sudo权限
    usermod -aG sudo username        # Ubuntu/Debian
    usermod -aG wheel username       # CentOS/RHEL
    
    # 编辑sudoers(危险)
    visudo                          # 安全编辑
    # 添加:username ALL=(ALL) ALL
    # 无密码:username ALL=(ALL) NOPASSWD: ALL
    

    七、网络配置

    网络查看

    bash

    # 查看IP和网卡
    ip addr
    ip addr show eth0
    ifconfig                    # 需要net-tools
    
    # 查看网络连接
    netstat -tuln               # 监听端口
    netstat -anp                # 所有连接
    ss -tuln                    # 更快
    
    # 网络诊断
    ping -c 4 example.com       # 测试连通性
    traceroute example.com       # 路由追踪(需要安装)
    tracepath example.com
    nslookup example.com         # DNS查询
    dig example.com
    host example.com
    
    # 查看路由
    ip route
    route -n
    

    网络配置

    bash

    # 临时设置IP(重启后失效)
    ip addr add 192.168.1.100/24 dev eth0
    ip addr del 192.168.1.100/24 dev eth0
    
    # 启用/禁用网卡
    ip link set eth0 up
    ip link set eth0 down
    
    # 设置网关
    ip route add default via 192.168.1.1
    
    # 永久配置(Ubuntu Netplan)
    # /etc/netplan/*.yaml
    

    远程传输

    bash

    # scp(安全复制)
    scp file.txt user@host:/path/           # 上传
    scp user@host:/path/file.txt ./         # 下载
    scp -r folder/ user@host:/path/         # 递归复制
    scp -P 2222 file.txt user@host:/path/   # 指定端口
    
    # rsync(同步)
    rsync -avz source/ user@host:/dest/     # 同步目录
    rsync -avz --delete source/ user@host:/dest/  # 删除目标多余文件
    rsync -avz -e "ssh -p 2222" source/ user@host:/dest/  # 指定端口
    

    八、压缩和解压

    tar命令

    bash

    # 打包
    tar -cvf archive.tar folder/        # 打包
    tar -cvzf archive.tar.gz folder/    # 打包并压缩gzip
    tar -cvjf archive.tar.bz2 folder/   # 打包并压缩bzip2
    tar -cvJf archive.tar.xz folder/    # 打包并压缩xz
    
    # 解压
    tar -xvf archive.tar                # 解包
    tar -xzvf archive.tar.gz           # 解压gzip
    tar -xjvf archive.tar.bz2          # 解压bzip2
    tar -xJvf archive.tar.xz           # 解压xz
    tar -xzvf archive.tar.gz -C /dest/ # 解压到指定目录
    
    # 查看内容
    tar -tvf archive.tar               # 不解压查看
    

    zip命令

    bash

    # 压缩
    zip -r archive.zip folder/
    zip -q archive.zip *.txt
    
    # 解压
    unzip archive.zip
    unzip archive.zip -d /dest/
    unzip -l archive.zip               # 只查看内容
    

    其他格式

    bash

    # tar.gz/.tgz
    tar -czvf archive.tgz folder/
    
    # tar.xz(高压缩比)
    tar -cJvf archive.tar.xz folder/
    
    # 7z(需要安装p7zip)
    7z a archive.7z folder/
    7z x archive.7z
    

    九、系统服务管理

    systemctl

    bash

    # 启动/停止/重启服务
    sudo systemctl start nginx
    sudo systemctl stop nginx
    sudo systemctl restart nginx
    sudo systemctl reload nginx         # 重载配置
    
    # 查看状态
    sudo systemctl status nginx
    sudo systemctl is-active nginx
    sudo systemctl is-enabled nginx
    
    # 设置开机启动
    sudo systemctl enable nginx
    sudo systemctl disable nginx
    
    # 查看所有服务
    systemctl list-units --type=service
    systemctl list-unit-files --type=service
    
    # 查看失败的服务
    systemctl --failed
    

    service(旧版)

    bash

    # 对于使用SysV init的系统
    sudo service nginx start
    sudo service nginx stop
    sudo service nginx restart
    sudo service --status-all
    

    定时任务

    bash

    # 编辑crontab
    crontab -e                     # 编辑当前用户
    crontab -l                     # 查看任务
    crontab -r                     # 删除所有任务
    
    # 定时任务格式
    # * * * * * command
    # 分 时 日 月 周
    # 每分钟
    * * * * * /path/to/script.sh
    
    # 具体时间
    30 8 * * * /path/to/script.sh     # 每天8:30
    0 */2 * * * /path/to/script.sh    # 每2小时
    
    # 指定时间
    0 9 * * 1-5 /path/to/script.sh    # 工作日9点
    0 9 * * 1,3,5 /path/to/script.sh  # 周一三五9点
    
    # 输出重定向
    0 9 * * * /path/to/script.sh >> /var/log/script.log 2>&1
    
    # 查看日志
    tail -f /var/log/syslog | grep CRON
    

    十、磁盘管理

    分区和挂载

    bash

    # 查看磁盘分区
    lsblk
    fdisk -l
    parted -l
    
    # 格式化
    mkfs.ext4 /dev/sdb1
    mkfs.xfs /dev/sdb1
    mkfs.ntfs /dev/sdb1
    
    # 挂载
    mount /dev/sdb1 /mnt/data
    mount -o ro /dev/sdb1 /mnt/readonly    # 只读挂载
    
    # 卸载
    umount /mnt/data
    umount /dev/sdb1
    
    # 开机自动挂载
    # 编辑 /etc/fstab
    # /dev/sdb1 /mnt/data ext4 defaults 0 0
    

    磁盘使用分析

    bash

    # 查看磁盘使用
    df -h                # 人类可读格式
    df -i                # inode使用
    du -sh folder/       # 查看目录总大小
    du -h --max-depth=1  # 只看一级目录
    du -sh *             # 查看当前目录各文件大小
    
    # 找出大文件
    find / -size +100M
    find / -type f -size +100M -exec ls -lh {} \;
    

    十一、日志管理

    系统日志

    bash

    # 主要日志文件
    /var/log/syslog          # 系统日志(Debian/Ubuntu)
    /var/log/messages        # 系统日志(CentOS/RHEL)
    /var/log/dmesg           # 启动日志
    /var/log/auth.log        # 认证日志
    /var/log/kern.log        # 内核日志
    /var/log/nginx/          # Nginx日志
    /var/log/mysql/          # MySQL日志
    
    # journalctl(systemd系统)
    journalctl                # 查看所有日志
    journalctl -u nginx       # 特定服务日志
    journalctl -f             # 实时跟踪
    journalctl --since today  # 今天日志
    journalctl -p err         # 错误级别
    

    日志分析

    bash

    # 实时查看日志
    tail -f /var/log/syslog
    tail -f /var/log/nginx/access.log
    
    # 搜索日志
    grep "error" /var/log/syslog
    grep -E "error|warning|critical" /var/log/syslog
    
    # 统计访问量
    awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head
    
    # 找出访问最多的IP
    awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10
    

    十二、实战脚本

    自动化备份脚本

    bash

    #!/bin/bash
    # backup.sh - 自动备份脚本
    
    # 配置
    BACKUP_DIR="/backup"
    SOURCE_DIR="/var/www"
    DATE=$(date +%Y%m%d_%H%M%S)
    BACKUP_FILE="backup_${DATE}.tar.gz"
    
    # 创建备份目录
    mkdir -p "$BACKUP_DIR"
    
    # 执行备份
    tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" "$SOURCE_DIR" 2>/dev/null
    
    if [ $? -eq 0 ]; then
        echo "[$(date)] 备份成功: ${BACKUP_FILE}"
        echo "[$(date)] 备份大小: $(du -h ${BACKUP_DIR}/${BACKUP_FILE} | cut -f1)"
        
        # 清理7天前的备份
        find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
        echo "[$(date)] 清理旧备份完成"
    else
        echo "[$(date)] 备份失败" >&2
        exit 1
    fi
    

    系统监控脚本

    bash

    #!/bin/bash
    # monitor.sh - 系统监控脚本
    
    echo "========== $(date) =========="
    echo ""
    
    echo "【CPU负载】"
    uptime
    
    echo ""
    echo "【内存使用】"
    free -h
    
    echo ""
    echo "【磁盘使用】"
    df -h | grep -E "^/dev"
    
    echo ""
    echo "【网络连接】"
    echo "连接数: $(netstat -an 2>/dev/null | grep ESTABLISHED | wc -l)"
    
    echo ""
    echo "【Top5 CPU进程】"
    ps aux --sort=-%cpu | head -6
    
    echo ""
    echo "【Top5 内存进程】"
    ps aux --sort=-%mem | head -6
    

    日志清理脚本

    bash

    #!/bin/bash
    # clean_logs.sh - 日志清理脚本
    
    LOG_DIR="/var/log"
    MAX_DAYS=30
    
    # 统计清理前大小
    BEFORE=$(du -sh "$LOG_DIR" | cut -f1)
    
    # 清理日志文件
    find "$LOG_DIR" -name "*.log" -mtime +$MAX_DAYS -delete
    find "$LOG_DIR" -name "*.gz" -mtime +$MAX_DAYS -delete
    find "$LOG_DIR" -name "*.[0-9]" -mtime +$MAX_DAYS -delete
    
    # 清理空目录
    find "$LOG_DIR" -type d -empty -delete 2>/dev/null
    
    # 统计清理后大小
    AFTER=$(du -sh "$LOG_DIR" | cut -f1)
    
    echo "清理完成: $BEFORE -> $AFTER"
    

    十三、总结与进阶

    学习路径建议

    1. 入门:熟悉基本命令、文件操作、文本处理
    2. 进阶:权限管理、进程管理、网络配置
    3. 高级:Shell脚本编程、系统调优、安全加固
    4. 运维:服务管理、自动化运维、监控告警

    推荐学习资源

    bash

    # Linux命令手册
    man bash
    info coreutils
    
    # 在线文档
    https://explainshell.com/      # 命令解释
    https://cheat.sh/              # 速查表
    

    提升效率的技巧

    bash

    # 别名配置(~/.bashrc 或 ~/.zshrc)
    alias ll='ls -la'
    alias ..='cd ..'
    alias gs='git status'
    alias vi='nvim'
    
    # 历史命令
    history                        # 查看历史
    Ctrl+R                         # 搜索历史
    !n                             # 执行第n条
    
    # 命令补全
    Tab                            # 补全
    Tab+Tab                        # 显示所有可能
    
    # 命令行快捷键
    Ctrl+A                         # 行首
    Ctrl+E                         # 行尾
    Ctrl+U                         # 清空行
    Ctrl+L                         # 清屏
    Ctrl+C                         # 取消
    Ctrl+Z                         # 挂起
    

    相关资源

    阅读更多

  • MySQL数据库完全指南:从入门到精通

    MySQL数据库完全指南:从入门到精通

    一、MySQL基础入门

    什么是MySQL?

    MySQL是由瑞典MySQL AB公司开发的关系型数据库管理系统,现在是Oracle公司的产品。作为开源数据库的代表,MySQL具有以下特点:

    • 开源免费:采用GPL协议,可免费使用
    • 性能优异:支持高并发访问,查询效率高
    • 易于使用:SQL语法简洁,学习曲线平缓
    • 生态完善:配套工具丰富,社区活跃
    • 跨平台:支持Windows、Linux、macOS等系统
    MySQL优化配图 - 数据库索引与查询优化图

    安装MySQL

    Ubuntu/Debian:

    bash

    # 安装MySQL服务器
    sudo apt update
    sudo apt install mysql-server
    
    # 启动服务
    sudo systemctl start mysql
    sudo systemctl enable mysql
    
    # 安全初始化
    sudo mysql_secure_installation
    

    CentOS/RHEL:

    bash

    # 安装MySQL
    sudo yum install mysql-server
    
    # 启动服务
    sudo systemctl start mysqld
    sudo systemctl enable mysqld
    
    # 安全初始化
    sudo mysql_secure_installation
    

    Docker方式:

    bash

    # 拉取MySQL镜像
    docker pull mysql:8.0
    
    # 运行容器
    docker run -d \
      --name mysql \
      -p 3306:3306 \
      -e MYSQL_ROOT_PASSWORD=your_password \
      -e MYSQL_DATABASE=myapp \
      -v mysql_data:/var/lib/mysql \
      mysql:8.0
    
    # 连接MySQL
    docker exec -it mysql mysql -u root -p
    

    基本命令连接

    bash

    # 命令行连接
    mysql -u root -p
    
    # 连接指定数据库
    mysql -u root -p mydatabase
    
    # 远程连接
    mysql -h 192.168.1.100 -P 3306 -u root -p
    
    # 使用SQL文件导入
    mysql -u root -p < backup.sql
    

    二、数据库和数据表操作

    创建数据库

    sql

    -- 创建数据库
    CREATE DATABASE myapp;
    
    -- 指定字符集和排序规则
    CREATE DATABASE myapp 
        DEFAULT CHARACTER SET utf8mb4 
        DEFAULT COLLATE utf8mb4_unicode_ci;
    
    -- 查看所有数据库
    SHOW DATABASES;
    
    -- 选择数据库
    USE myapp;
    
    -- 删除数据库(谨慎使用)
    DROP DATABASE myapp;
    

    创建数据表

    sql

    -- 创建用户表
    CREATE TABLE users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        username VARCHAR(50) NOT NULL UNIQUE,
        email VARCHAR(100) NOT NULL UNIQUE,
        password VARCHAR(255) NOT NULL,
        age INT DEFAULT 0,
        status TINYINT DEFAULT 1 COMMENT '状态:1正常 0禁用',
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
    
    -- 创建文章表
    CREATE TABLE articles (
        id INT AUTO_INCREMENT PRIMARY KEY,
        user_id INT NOT NULL,
        title VARCHAR(200) NOT NULL,
        content TEXT,
        views INT DEFAULT 0,
        likes INT DEFAULT 0,
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
        updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
        INDEX idx_user_id (user_id),
        INDEX idx_created_at (created_at),
        FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='文章表';
    
    -- 查看表结构
    DESCRIBE users;
    SHOW CREATE TABLE users;
    

    数据类型详解

    sql

    -- 数值类型
    TINYINT      -- 1字节,-128到127
    SMALLINT     -- 2字节,-32768到32767
    INT          -- 4字节,约21亿
    BIGINT       -- 8字节,极大数值
    FLOAT        -- 4字节浮点
    DOUBLE       -- 8字节高精度浮点
    DECIMAL(10,2) -- 定点数,适合金额
    
    -- 字符串类型
    CHAR(10)     -- 固定长度,不足补空格
    VARCHAR(255) -- 可变长度,最大255
    TEXT         -- 大文本,最大65535字节
    MEDIUMTEXT   -- 中文本,最大16MB
    LONGTEXT     -- 大文本,最大4GB
    
    -- 日期时间类型
    DATE         -- 日期 '2026-04-16'
    TIME         -- 时间 '12:30:00'
    DATETIME     -- 日期时间 '2026-04-16 12:30:00'
    TIMESTAMP    -- 时间戳,自动更新
    YEAR         -- 年份
    
    -- ENUM和SET类型
    ENUM('active', 'inactive', 'pending')
    SET('news', 'sports', 'tech')
    

    三、SQL查询语句

    基础查询

    sql

    -- 查询所有记录
    SELECT * FROM users;
    
    -- 查询指定列
    SELECT username, email FROM users;
    
    -- 别名查询
    SELECT username AS '用户名', email AS '邮箱' FROM users;
    
    -- 去重查询
    SELECT DISTINCT status FROM users;
    
    -- 条件查询
    SELECT * FROM users WHERE age > 18;
    SELECT * FROM users WHERE status = 1 AND age >= 18;
    SELECT * FROM users WHERE username LIKE '张%';
    SELECT * FROM users WHERE age BETWEEN 18 AND 30;
    
    -- 排序查询
    SELECT * FROM users ORDER BY created_at DESC;  -- 降序
    SELECT * FROM users ORDER BY age ASC;          -- 升序
    SELECT * FROM users ORDER BY status, created_at DESC;
    
    -- 分页查询
    SELECT * FROM users LIMIT 10 OFFSET 0;
    SELECT * FROM users LIMIT 10, 20;  -- 从第10条开始,取20条
    SELECT * FROM users LIMIT 20;      -- 前20条
    

    聚合函数

    sql

    -- COUNT 统计数量
    SELECT COUNT(*) FROM users;
    SELECT COUNT(*) FROM users WHERE status = 1;
    
    -- SUM 求和
    SELECT SUM(views) FROM articles;
    
    -- AVG 平均值
    SELECT AVG(age) FROM users;
    
    -- MAX 最大值
    SELECT MAX(views) FROM articles;
    
    -- MIN 最小值
    SELECT MIN(age) FROM users;
    
    -- 分组统计
    SELECT status, COUNT(*) as total FROM users GROUP BY status;
    SELECT user_id, COUNT(*) as article_count 
    FROM articles 
    GROUP BY user_id 
    HAVING article_count > 5;
    
    -- 统计函数组合
    SELECT 
        COUNT(*) as total_users,
        AVG(age) as avg_age,
        MAX(age) as max_age,
        MIN(age) as min_age
    FROM users;
    

    多表查询

    sql

    -- 内连接
    SELECT u.username, a.title, a.created_at
    FROM users u
    INNER JOIN articles a ON u.id = a.user_id;
    
    -- 左连接
    SELECT u.username, a.title
    FROM users u
    LEFT JOIN articles a ON u.id = a.user_id;
    
    -- 右连接
    SELECT u.username, a.title
    FROM users u
    RIGHT JOIN articles a ON u.id = a.user_id;
    
    -- 多表连接
    SELECT 
        u.username,
        a.title,
        c.content as comment
    FROM users u
    INNER JOIN articles a ON u.id = a.user_id
    INNER JOIN comments c ON a.id = c.article_id
    WHERE u.status = 1;
    
    -- 子查询
    SELECT * FROM users 
    WHERE id IN (SELECT DISTINCT user_id FROM articles);
    
    SELECT * FROM articles 
    WHERE views > (SELECT AVG(views) FROM articles);
    
    -- EXISTS子查询
    SELECT * FROM users u
    WHERE EXISTS (
        SELECT 1 FROM articles a WHERE a.user_id = u.id
    );
    

    高级查询技巧

    sql

    -- UNION合并查询
    SELECT username FROM users WHERE status = 1
    UNION
    SELECT username FROM admin_users;
    
    -- UNION ALL(保留重复)
    SELECT username FROM users
    UNION ALL
    SELECT username FROM admin_users;
    
    -- IF条件判断
    SELECT 
        username,
        IF(age >= 18, '成年', '未成年') as age_group
    FROM users;
    
    -- CASE语句
    SELECT 
        username,
        CASE 
            WHEN age < 18 THEN '未成年'
            WHEN age BETWEEN 18 AND 30 THEN '青年'
            WHEN age BETWEEN 31 AND 50 THEN '中年'
            ELSE '老年'
        END as age_category
    FROM users;
    
    -- COALESCE处理NULL
    SELECT 
        username,
        COALESCE(email, phone, '无联系方式') as contact
    FROM users;
    
    -- CONCAT拼接
    SELECT CONCAT(username, ' - ', email) as user_info FROM users;
    

    四、数据操作(CRUD)

    插入数据

    sql

    -- 插入单条记录
    INSERT INTO users (username, email, password, age)
    VALUES ('张三', 'zhangsan@example.com', 'hashed_pass', 25);
    
    -- 插入多条记录
    INSERT INTO users (username, email, password, age) VALUES
    ('李四', 'lisi@example.com', 'pass1', 30),
    ('王五', 'wangwu@example.com', 'pass2', 28),
    ('赵六', 'zhaoliu@example.com', 'pass3', 35);
    
    -- 插入查询结果
    INSERT INTO articles (user_id, title, content)
    SELECT id, CONCAT('欢迎 ', username), '欢迎加入我们!'
    FROM users WHERE status = 1;
    
    -- REPLACE(存在则替换)
    REPLACE INTO users (id, username, email)
    VALUES (1, '新张三', 'new@example.com');
    
    -- ON DUPLICATE KEY UPDATE
    INSERT INTO article_stats (article_id, views)
    VALUES (1, 1)
    ON DUPLICATE KEY UPDATE views = views + 1;
    

    更新数据

    sql

    -- 更新单条记录
    UPDATE users SET age = 26 WHERE id = 1;
    
    -- 更新多条记录
    UPDATE users SET status = 0, updated_at = NOW() WHERE age < 18;
    
    -- 使用表达式更新
    UPDATE articles SET views = views + 1 WHERE id = 1;
    
    -- 条件更新
    UPDATE users 
    SET email = CONCAT(username, '@example.com')
    WHERE email IS NULL;
    
    -- 更新前备份
    UPDATE articles 
    SET content = OLD_CONTENT
    WHERE id = 1;
    

    删除数据

    sql

    -- 删除单条记录
    DELETE FROM users WHERE id = 1;
    
    -- 批量删除
    DELETE FROM users WHERE status = 0 AND created_at < '2025-01-01';
    
    -- 清空表(慎用)
    DELETE FROM articles;           -- 可回滚,有日志
    TRUNCATE TABLE articles;       -- 快速清空,不可回滚
    
    -- 级联删除(配合外键)
    DELETE FROM users CASCADE;  -- 外键设置后自动级联
    

    五、索引与性能优化

    索引类型

    sql

    -- 主键索引
    ALTER TABLE users ADD PRIMARY KEY (id);
    
    -- 唯一索引
    ALTER TABLE users ADD UNIQUE INDEX idx_email (email);
    
    -- 普通索引
    ALTER TABLE users ADD INDEX idx_username (username);
    
    -- 复合索引
    ALTER TABLE articles ADD INDEX idx_user_date (user_id, created_at);
    
    -- 全文索引(InnoDB/MyISAM)
    ALTER TABLE articles ADD FULLTEXT INDEX idx_fulltext (title, content);
    
    -- 使用全文搜索
    SELECT * FROM articles 
    WHERE MATCH(title, content) AGAINST('MySQL 优化' IN NATURAL LANGUAGE MODE);
    
    -- 查看表的所有索引
    SHOW INDEX FROM users;
    
    -- 删除索引
    ALTER TABLE users DROP INDEX idx_username;
    DROP INDEX idx_username ON users;
    

    SQL性能优化

    sql

    -- 避免SELECT *
    SELECT id, username, email FROM users WHERE id = 1;
    
    -- 使用EXPLAIN分析查询
    EXPLAIN SELECT * FROM users WHERE username = '张三';
    EXPLAIN ANALYZE SELECT * FROM users WHERE age > 25;
    
    -- 优化示例
    -- 优化前
    SELECT * FROM articles a, users u 
    WHERE a.user_id = u.id AND u.status = 1;
    
    -- 优化后(确保有索引)
    SELECT a.id, a.title, u.username 
    FROM articles a
    INNER JOIN users u ON a.user_id = u.id
    WHERE u.status = 1;
    
    -- 使用LIMIT限制结果
    SELECT * FROM articles ORDER BY created_at DESC LIMIT 10;
    
    -- 分页优化(大数据量)
    -- 低效
    SELECT * FROM articles LIMIT 1000000, 10;
    
    -- 高效
    SELECT a.* 
    FROM articles a
    INNER JOIN (SELECT id FROM articles ORDER BY created_at DESC LIMIT 1000000, 10) b
    ON a.id = b.id;
    

    慢查询日志

    sql

    -- 查看慢查询配置
    SHOW VARIABLES LIKE 'slow_query%';
    SHOW VARIABLES LIKE 'long_query_time';
    
    -- 开启慢查询日志
    SET GLOBAL slow_query_log = 'ON';
    SET GLOBAL long_query_time = 2;
    SET GLOBAL slow_query_log_file = '/var/log/mysql/slow.log';
    
    -- 分析慢查询
    mysqldumpslow -s t /var/log/mysql/slow.log
    

    六、事务处理

    事务基础

    sql

    -- 开启事务
    START TRANSACTION;
    
    -- 或者
    BEGIN;
    
    -- 执行操作
    UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
    UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
    
    -- 提交事务
    COMMIT;
    
    -- 回滚事务
    ROLLBACK;
    

    事务隔离级别

    sql

    -- 查看当前隔离级别
    SELECT @@transaction_isolation;
    
    -- 设置隔离级别
    SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
    
    -- 示例:读已提交(Read Committed)
    SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
    
    -- 示例:可重复读(Repeatable Read)- MySQL默认
    SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
    
    --  Serializable(串行化)
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
    

    保存点

    sql

    START TRANSACTION;
    
    INSERT INTO orders (user_id, total) VALUES (1, 100);
    SAVEPOINT after_order;
    
    INSERT INTO order_items (order_id, product_id) VALUES (1, 100);
    SAVEPOINT after_item;
    
    -- 回滚到保存点
    ROLLBACK TO after_item;
    
    -- 提交(只提交保存点之前的内容)
    COMMIT;
    

    七、视图和存储过程

    视图

    sql

    -- 创建视图
    CREATE VIEW active_users AS
    SELECT id, username, email, age
    FROM users
    WHERE status = 1;
    
    -- 创建复杂视图
    CREATE VIEW user_articles_stats AS
    SELECT 
        u.id,
        u.username,
        COUNT(a.id) as article_count,
        SUM(COALESCE(a.views, 0)) as total_views
    FROM users u
    LEFT JOIN articles a ON u.id = a.user_id
    WHERE u.status = 1
    GROUP BY u.id, u.username;
    
    -- 使用视图
    SELECT * FROM active_users;
    SELECT * FROM user_articles_stats WHERE article_count > 5;
    
    -- 修改视图
    CREATE OR REPLACE VIEW active_users AS
    SELECT id, username, email
    FROM users
    WHERE status = 1;
    
    -- 删除视图
    DROP VIEW IF EXISTS active_users;
    

    存储过程

    sql

    -- 创建存储过程
    DELIMITER //
    
    CREATE PROCEDURE get_user_stats(IN user_id INT, OUT total_articles INT)
    BEGIN
        SELECT COUNT(*) INTO total_articles
        FROM articles
        WHERE user_id = user_id;
    END //
    
    DELIMITER ;
    
    -- 调用存储过程
    CALL get_user_stats(1, @total);
    SELECT @total;
    
    -- 创建带事务的存储过程
    DELIMITER //
    
    CREATE PROCEDURE transfer_money(
        IN from_user INT,
        IN to_user INT,
        IN amount DECIMAL(10, 2)
    )
    BEGIN
        DECLARE EXIT HANDLER FOR SQLEXCEPTION
        BEGIN
            ROLLBACK;
            SELECT 'Transaction failed' as message;
        END;
        
        START TRANSACTION;
        
        UPDATE accounts SET balance = balance - amount WHERE user_id = from_user;
        UPDATE accounts SET balance = balance + amount WHERE user_id = to_user;
        
        COMMIT;
        SELECT 'Transfer successful' as message;
    END //
    
    DELIMITER ;
    
    -- 调用
    CALL transfer_money(1, 2, 100.00);
    
    -- 删除存储过程
    DROP PROCEDURE IF EXISTS get_user_stats;
    

    八、用户权限管理

    用户操作

    sql

    -- 创建用户
    CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
    CREATE USER 'newuser'@'%' IDENTIFIED BY 'password';
    
    -- 重命名用户
    RENAME USER 'olduser'@'localhost' TO 'newuser'@'localhost';
    
    -- 删除用户
    DROP USER 'newuser'@'localhost';
    
    -- 修改密码
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
    SET PASSWORD FOR 'newuser'@'localhost' = 'new_password';
    

    权限管理

    sql

    -- 授予权限
    GRANT SELECT, INSERT, UPDATE ON myapp.* TO 'newuser'@'localhost';
    GRANT ALL PRIVILEGES ON myapp.* TO 'admin'@'localhost';
    GRANT EXECUTE ON PROCEDURE myapp.transfer_money TO 'newuser'@'localhost';
    
    -- 查看权限
    SHOW GRANTS FOR 'newuser'@'localhost';
    SHOW GRANTS;
    
    -- 撤销权限
    REVOKE INSERT, UPDATE ON myapp.* FROM 'newuser'@'localhost';
    
    -- 刷新权限
    FLUSH PRIVILEGES;
    

    九、主从复制配置

    主服务器配置

    ini

    # /etc/mysql/mysql.conf.d/mysqld.cnf
    [mysqld]
    server-id = 1
    log_bin = /var/log/mysql/mysql-bin.log
    binlog_do_db = myapp
    expire_logs_days = 7
    max_binlog_size = 100M
    

    sql

    -- 创建复制用户
    CREATE USER 'repl'@'%' IDENTIFIED BY 'repl_password';
    GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
    
    -- 查看主服务器状态
    SHOW MASTER STATUS;
    

    从服务器配置

    ini

    # /etc/mysql/mysql.conf.d/mysqld.cnf
    [mysqld]
    server-id = 2
    relay_log = /var/log/mysql/mysql-relay-bin.log
    log_slave_updates = 1
    read_only = 1
    

    sql

    -- 配置主从复制
    CHANGE MASTER TO
        MASTER_HOST = '192.168.1.100',
        MASTER_USER = 'repl',
        MASTER_PASSWORD = 'repl_password',
        MASTER_LOG_FILE = 'mysql-bin.000001',
        MASTER_LOG_POS = 154;
    
    -- 启动复制
    START SLAVE;
    
    -- 查看复制状态
    SHOW SLAVE STATUS\G;
    
    -- 停止复制
    STOP SLAVE;
    

    十、备份与恢复

    逻辑备份

    bash

    # 备份单个数据库
    mysqldump -u root -p myapp > backup.sql
    
    # 备份所有数据库
    mysqldump -u root -p --all-databases > all_backup.sql
    
    # 备份指定表
    mysqldump -u root -p myapp users articles > tables.sql
    
    # 压缩备份
    mysqldump -u root -p myapp | gzip > backup.sql.gz
    
    # 备份时锁定表(MyISAM)
    mysqldump -u root -p --lock-tables myapp > backup.sql
    
    # 不锁定表(InnoDB)
    mysqldump -u root -p --single-transaction myapp > backup.sql
    

    数据恢复

    bash

    # 恢复数据库
    mysql -u root -p myapp < backup.sql
    
    # 恢复压缩文件
    gunzip < backup.sql.gz | mysql -u root -p myapp
    
    # 从备份文件中恢复指定表
    mysql -u root -p myapp < tables.sql
    

    物理备份(XtraBackup)

    bash

    # 安装XtraBackup
    apt install percona-xtrabackup-80
    
    # 全量备份
    xtrabackup --backup --target-dir=/backup/full --user=root --password=xxx
    
    # 准备备份
    xtrabackup --prepare --target-dir=/backup/full
    
    # 恢复备份
    xtrabackup --copy-back --target-dir=/backup/full
    

    十一、常见问题与解决方案

    连接问题

    sql

    -- 解决:允许远程连接
    GRANT ALL PRIVILEGES ON myapp.* TO 'root'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
    -- 检查用户主机限制
    SELECT user, host FROM mysql.user WHERE user = 'root';
    

    性能问题

    sql

    -- 查看当前连接数
    SHOW STATUS LIKE 'Threads_connected';
    SHOW STATUS LIKE 'Max_used_connections';
    
    -- 查看查询缓存
    SHOW VARIABLES LIKE 'query_cache%';
    
    -- 优化表
    OPTIMIZE TABLE users;
    
    -- 分析表统计信息
    ANALYZE TABLE users;
    
    -- 检查表
    CHECK TABLE users;
    

    字符集问题

    sql

    -- 查看字符集设置
    SHOW VARIABLES LIKE 'character%';
    SHOW VARIABLES LIKE 'collation%';
    
    -- 批量修改字符集
    ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    

    十二、总结

    本教程全面介绍了MySQL数据库的各个方面:

    • 安装配置和环境搭建
    • 数据库和数据表操作
    • SQL查询语句(基础和高级)
    • 数据增删改查操作
    • 索引创建和性能优化
    • 事务处理和隔离级别
    • 视图和存储过程
    • 用户权限管理
    • 主从复制配置
    • 备份恢复策略

    掌握这些知识后,你已经能够独立完成MySQL数据库的设计、开发和管理工作。推荐进一步学习MySQL 8.0的新特性、分库分表方案、数据库中间件(如MyCat、ShardingSphere)以及云数据库服务等内容。

    相关资源

    阅读更多

  • Nginx配置与优化实战:从入门到生产环境

    Nginx配置与优化实战:从入门到生产环境

    一、Nginx基础入门

    什么是Nginx?

    Nginx(发音为”engine-x”)是一款高性能的开源HTTP服务器和反向代理服务器,由俄罗斯程序员Igor Sysoev于2004年首次发布。它的特点包括:

    • 高并发:基于事件驱动架构,支持数万并发连接
    • 低内存消耗:相比Apache更节省服务器资源
    • 热部署:配置变更无需重启服务
    • 模块化设计:丰富的官方和第三方模块
    Nginx配置示例配图 - 服务器架构示意图

    安装Nginx

    Ubuntu/Debian系统:

    bash

    # 更新软件源
    sudo apt update
    
    # 安装Nginx
    sudo apt install nginx
    
    # 启动服务
    sudo systemctl start nginx
    sudo systemctl enable nginx
    
    # 检查状态
    sudo systemctl status nginx
    

    CentOS/RHEL系统:

    bash

    # 安装Nginx
    sudo yum install epel-release
    sudo yum install nginx
    
    # 启动服务
    sudo systemctl start nginx
    sudo systemctl enable nginx
    

    Docker方式:

    bash

    # 快速启动
    docker run -d \
      --name nginx \
      -p 80:80 \
      -p 443:443 \
      nginx:alpine
    
    # 自定义配置启动
    docker run -d \
      --name nginx \
      -p 80:80 \
      -v /path/to/nginx.conf:/etc/nginx/nginx.conf:ro \
      nginx:alpine
    

    验证安装

    安装完成后,在浏览器访问服务器IP地址,应该能看到Nginx的默认欢迎页面:

    bash

    # 检查Nginx版本
    nginx -v
    
    # 测试配置文件语法
    nginx -t
    
    # 查看详细版本信息
    nginx -V
    

    二、Nginx核心配置结构

    配置文件结构

    Nginx的配置文件通常位于/etc/nginx/nginx.conf,采用层级结构:

    nginx

    # 全局块
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log warn;
    pid /var/run/nginx.pid;
    
    events {
        # events块
        worker_connections 1024;
    }
    
    http {
        # http块
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        
        # 日志格式定义
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
        
        access_log /var/log/nginx/access.log main;
        
        # 服务器块
        server {
            listen 80;
            server_name example.com;
            
            # 位置块
            location / {
                root /usr/share/nginx/html;
                index index.html;
            }
        }
    }
    

    常用配置指令

    nginx

    # 全局配置
    user nginx;                    # 运行Nginx的用户
    worker_processes auto;          # 工作进程数(auto为CPU核心数)
    error_log /path/to/log;        # 错误日志路径
    pid /path/to/pid;              # PID文件路径
    
    # events块配置
    events {
        worker_connections 1024;    # 单个工作进程最大连接数
        use epoll;                  # 使用epoll多路复用(Linux)
        multi_accept on;            # 一次接受多个连接
    }
    
    # http块配置
    http {
        # Mime类型
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        
        # 连接管理
        keepalive_timeout 65;      # 长连接超时时间
        keepalive_requests 100;     # 长连接最大请求数
        
        # 文件传输
        sendfile on;                # 高效文件传输
        tcp_nopush on;              # 优化TCP传输
        tcp_nodelay on;             # 禁用Nagle算法
        
        # Gzip压缩
        gzip on;
        gzip_types text/plain application/json application/javascript text/css;
        gzip_min_length 1000;
    }
    

    三、静态网站托管配置

    基本静态站点

    nginx

    server {
        listen 80;
        server_name mysite.com;
        
        # 网站根目录
        root /var/www/mysite;
        
        # 默认索引文件
        index index.html index.htm;
        
        # 访问日志
        access_log /var/log/nginx/mysite_access.log;
        error_log /var/log/nginx/mysite_error.log;
        
        # 默认location
        location / {
            try_files $uri $uri/ =404;
        }
        
        # 静态资源缓存
        location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
        
        # 不记录静态资源的访问日志
        location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
            access_log off;
        }
    }
    

    目录浏览功能

    nginx

    server {
        listen 80;
        server_name files.mysite.com;
        
        autoindex on;               # 开启目录浏览
        autoindex_exact_size off;   # 显示文件大小(人性化显示)
        autoindex_localtime on;     # 显示本地时间
        
        location / {
            root /var/www/files;
            charset utf-8,gb2312;  # 解决中文文件名乱码
        }
    }
    

    四、反向代理配置

    基本反向代理

    反向代理是Nginx最常用的功能之一,用于将请求转发到后端服务器:

    nginx

    server {
        listen 80;
        server_name api.mysite.com;
        
        location / {
            # 转发到后端服务器
            proxy_pass http://127.0.0.1:3000;
            
            # 传递真实IP给后端
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            
            # 超时设置
            proxy_connect_timeout 60s;
            proxy_send_timeout 60s;
            proxy_read_timeout 60s;
            
            # 缓冲设置
            proxy_buffering on;
            proxy_buffer_size 4k;
            proxy_buffers 8 4k;
        }
    }
    

    代理到HTTPS后端

    nginx

    server {
        listen 80;
        server_name secure.mysite.com;
        
        location / {
            proxy_pass https://backend-server.com;
            
            # SSL相关头
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            # 跳过SSL证书验证(内部网络使用)
            proxy_ssl_verify off;
        }
    }
    

    WebSocket反向代理

    nginx

    server {
        listen 80;
        server_name ws.mysite.com;
        
        location /ws {
            # WebSocket代理
            proxy_pass http://127.0.0.1:8080;
            
            # WebSocket必须的头
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            
            # 超时设置(WebSocket需要较长超时)
            proxy_read_timeout 86400;
            proxy_send_timeout 86400;
        }
    }
    

    五、负载均衡配置

    轮询负载均衡

    nginx

    # 上游服务器组
    upstream backend {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }
    
    server {
        listen 80;
        server_name mysite.com;
        
        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

    加权轮询

    nginx

    upstream backend {
        # 根据服务器性能分配权重
        server 192.168.1.10:8080 weight=5;    # 权重5
        server 192.168.1.11:8080 weight=3;    # 权重3
        server 192.168.1.12:8080 weight=2;    # 权重2(备用)
    }
    

    IP哈希负载均衡

    同一IP的请求始终发送到同一后端服务器:

    nginx

    upstream backend {
        ip_hash;
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }
    

    最少连接负载均衡

    将请求发送到当前连接数最少的服务器:

    nginx

    upstream backend {
        least_conn;
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
        server 192.168.1.12:8080;
    }
    

    健康检查

    nginx

    upstream backend {
        server 192.168.1.10:8080 max_fails=3 fail_timeout=30s;
        server 192.168.1.11:8080 max_fails=3 fail_timeout=30s;
        server 192.168.1.12:8080 backup;  # 备用服务器
    }
    

    六、SSL/HTTPS配置

    生成SSL证书

    使用Let’s Encrypt免费证书:

    bash

    # 安装certbot
    sudo apt install certbot python3-certbot-nginx
    
    # 获取并自动配置证书
    sudo certbot --nginx -d example.com -d www.example.com
    
    # 手动验证并获取证书
    sudo certbot certonly --webroot -w /var/www/html -d example.com -d www.example.com
    

    HTTPS服务器配置

    nginx

    server {
        listen 80;
        server_name example.com www.example.com;
        
        # 强制跳转到HTTPS
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl http2;
        server_name example.com www.example.com;
        
        # SSL证书配置
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        
        # SSL安全配置
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256';
        ssl_prefer_server_ciphers off;
        
        # HSTS(HTTP严格传输安全)
        add_header Strict-Transport-Security "max-age=31536000" always;
        
        # OCSP stapling
        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 8.8.8.8 8.8.4.4 valid=300s;
        
        root /var/www/example;
        index index.html;
        
        location / {
            try_files $uri $uri/ =404;
        }
    }
    

    HTTP/2配置

    nginx

    server {
        listen 443 ssl http2;
        # ...
    }
    

    七、性能优化配置

    Gzip压缩

    nginx

    http {
        gzip on;
        gzip_disable "msie6";
        
        # 压缩级别(1-9,默认5)
        gzip_comp_level 6;
        
        # 最小压缩长度
        gzip_min_length 1000;
        
        # 压缩类型
        gzip_types 
            text/plain 
            text/css 
            text/xml 
            text/javascript
            application/json 
            application/javascript 
            application/xml+rss
            application/x-javascript;
        
        # 压缩代理缓存
        gzip_vary on;
    }
    

    浏览器缓存

    nginx

    location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg|woff|woff2)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
    }
    
    # 特定资源的缓存策略
    location ~* \.(html|htm)$ {
        expires -1;
        add_header Cache-Control "no-store, no-cache, must-revalidate";
    }
    

    连接优化

    nginx

    http {
        # 文件传输优化
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        
        # 缓冲区优化
        client_body_buffer_size 10K;
        client_max_body_size 8m;
        
        # FastCGI缓存(PHP应用)
        fastcgi_cache_path /tmp/nginx-cache levels=1:2 
                           keys_zone=APP_CACHE:100m 
                           inactive=60m;
        
        fastcgi_cache_key "$scheme$request_method$host$request_uri";
        fastcgi_cache_valid 200 60m;
    }
    

    Worker进程优化

    nginx

    # 绑定worker进程到CPU核心
    worker_cpu_affinity auto;
    
    # Worker进程最大打开文件数
    worker_rlimit_nofile 65535;
    
    events {
        use epoll;          # Linux高性能事件模型
        worker_connections 65535;
        multi_accept on;
    }
    

    八、安全配置

    基础安全配置

    nginx

    server {
        # 隐藏版本号
        server_tokens off;
        
        # 禁止IP直接访问
        if ($host != $server_name) {
            return 444;
        }
        
        # 限制请求方法
        if ($request_method !~ ^(GET|POST|HEAD)$) {
            return 405;
        }
        
        # 防止点击劫持
        add_header X-Frame-Options "SAMEORIGIN" always;
        
        # 防止XSS攻击
        add_header X-XSS-Protection "1; mode=block" always;
        
        # 内容安全策略
        add_header Content-Security-Policy "default-src 'self'" always;
    }
    

    限流配置

    nginx

    # 基于IP的限流
    limit_req_zone $binary_remote_addr zone=REQ_ZONE:10m rate=10r/s;
    
    server {
        # 突发请求限制
        location / {
            limit_req zone=REQ_ZONE burst=20 nodelay;
        }
    }
    
    # 基于连接的限流
    limit_conn_zone $binary_remote_addr zone=CONN_ZONE:10m;
    
    server {
        location / {
            limit_conn CONN_ZONE 5;
        }
    }
    

    九、日志配置与管理

    自定义日志格式

    nginx

    http {
        # JSON格式日志(便于日志分析)
        log_format json_log escape=json
            '{'
            '"time":"$time_iso8601",'
            '"remote_addr":"$remote_addr",'
            '"host":"$host",'
            '"request":"$request",'
            '"status":"$status",'
            '"body_bytes_sent":"$body_bytes_sent",'
            '"request_time":"$request_time",'
            '"upstream_response_time":"$upstream_response_time",'
            '"http_referer":"$http_referer",'
            '"http_user_agent":"$http_user_agent"'
            '}';
        
        access_log /var/log/nginx/access.json json_log;
    }
    

    条件日志

    nginx

    server {
        # 不记录robots.txt的访问
        location = /robots.txt {
            log_not_found off;
            access_log off;
        }
        
        # 不记录健康检查
        location /health {
            access_log off;
        }
    }
    

    十、实战案例:完整LNMP架构配置

    nginx

    # /etc/nginx/nginx.conf
    user nginx;
    worker_processes auto;
    error_log /var/log/nginx/error.log warn;
    pid /var/run/nginx.pid;
    
    events {
        worker_connections 10240;
        use epoll;
    }
    
    http {
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        
        # 日志格式
        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';
        
        access_log /var/log/nginx/access.log main;
        
        # 性能优化
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        
        # Gzip压缩
        gzip on;
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_types text/plain text/css text/xml application/json 
                    application/javascript application/xml+rss;
        
        # 上游服务器
        upstream php_backend {
            server 127.0.0.1:9000;
            keepalive 32;
        }
        
        upstream node_backend {
            server 127.0.0.1:3000;
            server 127.0.0.1:3001 backup;
        }
        
        # 主站配置
        server {
            listen 80;
            server_name example.com www.example.com;
            root /var/www/example;
            index index.php index.html;
            
            # SSL证书
            ssl_certificate /etc/ssl/certs/example.crt;
            ssl_certificate_key /etc/ssl/private/example.key;
            ssl_protocols TLSv1.2 TLSv1.3;
            
            # 安全头
            add_header X-Frame-Options "SAMEORIGIN";
            add_header X-Content-Type-Options "nosniff";
            
            # PHP处理
            location ~ \.php$ {
                fastcgi_pass php_backend;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
            }
            
            # Node.js API代理
            location /api/ {
                proxy_pass http://node_backend;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
            }
            
            # 静态资源
            location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
                expires 30d;
                add_header Cache-Control "public, immutable";
            }
            
            # WordPress伪静态
            location / {
                try_files $uri $uri/ /index.php?$args;
            }
        }
    }
    

    十一、常见问题排查

    配置语法检查

    bash

    # 测试配置语法
    nginx -t
    
    # 查看详细错误
    nginx -t -c /path/to/nginx.conf
    
    # 测试特定配置
    nginx -t -c /path/to/nginx.conf
    

    常用排查命令

    bash

    # 查看错误日志
    tail -f /var/log/nginx/error.log
    
    # 查看访问日志
    tail -f /var/log/nginx/access.log
    
    # 检查端口占用
    netstat -tlnp | grep nginx
    ss -tlnp | grep nginx
    
    # 检查进程
    ps aux | grep nginx
    
    # 重新加载配置(不中断服务)
    nginx -s reload
    
    # 优雅关闭
    nginx -s quit
    
    # 强制关闭
    nginx -s stop
    

    十二、总结

    本教程全面介绍了Nginx的各个方面:

    • 基础安装和配置结构
    • 静态网站托管和目录浏览
    • 反向代理和WebSocket支持
    • 多种负载均衡策略
    • SSL/HTTPS安全配置
    • 性能优化技巧
    • 安全防护措施
    • 日志管理和问题排查

    掌握这些内容后,你已经能够独立配置和管理Nginx服务器。推荐进一步学习Nginx的缓存机制、容器化部署以及与Kubernetes的集成等高级话题。

    相关资源

    阅读更多

  • Shell脚本编程教程:从入门到实战

    Shell脚本编程教程:从入门到实战

    一、Shell脚本基础概念

    什么是Shell?

    Shell是Unix/Linux系统的命令解释器,它是用户与操作系统内核之间的桥梁。我们平时在终端输入的命令,实际上都是由Shell来解释执行的。常见的Shell类型包括:

    • Bash (Bourne Again Shell):Linux默认Shell,功能最强大
    • Zsh (Z Shell):功能丰富,可定制性强
    • Fish (Friendly Interactive Shell):用户友好,语法简单
    Shell脚本示例配图 - Bash脚本代码展示

    第一个Shell脚本

    让我们从最简单的例子开始:

    bash

    #!/bin/bash
    # 这是我的第一个Shell脚本
    echo "Hello, Shell World!"
    
    # 输出当前日期和时间
    echo "当前时间是:$(date)"
    

    保存为hello.sh,然后执行:

    bash

    chmod +x hello.sh    # 添加执行权限
    ./hello.sh           # 运行脚本
    

    提示#!/bin/bash称为shebang,它告诉系统使用哪个解释器来执行脚本。

    二、变量与数据类型

    定义和使用变量

    Shell中的变量定义非常灵活,不需要声明类型:

    bash

    #!/bin/bash
    
    # 定义字符串变量
    name="Linux"
    version="Ubuntu 22.04"
    
    # 定义数字变量
    count=100
    
    # 使用变量(两种方式)
    echo "系统名称: $name"
    echo "版本信息: ${version}"
    
    # 只读变量
    readonly PI=3.14159
    
    # 删除变量
    temp="临时数据"
    unset temp
    

    特殊变量

    Shell提供了一些特殊变量来处理脚本参数:

    bash

    #!/bin/bash
    
    echo "脚本名称: $0"
    echo "第一个参数: $1"
    echo "第二个参数: $2"
    echo "所有参数: $@"
    echo "参数个数: $#"
    echo "当前进程ID: $$"
    echo "上一个命令退出状态: $?"
    
    # 运行示例:./script.sh arg1 arg2
    

    变量替换

    bash

    #!/bin/bash
    
    var="hello"
    
    # 默认值替换
    echo "${var:-"默认值"}"      # 输出: hello
    echo "${unset_var:-"默认值"}" # 输出: 默认值
    
    # 设置默认值
    echo "${var:="新值"}"        # 输出: hello,var保持不变
    echo "${unset_var:="新值"}"  # 输出: 新值,unset_var被赋值
    
    # 检查变量是否已设置
    echo "${var:?"变量未设置"}"   # 输出: hello
    # echo "${unset:?"变量未设置"}" # 会报错退出
    

    三、条件判断与流程控制

    基础条件判断

    Shell中使用test命令或[ ]进行条件判断:

    bash

    #!/bin/bash
    
    # 数值比较
    num1=10
    num2=20
    
    if [ $num1 -eq $num2 ]; then
        echo "相等"
    elif [ $num1 -lt $num2 ]; then
        echo "$num1 小于 $num2"
    else
        echo "$num1 大于 $num2"
    fi
    
    # 常见比较操作符
    # -eq: 等于 (equal)
    # -ne: 不等于 (not equal)
    # -lt: 小于 (less than)
    # -le: 小于等于 (less or equal)
    # -gt: 大于 (greater than)
    # -ge: 大于等于 (greater or equal)
    

    字符串判断

    bash

    #!/bin/bash
    
    str1="hello"
    str2="world"
    str3="hello"
    
    # 字符串比较
    if [ "$str1" = "$str3" ]; then
        echo "字符串相等"
    fi
    
    if [ -z "$empty_str" ]; then
        echo "字符串为空"
    fi
    
    if [ -n "$str1" ]; then
        echo "字符串非空"
    fi
    
    # 常见字符串操作符
    # =: 相等
    # !=: 不等
    # -z: 字符串长度为0
    # -n: 字符串长度不为0
    

    文件测试

    bash

    #!/bin/bash
    
    file="/path/to/file.txt"
    
    if [ -e "$file" ]; then
        echo "文件存在"
    fi
    
    if [ -f "$file" ]; then
        echo "是普通文件"
    fi
    
    if [ -d "$file" ]; then
        echo "是目录"
    fi
    
    if [ -r "$file" ]; then
        echo "可读"
    fi
    
    if [ -w "$file" ]; then
        echo "可写"
    fi
    
    if [ -x "$file" ]; then
        echo "可执行"
    fi
    

    case语句

    对于多条件判断,case语句更加清晰:

    bash

    #!/bin/bash
    
    grade="B"
    
    case $grade in
        "A")
            echo "优秀"
            ;;
        "B")
            echo "良好"
            ;;
        "C")
            echo "及格"
            ;;
        *)
            echo "未知等级"
            ;;
    esac
    
    # 通配符示例
    read -p "请输入命令: " cmd
    
    case $cmd in
        start)
            echo "启动服务..."
            ;;
        stop)
            echo "停止服务..."
            ;;
        restart)
            echo "重启服务..."
            ;;
        *)
            echo "未知命令"
            ;;
    esac
    

    四、循环结构

    for循环

    bash

    #!/bin/bash
    
    # 遍历列表
    for fruit in apple banana orange; do
        echo "我喜欢吃: $fruit"
    done
    
    # 使用C风格语法
    for ((i=0; i<5; i++)); do
        echo "计数器: $i"
    done
    
    # 遍历文件
    for file in *.txt; do
        echo "处理文件: $file"
    done
    
    # 使用seq命令
    for num in $(seq 1 5); do
        echo "数字: $num"
    done
    
    # 简化写法
    for i in {1..10}; do
        echo $i
    done
    

    while循环

    bash

    #!/bin/bash
    
    # 基本while循环
    count=1
    while [ $count -le 5 ]; do
        echo "计数: $count"
        ((count++))
    done
    
    # 读取文件行
    while read line; do
        echo "读取到: $line"
    done < file.txt
    
    # 无限循环(配合break使用)
    while true; do
        read -p "输入q退出: " input
        if [ "$input" = "q" ]; then
            break
        fi
        echo "你输入了: $input"
    done
    
    # until循环(条件为假时继续)
    num=1
    until [ $num -gt 5 ]; do
        echo "until循环: $num"
        ((num++))
    done
    

    循环控制

    bash

    #!/bin/bash
    
    # break和continue
    for i in {1..10}; do
        if [ $i -eq 3 ]; then
            continue  # 跳过当前迭代
        fi
        if [ $i -eq 8 ]; then
            break     # 退出循环
        fi
        echo "数字: $i"
    done
    

    五、函数定义与使用

    函数基础

    bash

    #!/bin/bash
    
    # 定义函数
    function greet() {
        echo "你好,$1!"
    }
    
    # 调用函数
    greet "小明"
    greet "小红"
    
    # 带返回值的函数
    function add() {
        local sum=$(($1 + $2))
        return $sum  # 返回值只能是0-255
    }
    
    add 10 20
    result=$?
    echo "计算结果: $result"
    

    函数作用域

    bash

    #!/bin/bash
    
    variable="全局变量"
    
    function demo() {
        local local_var="局部变量"
        variable="修改后的全局变量"
        
        echo "函数内: $variable"
        echo "函数内: $local_var"
    }
    
    demo
    echo "函数外: $variable"
    # echo "函数外: $local_var"  # 这会报错
    

    函数参数

    bash

    #!/bin/bash
    
    function process() {
        echo "参数个数: $#"
        echo "所有参数: $@"
        echo "第一个参数: $1"
        echo "第二个参数: $2"
    }
    
    process "arg1" "arg2" "arg3"
    

    六、实战案例

    案例1:自动备份脚本

    bash

    #!/bin/bash
    # 自动备份脚本
    
    # 配置
    BACKUP_DIR="/backup"
    SOURCE_DIR="/data"
    DATE=$(date +%Y%m%d_%H%M%S)
    BACKUP_FILE="backup_${DATE}.tar.gz"
    
    # 创建备份目录
    mkdir -p "$BACKUP_DIR"
    
    # 执行备份
    if tar -czf "${BACKUP_DIR}/${BACKUP_FILE}" "$SOURCE_DIR" 2>/dev/null; then
        echo "备份成功: ${BACKUP_FILE}"
        
        # 计算备份大小
        size=$(du -h "${BACKUP_DIR}/${BACKUP_FILE}" | cut -f1)
        echo "备份大小: $size"
        
        # 清理7天前的备份
        find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
        echo "清理旧备份完成"
    else
        echo "备份失败"
        exit 1
    fi
    

    案例2:批量重命名文件

    bash

    #!/bin/bash
    # 批量重命名脚本
    
    directory=$1
    prefix=$2
    
    if [ -z "$directory" ] || [ -z "$prefix" ]; then
        echo "用法: $0 <目录> <文件名前缀>"
        exit 1
    fi
    
    cd "$directory" || exit 1
    
    count=1
    for file in *; do
        if [ -f "$file" ]; then
            extension="${file##*.}"
            new_name="${prefix}_${count}.${extension}"
            mv "$file" "$new_name"
            echo "重命名: $file -> $new_name"
            ((count++))
        fi
    done
    
    echo "完成,共处理 $((count-1)) 个文件"
    

    案例3:系统监控脚本

    bash

    #!/bin/bash
    # 系统监控脚本
    
    echo "========== 系统监控报告 =========="
    echo "生成时间: $(date)"
    echo ""
    
    # CPU使用率
    echo "【CPU使用率】"
    top -bn1 | head -5
    
    # 内存使用
    echo ""
    echo "【内存使用】"
    free -h
    
    # 磁盘使用
    echo ""
    echo "【磁盘使用】"
    df -h | grep -E "^/dev"
    
    # 进程Top5
    echo ""
    echo "【CPU占用前5的进程】"
    ps aux --sort=-%cpu | head -6
    
    # 网络连接
    echo ""
    echo "【网络连接统计】"
    netstat -an | grep ESTABLISHED | wc -l
    echo "当前建立连接数"
    

    七、调试技巧

    调试选项

    bash

    #!/bin/bash
    
    # 启用调试模式
    # -x: 打印每条命令及其参数
    # -v: 打印输入的行
    # -n: 检查语法但不执行
    
    set -x  # 启用命令跟踪
    echo "这是调试信息"
    set +x  # 关闭命令跟踪
    
    # 另一种方式:运行时指定
    # bash -x script.sh
    

    错误处理

    bash

    #!/bin/bash
    
    # 遇到错误立即退出
    set -e
    
    # 未定义的变量视为错误
    set -u
    
    # 管道中任何一个命令失败,整个管道失败
    set -o pipefail
    
    # 使用trap捕获错误
    function error_handler() {
        echo "错误发生在第 $1 行"
    }
    
    trap 'error_handler $LINENO' ERR
    
    # 测试
    ls /nonexistent  # 会触发错误处理
    

    八、常见问题与最佳实践

    最佳实践

    1. 总是使用引号:避免变量为空时出现问题
      bash# 正确 if [ "$var" = "value" ]; then # 错误 if [ $var = "value" ]; then
    2. 使用[[ ]]替代[ ]:更强大的条件判断
      bash# 支持更多操作 if [[ $str =~ pattern ]]; then
    3. 添加错误处理:让脚本更健壮
      bashset -euo pipefail
    4. 添加使用说明:方便他人和自己理解
      bashfunction usage() { echo "用法: $0 [选项]" echo "选项:" echo " -h: 显示帮助" echo " -v: 详细模式" }
    5. 使用日志记录:便于问题排查
      bashLOG_FILE="/var/log/script.log" function log() { echo "[$(date)] $1" | tee -a "$LOG_FILE" }

    性能优化

    bash

    #!/bin/bash
    
    # 避免子shell,使用内联操作
    # 慢:
    for item in $(cat file.txt); do
        process $item
    done
    
    # 快:
    while read item; do
        process $item
    done < file.txt
    
    # 使用数组而非字符串拼接
    array=()
    for i in {1..1000}; do
        array+=("item_$i")
    done
    

    九、总结

    Shell脚本是每个Linux使用者必须掌握的技能。通过本教程的学习,你应该已经掌握了:

    • Shell变量的定义和使用
    • 条件判断和流程控制
    • 循环结构的各种用法
    • 函数的定义和调用
    • 实际场景中的脚本编写
    • 调试技巧和最佳实践

    继续练习,多写脚本解决实际问题,你会发现Shell脚本的强大之处。推荐进一步学习正则表达式、awk、sed等文本处理工具,它们与Shell脚本配合使用可以完成更复杂的任务。

    相关资源

    阅读更多

  • 2026程序员效率工具清单:提升开发效率的神器汇总

    2026程序员效率工具清单:提升开发效率的神器汇总

    引言

    上周五下午,同事小王跑来问我:”你一天写多少行代码?我怎么感觉你写得比我快很多?”

    我看了他一眼,默默打开我的桌面给他展示:

    • 代码编辑器:VS Code + 一堆插件
    • 终端:Windows Terminal + Oh My Posh
    • API调试:Postman
    • 数据库:TablePlus
    • 截图标注:Snipaste
    • 剪贴板:Ditto
    • 浏览器:开发版Chrome + 一堆扩展

    小王看完沉默了一会儿,然后说:”难怪…”。

    确实,工具选对了,能省下一大半时间。这篇文章就是把我这些年用过的、觉得好用的工具全部整理出来,希望能帮你找到适合自己的效率提升方案。

    程序员工具箱配图 - 代码编辑器与开发工具推荐

    代码编辑器

    VS Code:全能选手

    VS Code目前是使用率最高的代码编辑器,微软出品,免费开源,插件生态极其丰富。

    下载地址https://code.visualstudio.com/

    我的必装插件

    json

    // settings.json 部分配置
    {
        // 主题
        "workbench.colorTheme": "One Dark Pro",
        
        // 字体
        "editor.fontFamily": "'JetBrains Mono', Consolas, monospace",
        "editor.fontSize": 14,
        "editor.lineHeight": 24,
        "editor.fontLigatures": true,
        
        // 格式化
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "esbenp.prettier-vscode",
        
        // 代码片段
        "editor.tabSize": 4,
        "editor.insertSpaces": true,
        
        // 文件
        "files.autoSave": "afterDelay",
        "files.trimTrailingWhitespace": true,
        
        // 终端集成
        "terminal.integrated.fontSize": 13,
        "terminal.integrated.shell.windows": "Windows Terminal"
    }
    

    常用快捷键(Windows/macOS)

    功能WindowsmacOS
    命令面板Ctrl+Shift+PCmd+Shift+P
    快速打开文件Ctrl+PCmd+P
    全局搜索Ctrl+Shift+FCmd+Shift+F
    替换Ctrl+HCmd+H
    多光标编辑Ctrl+Alt+↓Opt+Cmd+↓
    代码格式化Shift+Alt+FShift+Opt+F
    注释代码Ctrl+/Cmd+/
    重命名符号F2F2
    跳转到定义F12F12

    GitLens插件

    这个插件让VS Code内置了强大的Git历史查看功能,可以看到每行代码是谁写的、什么时候改的:

    plaintext

    安装:ext install eamodio.gitlens
    

    JetBrains全家桶:专业之选

    如果你做Java/Kotlin开发,IntelliJ IDEA是首选;如果做Python,PyCharm更专业。每个JetBrains IDE都针对特定语言做了深度优化。

    下载地址https://www.jetbrains.com/

    推荐配置

    kotlin

    // Settings -> Editor -> Font
    Font: JetBrains Mono
    Size: 14
    Line height: 1.5
    
    // Settings -> Keymap
    选择"Eclipse"或"Visual Studio"兼容方案(如果你熟悉这些快捷键)
    
    // Settings -> Version Control
    启用Git集成
    启用GitHub集成
    

    API调试工具

    Postman:API调试老将

    Postman是API调试的标配工具,支持各种HTTP请求、收藏管理、环境变量、批量测试等功能。

    下载地址https://www.postman.com/

    核心功能

    1. 请求构建器
      • 支持GET/POST/PUT/PATCH/DELETE等所有HTTP方法
      • 参数化请求
      • 认证支持(Basic/Bearer/API Key/OAuth)
      • 请求前后脚本(Pre-request Script/Test Script)

    2. 环境变量

    javascript

    // 环境变量设置
    {{baseUrl}}/users/{{userId}}
    
    // 切换环境:Development/Staging/Production
    // 每个环境有不同的变量值
    
    1. 集合(Collection)

    plaintext

    MyProject/
    ├── Users API/
    │   ├── GET /users
    │   ├── POST /users
    │   └── GET /users/:id
    ├── Orders API/
    │   ├── GET /orders
    │   └── POST /orders
    └── Auth API/
        ├── POST /login
        └── POST /refresh
    
    1. 自动测试脚本

    javascript

    // Postman Test Script
    pm.test("响应状态码是200", function() {
        pm.response.to.have.status(200);
    });
    
    pm.test("返回用户列表", function() {
        var jsonData = pm.response.json();
        pm.expect(jsonData).to.have.property('data');
        pm.expect(jsonData.data).to.be.an('array');
    });
    
    pm.test("用户数量大于0", function() {
        var jsonData = pm.response.json();
        pm.expect(jsonData.data.length).to.be.above(0);
    });
    

    Insomnia:轻量替代

    如果你觉得Postman太重,Insomnia是个不错的选择。界面简洁,功能够用,支持GraphQL和gRPC。

    下载地址https://insomnia.rest/

    数据库管理

    TablePlus:数据库客户端

    支持MySQL、PostgreSQL、SQLite、Redis、MongoDB等几十种数据库,界面美观,操作流畅。

    下载地址https://tableplus.com/

    特色功能

    1. 多标签页:同时打开多个表
    2. 查询编辑器:语法高亮、自动补全
    3. 数据编辑:直接修改数据,Ctrl+S保存
    4. 导出功能:支持CSV、JSON、SQL格式
    5. 智能筛选:点击列头快速筛选

    DBeaver:开源之选

    DBeaver是免费开源的数据库客户端,功能全面,支持几乎所有数据库。

    下载地址https://dbeaver.io/

    bash

    # macOS用Homebrew安装
    brew install --cask dbeaver-community
    
    # Ubuntu
    sudo snap install dbeaver-ce
    

    终端增强

    Windows Terminal:Win11标配

    微软出品的现代化终端,支持多标签页、分屏、GPU加速渲染、自定义主题。

    下载地址:Microsoft Store搜索”Windows Terminal”

    配置文件(settings.json)

    json

    {
        "profiles": {
            "defaults": {
                "fontFace": "JetBrains Mono",
                "fontSize": 12,
                "cursorShape": "bar",
                "opacity": 90
            },
            "list": [
                {
                    "name": "PowerShell",
                    "commandline": "pwsh",
                    "startingDirectory": "D:\\Projects",
                    "icon": "ms-appx:///Assets/PowerShell.png"
                },
                {
                    "name": "Ubuntu",
                    "commandline": "wsl -d Ubuntu",
                    "icon": "ms-appx:///Assets/Ubuntu.png"
                },
                {
                    "name": "Git Bash",
                    "commandline": "D:\\Program Files\\Git\\bin\\bash.exe",
                    "icon": "ms-appx:///Assets/Git.png"
                }
            ]
        },
        "schemes": [
            {
                "name": "One Dark",
                "background": "#282C34",
                "foreground": "#ABB2BF",
                "black": "#282C34",
                "red": "#E06C75",
                "green": "#98C379",
                "yellow": "#E5C07B",
                "blue": "#61AFEF",
                "purple": "#C678DD",
                "cyan": "#56B6C2",
                "white": "#ABB2BF",
                "brightBlack": "#5C6370",
                "brightRed": "#E06C75",
                "brightGreen": "#98C379",
                "brightYellow": "#E5C07B",
                "brightBlue": "#61AFEF",
                "brightPurple": "#C678DD",
                "brightCyan": "#56B6C2",
                "brightWhite": "#FFFFFF"
            }
        ]
    }
    

    Oh My Posh:终端美化

    给终端加上漂亮的主题和状态信息。

    安装(PowerShell)

    powershell

    # 安装Oh My Posh
    winget install JanDeDobbeleer.OhMyPosh
    
    # 安装字体(必需)
    oh-my-posh font install
    

    配置(PowerShellProfile)

    powershell

    # 打开PowerShell配置文件
    if (!(Test-Path -Path $PROFILE)) { New-Item -ItemType File -Path $PROFILE -Force }
    notepad $PROFILE
    

    添加内容:

    powershell

    # 加载Oh My Posh
    oh-my-posh init pwsh --config "$env:POSH_THEMES_PATH\powerlevel10k_lean.omp.json"
    

    Zsh + Oh My Zsh(macOS/Linux)

    bash

    # 安装Zsh
    brew install zsh
    
    # 安装Oh My Zsh
    sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    
    # 安装插件
    # .zshrc 中添加
    plugins=(git docker node npm vscode)
    

    Starship:跨平台提示符

    如果你用多个系统,Starship是个不错的选择,它可以在任何shell上运行。

    下载地址https://starship.rs/

    安装

    bash

    # macOS
    brew install starship
    
    # Linux
    curl -sS https://starship.rs/install.sh | sh
    

    配置(~/.config/starship.toml)

    toml

    # 简单配置
    format = """
    $username$directory$git_branch$git_status$nodejs$python$cmd_duration$line_break$character"""
    
    [character]
    success_symbol = "[❯](bold green)"
    error_symbol = "[❯](bold red)"
    
    [directory]
    truncation_length = 3
    truncation_symbol = "…/"
    
    [git_branch]
    symbol = " "
    style = "bold purple"
    
    [git_status]
    format = '[\[$all_status$ahead_behind\]]($style) '
    style = "bold red"
    

    截图与标注

    Snipaste:截图+贴图神器

    截图+贴图是我每天用得最多的功能。截完图直接贴在屏幕上,随时参考。

    下载地址https://www.snipaste.com/

    核心功能

    1. 截图:F1键激活,支持矩形、圆形、任意形状
    2. 贴图:截图后按F3贴在屏幕上
    3. 标注工具
      • 矩形/椭圆
      • 箭头/直线
      • 画笔/高亮
      • 文字/模糊
      • 马赛克

    快捷键

    功能快捷键
    截图F1
    贴图F3
    关闭贴图Esc
    切换标注工具Tab

    使用技巧

    markdown

    1. 截图后点击工具栏的"...",选择"高像素PNG"
    2. 贴图后滚轮缩大小,Shift+滚轮微调
    3. Ctrl+C直接复制贴图内容到剪贴板
    4. 右键贴图可以分组管理
    

    ShareX:截图+上传

    不只是截图,还能自动上传到图床,生成链接。

    下载地址https://getsharex.com/

    配置流程

    1. 设置截图快捷键
    2. 配置图像上传(图床):json{ "Name": "SM.MS", "RequestURL": "https://sm.ms/api/v2/upload", "FileFormName": "smfile", "ResponseIsJSON": true, "URLRegex": "\"url\":\"([^ ]+)\"" }
    3. 设置快捷键一键上传

    剪贴板增强

    Ditto:剪贴板历史管理器

    Ditto记录你复制过的所有内容,随时可以翻查、搜索、重新使用。

    下载地址https://ditto-cp.sourceforge.io/

    核心功能

    1. 剪贴板历史:默认保存100条记录
    2. 搜索:Ctrl+`打开历史,输入关键词搜索
    3. 分组:把常用的文本片段保存为”快速粘贴”
    4. 格式支持:文本、图片、文件路径

    使用流程

    markdown

    1. 正常复制内容(Ctrl+C)
    2. 打开历史面板(Ctrl+`)
    3. 搜索或浏览历史
    4. 双击或回车粘贴
    5. 也可以拖拽到其他应用
    

    快捷键

    功能快捷键
    打开历史Ctrl+`
    搜索输入文字
    粘贴选中项Enter
    删除选中项Delete
    打开主窗口Ctrl+Shift+V

    Paste:macOS用户的剪贴板应用

    如果你用macOS,Paste是更原生的选择。

    下载地址https://pasteapp.io/

    文件管理

    Listary:文件搜索增强

    Windows上秒开任何文件。

    下载地址https://www.listary.com/

    功能

    1. 全局搜索:双击Ctrl激活
    2. 快速切换:输入部分文件名自动匹配
    3. 右键增强:右键菜单添加”复制路径”等功能

    使用技巧

    markdown

    1. 双击Ctrl打开搜索
    2. 输入文件名或路径
    3. 回车打开
    4. 右键可以复制完整路径
    
    # 常用搜索词
    Documents/project  # 找项目文件夹
    Downloads/python   # 找下载的Python文件
    

    Everything:文件搜索神器

    比Windows自带搜索快100倍。

    下载地址https://www.voidtools.com/

    使用

    bash

    # 搜索包含关键词的文件
    python
    # 搜索特定类型
    *.py
    # 搜索特定路径
    D:\Projects\*.py
    # 搜索大小
    size:>10MB
    

    Ranger:终端文件管理器

    如果你习惯在终端操作,Ranger是个好选择。

    bash

    # 安装
    # macOS
    brew install ranger
    
    # Ubuntu
    sudo apt install ranger
    
    # 配置
    ranger --copy-config=all
    

    笔记与文档

    Obsidian:Markdown笔记专家

    本地存储,支持双向链接,插件丰富。

    下载地址https://obsidian.md/

    插件推荐

    1. Templater:模板系统
    2. Dataview:数据查询
    3. Admonition:信息块
    4. Excalidraw:白板绘图

    使用示例

    markdown

    # Daily Note模板
    ---
    date: {{date}}
    tags: [日志]
    ---
    
    # 今日任务
    
    - [ ] 
    
    # 学习笔记
    
    # 代码片段
    
    \`\`\`python
    print("Hello")
    \`\`\`
    
    # 明日计划
    
    -
    

    Notion:团队协作笔记

    Notion适合团队协作和知识库管理。

    下载地址https://www.notion.so/

    模板示例

    plaintext

    项目模板:
    ├── 项目概览
    ├── 需求文档
    ├── 技术方案
    │   ├── 数据库设计
    │   ├── API设计
    │   └── 架构图
    ├── 开发任务
    │   ├── 前端任务
    │   └── 后端任务
    ├── 测试报告
    └── 部署文档
    

    开发辅助工具

    httpie:命令行HTTP客户端

    告别curl,用httpie让API测试更简单。

    bash

    # 安装
    # macOS
    brew install httpie
    
    # Windows
    pip install httpie
    
    # Ubuntu
    sudo apt install httpie
    

    使用示例

    bash

    # GET请求
    http GET https://api.example.com/users
    
    # POST请求
    http POST https://api.example.com/users name="张三" email="zhangsan@example.com"
    
    # 带认证
    http GET https://api.example.com/protected Authorization:"Bearer token123"
    
    # 下载文件
    http --download https://example.com/file.zip
    

    jq:JSON命令行工具

    处理JSON数据的瑞士军刀。

    bash

    # 安装
    # macOS
    brew install jq
    
    # Ubuntu
    sudo apt install jq
    
    # 使用示例
    # 格式化JSON
    echo '{"name":"张三","age":25}' | jq .
    
    # 提取字段
    curl -s https://api.example.com/users | jq '.[].name'
    
    # 过滤数据
    curl -s https://api.example.com/users | jq '.[] | select(.age > 20)'
    

    tldr:简化版man手册

    告别冗长的man文档,看简化的例子就够了。

    bash

    # 安装
    # macOS
    brew install tldr
    
    # Ubuntu
    sudo apt install tldr
    
    # 使用
    tldr tar
    tldr git commit
    tldr docker run
    

    实用脚本与命令

    Windows批处理脚本

    一键清理Node_modules

    batch

    @echo off
    echo 正在清理 node_modules...
    for /d /r . %%d in (node_modules) do @if exist "%%d" rd /s /q "%%d"
    echo 清理完成!
    pause
    

    一键启动开发环境

    batch

    @echo off
    echo 启动开发环境...
    
    start cmd /k "cd D:\Projects\myapp && npm run dev"
    start cmd /k "cd D:\Projects\backend && npm run dev"
    start code .
    
    echo 开发环境已启动!
    pause
    

    macOS/Linux Shell脚本

    一键备份MySQL数据库

    bash

    #!/bin/bash
    # backup.sh
    
    # 配置
    DB_HOST="localhost"
    DB_USER="root"
    DB_PASS="password"
    DB_NAME="myapp"
    BACKUP_DIR="./backups"
    
    # 创建备份目录
    mkdir -p "$BACKUP_DIR"
    
    # 备份文件名
    DATE=$(date +%Y%m%d_%H%M%S)
    BACKUP_FILE="$BACKUP_DIR/${DB_NAME}_${DATE}.sql"
    
    # 执行备份
    mysqldump -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASS" "$DB_NAME" > "$BACKUP_FILE"
    
    # 压缩
    gzip "$BACKUP_FILE"
    
    # 删除7天前的备份
    find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete
    
    echo "备份完成:${BACKUP_FILE}.gz"
    

    一键部署脚本

    bash

    #!/bin/bash
    # deploy.sh
    
    set -e  # 遇到错误立即退出
    
    echo "=== 开始部署 ==="
    
    # 拉取最新代码
    git pull origin main
    
    # 安装依赖
    npm install
    
    # 运行测试
    npm test
    
    # 构建
    npm run build
    
    # 重启服务
    pm2 restart myapp
    
    echo "=== 部署完成 ==="
    

    工具组合推荐

    前端开发者

    plaintext

    代码编辑器:VS Code + Vue/React/TypeScript插件
    终端:Windows Terminal + Oh My Posh
    API调试:Postman
    浏览器:Chrome DevTools
    截图:Snipaste
    笔记:Obsidian
    文档:Docsify(自建文档站)
    

    后端开发者

    plaintext

    代码编辑器:VS Code / IntelliJ IDEA
    终端:Windows Terminal / iTerm2
    数据库:TablePlus / DBeaver
    API调试:Postman
    文档:Swagger / Redoc
    部署:Docker + Docker Compose
    

    全栈开发者

    plaintext

    代码编辑器:VS Code
    终端:Windows Terminal + Oh My Zsh
    API调试:Postman + Insomnia
    数据库:TablePlus
    版本控制:Git + GitHub Desktop
    容器:Docker Desktop
    截图:Snipaste
    剪贴板:Ditto
    笔记:Obsidian + Notion
    

    效率技巧总结

    快捷键为王

    把常用的快捷键练成本能反应:

    markdown

    # VS Code
    Ctrl+Shift+P  # 命令面板
    Ctrl+P        # 快速打开
    Ctrl+`        # 打开终端
    Ctrl+B        # 侧边栏
    Ctrl+Shift+E  # 文件资源管理器
    Ctrl+Shift+G  # Git面板
    
    # Windows
    Win+E         # 打开文件资源管理器
    Win+D         # 显示桌面
    Win+L         # 锁屏
    Alt+Tab       # 切换窗口
    Ctrl+Shift+T  # 恢复关闭的标签页
    
    # Chrome
    Ctrl+T        # 新标签页
    Ctrl+Shift+T  # 恢复关闭的标签页
    Ctrl+W        # 关闭当前标签页
    Ctrl+L        # 聚焦地址栏
    

    工作流程优化

    1. 每天开始工作前:清理昨天的临时文件,更新代码
    2. 写代码前先想好:规划好再动手,减少返工
    3. 善用代码片段:常用的代码保存为模板
    4. 定期整理工具:删除不用的插件,保持工具箱精简
    5. 备份配置:配置文件同步到云端,新设备快速恢复

    自动化那些事

    把重复的事情自动化:

    yaml

    # Git Hooks示例(pre-commit自动格式化)
    # .git/hooks/pre-commit
    #!/bin/sh
    npx prettier --write .
    git add .
    

    yaml

    # package.json scripts
    {
        "scripts": {
            "dev": "vite",
            "build": "vite build",
            "preview": "vite preview",
            "lint": "eslint src --ext .vue,.js,.ts",
            "format": "prettier --write src/**/*.{vue,js,ts}",
            "test": "vitest"
        }
    }
    

    总结

    好了,效率工具清单就到这里。回顾一下今天分享的工具:

    1. 代码编辑器:VS Code、JetBrains全家桶
    2. API调试:Postman、Insomnia
    3. 数据库管理:TablePlus、DBeaver
    4. 终端增强:Windows Terminal、Oh My Posh、Starship
    5. 截图标注:Snipaste、ShareX
    6. 剪贴板:Ditto、Paste
    7. 文件管理:Listary、Everything、Ranger
    8. 笔记工具:Obsidian、Notion
    9. 命令行工具:httpie、jq、tldr

    最后说几点我的感悟:

    1. 工具在精不在多:不要装一堆插件和工具,选几个顺手的长期用
    2. 快捷键要练成本能:这是提升效率的关键
    3. 定期整理优化:每隔一段时间审视一下自己的工作流
    4. 适合自己的才是最好的:别人推荐的工具不一定适合你

    关于内链方面,你可以继续学习VS Code配置教程,打造更高效的代码编辑器。或者学习TypeScript入门完全指南,提升编程技能。

    常见问题

    Q:工具装太多电脑变慢怎么办?

    A:定期清理不用的插件和软件。Windows可以用GeekUninstall彻底卸载,macOS用AppCleaner。

    Q:有没有一站式工具推荐?

    A:没有完美的全能工具。每个领域有最佳工具,组合使用效果最好。

    Q:如何快速适应新工具?

    A:先学核心功能,不要被高级功能吓到。用多了自然就会了。

    Q:工具配置太复杂怎么办?

    A:先从默认配置开始,只有真正需要的时候再改。不要过度配置。

    Q:程序员需要多少显示器?

    A:理想情况是双屏起步:一块写代码,一块看文档/调试。三屏更好,但颈椎要小心。

    你有哪些私藏的效率工具?欢迎在评论区分享!