精华内容
下载资源
问答
  • 学弟学妹要的Java学习路线我终于写完

    千次阅读 多人点赞 2021-05-07 21:27:03
    这篇文章的非常认真,足足花了两周时间,不是简单的资料聚合,我将多年的工作和学习经验下来了,相信看后你能有一种豁然开朗的感觉,这就是我要达到的目的,希望不要被打脸。 最近很多读者在问:Java 怎么...

    目录

    学Java有哪些就业方向?

    数据结构和算法

    设计模式

    计算机基础

    Java 入门

    Java 高手进阶

    基础框架(SSM)

    微服务框架

    常用中间件

    数据库

    分布式架构

    必须掌握的工具软件

    学习资源网站列表汇总

    最后回答几个常见问题(FAQ)


    这篇文章写的非常认真,足足花了两周时间,不是简单的资料聚合,我将多年的工作和学习经验写下来了,相信看完后你能有一种豁然开朗的感觉,这就是我要达到的目的,希望不要被打脸。

    最近很多读者在问:Java 怎么学习啊?有没有什么学习路线?

    我相信这些读者或多或少都有一些 Java 基础,但由于看不到全貌,学了一段时间很容易迷失。所以我在寻思着能不能写一个学习的地图或者路线,让读者能知道下一步该学什么,自己离大厂的 offer还有多远的距离。

    一个人最怕的不是路途遥远,而是看不到胜利曙光。我希望下面这篇文章能给你的学习之路带来一丝曙光,大家不妨试着读一下吧,如果有收获给我点个赞哟。

    买一瓶可乐,泡一杯咖啡,lets go 学习~

    学Java有哪些就业方向?

    在介绍 Java 怎么学之前我给大家介绍一下学完了能干什么,因为有目标的学习才是最高效的。

    很多 Java 入门学习者对岗位或者方向的概念非常模糊,今天学安卓、后天学大数据,三心二意的学习势必造成技术不精,这就是面试官通常说的:这位面试者基础比较差。

    学习技术首先要认准一个方向专注下去,有了一定积累后再将自己的知识面扩宽,找到自己感兴趣的方向再沉下去学习,周而复始你就成为这个行业的专家了。

    Java 这门语言,在公司里根据分工不同衍生出了众多的岗位或者技术方向。

    我在 boss 直聘上搜索了 BAT 等大厂的岗位,目前有以下三类岗位非常热门:

    (1)安卓开发

    技能要求:
    • 熟悉 Android UI 开发非常熟悉,对 UI 架构有理解,并了解基础的 UI 交互知识;
    • 熟悉 Android 调试工具和方法,可以应付各种 Android 复杂问题;
    • 熟悉 Android Framework 层,有通过 Android 源码阅读定位问题的经验;

    (2)Java 后端开发

    技能要求:
    • 具备扎实的Java基础,对JVM原理有扎实的理解;对Spring、MyBatis、Dubbo等开源框架熟悉,并能了解它的原理和机制,具有大型分布式系统设计研发经验;
    • 熟悉基于Mysql关系数据库设计和开发、对数据库性能优化有丰富的经验;
    • 熟悉底层中间件、分布式技术(如RPC框架、缓存、消息系统等);

    (3)大数据/数据仓库

    技能要求:
    • 熟悉Hadoop/Spark/sqoop/hive/impala/azkaban/kylin等大数据相关组件;
    • 精通sql及性能调优,熟练使用java、python、scala其中一种编程语言;
    • 掌握数据仓库 (DW) / OLAP /商业智能 (BI) /数据统计理论,并灵活的应用,具备大型数据仓库设计经验;

    这里只列举了三类比较热门的技术岗位,希望大家结合自己的经验思考一下方向。

    敲黑板:认清自己,找准方向,越早确定方向越容易成功!

    数据结构和算法

    学什么?

    有些同学可能要问了:我学 Java 的有必要学习算法吗?答案是:别无选择

    国内互联网面试的流程逐渐在向国外靠拢,像字节跳动、BAT 等大厂,手撕算法题已经成为了必选动作。

    确实, Java 相对于 C、C++有着丰富的类库和三方框架,进入工作后大部分人都是在写业务代码,俗称 API boy 或者 Crud boy,算法看起来并不是那么重要,但是考算法真的是公司面试筛选人的低成本办法,如果你写出了算法并且通过了,要么你聪明要么你勤奋(刷题了)。

    所以不管你是学什么语言:C、C++、python、Java、GO,算法这一关你必须得过。数据结构和算法的面试核心知识点我已经列出来了,大家可以参考学习,逐个击破。

    • 栈与队列:先进先出、后进先出
    • 线性链表
    • 查找:顺序查找、二分查找
    • 排序:交换类、插入类、选择类
    • 树、二叉树、图:深度优先(DFS)、广度优先(BFS)
    • 递归
    • 分治
    • 滑窗
    • 三大牛逼算法:回溯、贪心、动态规划(DP)

    怎么学?

    最好或者最笨的方法就是刷题,强烈推荐力扣:https://leetcode-cn.com 建议刷300题以上,要覆盖简单、中等、困难的题目。面试前要训练手感,不要生疏了,可以选保持每日或几日一题。

    在刷题之前我建议你看一些书: 《漫画算法-小灰的算法之旅》

    如果你之前没有任何算法基础,这边书很适合你,可以补充数据结构和算法的基础知识,像什么是时间复杂度空间复杂度、查找、排序等。 如果你有了一定基础了,建议你直接跳到最后面的算法实战部分。

    《剑指 offer》

    非常经典的一本书,学算法的人必刷。但是要注意了,这边书里面的题目是用 C++写的,如果你是 Java 开发人员可能会有点影响。但是要记住学习算法最关键的还是解题思路和方法,用什么语言实现是其次的,如果你时间比较多我是建议你用 Java 语言再实现一遍。

    《labuladong的算法小抄》

    非常推荐!这是一本很新的书,写书前作者在 Github 开源了一个项目,主要讲解 LeetCode 解题套路,Start 总数排名前40。在书的开头讲解了学习算法的基本思维和套路,建议看这边书的同时再配合 leetcode 刷题,疗效非常棒!

    《算法导论》

    要是不推荐这本书是不是显得我有点 low 了,这是一本科班出身的同学必看必学的经典大部头。国外大佬写的,国内翻译的经典之作,虽然是经典但是不建议刚入门算法的同学看,因为看了这本书你可能要放弃算法了,比较难看懂。建议有了一定基础再入手这边书。

    如果你觉得看书比较枯燥,可以推荐你看一些极客时间的专栏,不过是收费,但是质量非常高。 《数据结构与算法之美》

    这个专栏是文字+语音,作者是王争,前 Google 工程师。他采用最适合工程师的学习方式,不拘泥于某一特定编程语言,从实际开发场景出发,由浅入深教你学习数据结构与算法的方法,帮你搞懂基本概念和核心理论,深入理解算法精髓,帮你提升使用数据结构和算法思维解决问题的能力。

    《算法面试通关40讲》

    这个专栏是视频,作者是覃超,前Facebook工程师。作者会用白板带你一步一步解题,层层深入一环扣一环,每一题还会用多种解题方法。我基本看完了,收获颇多。

    leetcode、书和极客专栏可以并行,学练结合,不要光看不练哦。

    设计模式

    学什么?

    金庸小说中牛叉的武功太多了,综合性最强的还是九阳真经,九阴真经分为上、下两卷,上卷为内功基础,下卷为武功招式,这些都是极负盛名的武学秘籍

    那大家思考一下什么是武学秘籍?其实打开来开就是一些固定的招式,牢记这些招式并运用好就是绝顶高手了。

    回到编程上来,除了要写干净的代码(clean code),还要运用各种设计模式使代码可读性强、扩展性好、松耦合,这便是大家经常说的编码大牛。

    所以不管是学武功还是学编码,都是有一些固定的招式,也就是设计模式。

    说到设计模式很多同学可能会跳出来:这个我知道,就是单例模式、工厂模式……

    巴拉巴拉说了一堆,但是真正在写代码的时候又是一脸蒙:为什么我写的代码用不到设计模式?究其原因是你的代码经验不够。

    想一下设计模式是怎么来的?上个世纪四个大男人搞了一个组合叫 GoF,并出版了一本书,这本书共收录了23种设计模式,后面逐渐被人熟知。这四个人从大量的代码实践中总结了一套方法论(写代码的套路),而我们作为一个在学校的学生或者刚工作的新人,可能连代码都写的少,怎么可能轻松快速地掌握这么多设计模式。

    所以说你学完了设计模式,但是还不会运用到日常的代码实践中,这个是很正常的,因为代码经验还不够。

    那还学不学?当然要学,因为面试的时候有可能会问到。设计模式的理论知识我们还是要打好基础,需要掌握这些知识点:

    • 设计模式的六大原则:单一职责、里氏替换、依赖倒置、接口隔离、迪米特法则、开闭原则
    • UML 基础知识
    • 设计模式三大分类:创建型、结构型、行为型
    • 常用设计模式基本原理

    经典设计模式总共有23种(现在远不止23种了,还有一些变种),全部掌握难度太大了,我们只需要掌握一些常用的就好了,必须要掌握的我用小红旗已经标出来了。

    怎么学?

    网上关于设计模式的学习资料非常多,质量也是参差不齐,大家找的时候可要擦亮眼睛。

    在看书之前我还是推荐你熟悉一下 UML 的理论知识,因为你如果不懂 UML 那任何一本设计模式的书你都可能读不下去, UML 是设计模式的前提。

    UML 学习网站:

    https://www.w3cschool.cn/uml_tutorial/

    不要花太多时间学习 UML,简单理解入门即可。

    假设你已经入门 UML 了,那下面的这些书你可以考虑学习一下了:

    《Head First 设计模式》

    Head First 是一个比较经典的系列丛书,有些人非常喜欢这种风格。这本书讲枯燥的设计概念讲解的生动有趣,作为一本入手书非常值得推荐。

    《大话设计模式》

    大话系列是国内非常经典的系列丛书,有众多粉丝。这本大话设计模式以对话的形式讲解知识,在当时可开创了先河。虽然书中有些例子比较牵强,但任然不失为一本入门的好书。

    《图解设计模式》

    图解系列是日本的一位作者写的,有一本图解 HTTP 非常经典,这本图解设计模式也是类似的风格。由于是翻译过来的,书中有些例子可能听起来比较奇怪,貌似翻译过来的技术书都有这个问题。

    《设计模式-可复用面向对象软件的基础》

    又是一本黑色大部头书,书的作者就是 GoF,大家都说经典。但是呢,经典归经典,读起来真的是晦涩难懂,对新人非常不优化,如果你想入门学习设计模式,这本书就不推荐了。不推荐为什么要说出来?经典的书如果不提,你们又要说我菜。(害)

    这几本书都要看吗?当然不是,如果你是在准备面试,我个人建议是读其中一本就够了。至于说看哪一本,你可以找对应的电子书,挑一个章节试读一下,符合你的胃口就选择这一本继续读下去。

    如果你已经有几年的编码经验,又想把代码写好,建议你多挑基本读读,吸收每本书的精华。

    计算机基础

    科班出身的同学对《计算机网络》和《操作系统》这两门课应该不会陌生,至于掌握了多少,你懂得,都是在考前一两周突击学习的,哈哈。

    现在大公司对于应届生的要求越来越高,计网和操作系统这两门课是必考的。那些拿了 SSSP Offer 的大牛计算机基础都非常扎实。

    (1)计算机网络

    学什么?

    计算网络的协议非常非常多,很多同学学完都一头雾水,或者仅仅懂一点 HTTP,但是真正要掌握的东西可不少:

    • OSI 七层模型、TCP/IP五层模型
    • 常见网络协议:HTTP、TCP/IP、UDP
    • 网络安全:非对称加密、数字签名、数字证书
    • 网络攻击:DDOS、XSS、CSRF 跨域攻击

    怎么学?

    计算机网络面试有一道非常经典的面试题:说说你从URL输入到最终页面展现的过程。这一题可以覆盖大部分计网的知识点,可以从 DNS 解析到 HTTP、TCP/IP协议、物理层协议,一直到浏览器渲染页面,你技术功底有多深你就可以聊多深。希望大家学完了也能试着回答一下这个问题。

    推荐几本倍受好评的书: 《网络是怎么连接的》

    这本书是一本日本作者写的。文章围绕着在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,图文并茂生动有趣,非常推荐!

    《图解 HTTP》

    也是一名日本作者写的。这本书对 HTTP 协议进行了全面系统的介绍,列举了很多常见通信场景及实战案例,相信读完会有恍然大悟的感觉。书很薄,几天就可以读完,强烈推荐!

    《TCP/IP详解卷1:协议》

    计算机网络的经典教材, 大部头书籍,很难啃。建议挑重点看。

    最后安利一款工具,学习网络必备的抓包神奇:wireshark,如果你学网络没抓过包,那基本等于白学了(有点严重)。

    (2)操作系统

    学什么?

    作为一名 Javaer 在平时的工作中可能不会直接跟操作系统打交道,因为 JVM 帮我们屏蔽了众多差异。但是要想学好 JVM,懂一点操作系统更有助于你深刻理解 JVM 工作原理。

    Java 学习者这部分的要求可以稍微放低,但是你如果是搞 C++的,那这部分可是你的重点。

    • 进程和线程的区别
    • 进程间的通信方式:共享内存、管道、消息
    • 内存管理、虚拟内存
    • 死锁检测和避免

    怎么学?

    想要精通操作系统难度非常大,但是在面试中你要能讲出一些具体的操作系统知识,面试官会对你刮目相看。

    推荐一些视频学习资料:

    B 站:

    (1)麻省理工 MIT 6.828(无字幕):https://www.bilibili.com/video/BV1px411E7ST 

    (2)操作系统(哈工大李治军老师)32讲(全)超清:https://www.bilibili.com/video/BV1d4411v7u7

    推荐书籍资料: 《深入理解计算机系统 CSAPP》

    赫赫有名的 CSAPP,全称:Computer Systems:A Programmer‘s Perspective。科班同学的圣经,哈哈,黑色大部头书籍,难啃。

    《现代操作系统 (第3版)》

    操作系统领域的经典之作,因为是翻译过来的,遇到比较晦涩的先跳过,多读几遍才能消化。

    Java 入门

    学什么?

    Java 语言从诞生到现在已经有20多年了,从Tiobe排行榜上来看,Java 语言常年霸榜经久不衰,所以不要怕学完 Java 后突然不流行了,至少这几年Java 就业机会非常多。

    如果你有其他语言的基础,比如之前学过 C、C++等,那学起 Java 应该是非常容易的,也容易上手。如果你没有语言基础,又不想了解太底层的东西,那学 Java 还是不错的。至于说 python,光从语言层面上看,python 确实非常简单,估计你一周内就可以学会并且代码写的还不错,但是 Java 不一样,一周你只能简单了解一下语法,想写好代码几乎不可能。另外 Go 语言势头很猛,大家也可以关注一下。

    一般来说 Java 入门你需要掌握下面这些知识点:

    • 面向过程 VS 面向对象
    • 面向对象基本特征:封装、继承、多态
    • 访问控制符:private、default、protected、public
    • 数据类型:基本类型、引用类型
    • 控制流程:for、while、switch 等
    • 序列化
    • 异常处理(有点难度)
    • 泛型(有点难度)

    怎么学?

    如果你是零基础,建议你可以找一些 Java 入门的视频看一下,网上视频鱼龙混杂,大家注意甄别。推荐一个比较好的平台:B 站(https://www.bilibili.com/) 不是让你去看二次元的,里面有很多学习资源。(嘿哈)

    敲黑板啦:视频不要贪多,因为没有一个大牛是看视频看出来的。 看视频是别人将知识点往你脑袋里灌,最大的好处是能让你快速入门,如果你想学到更多,你需要的是自我学习,带有思考的自我学习。

    看书是一种高效的自我学习方式,推荐基本比较好的书:

    《Java 核心技术卷I》

    这本书建议作为Java 之旅的第一本书,涵盖的内容非常全,比起那些30天学会 Java 之类的书,这边书更加务实。书中有些章节其实不用看,比如Swing GUI 的直接略过,因为用 Java 写桌面端应用已经过时了。

    《阿里巴巴 Java 开发手册》

    大厂阿里巴巴出品的,这其实是一本 Java 编码规范,编码习惯从一开始就要养好。

    《Java 编程思想(Thinking In Java)》

    这是一本非常非常经典的书,你要问搞 Java 的人如果没听过这本书那算是白学了,哈哈。其实说实话这本书我试图看过几次,最终都没有看完,一个原因是它太厚了,另外我觉得讲得太啰嗦了,所以我现在拿来垫桌子,高度合适挺好的。所以呢,建议新人不要一开始看这边书,不然你会怀疑人生还没入门就放弃了,就把它当做编程圣经,等你后面有经验了拿起来再翻翻吧。

    敲黑板了:学习编程要有耐心,不要急于求成,要打好基础。也许你一个月两个月还在运行一些简单示例,这是正常的,多学习多思考。

    Java 高手进阶

    学什么?

    恭喜你终于Java 入门了,大牛和菜鸟的区别在于菜鸟永远止步于入门水平,而大牛已经找到新大陆了,翻过这几座山你离高手就不远了。

    Java 高手进阶需要掌握的东西非常非常多,这里列举一些核心知识点,必须全部掌握的。这是 Java 面试高频考点,也是传说中 Java 八股文的一部分,面好了进入下一面,面不好回家等消息。

    • Java 集合类源码
    • 线程池
    • Java 代理
    • IO 模型
    • JVM
    • Java 并发编程(JUC)

    怎么学?

    Java 已经入门了,你都想进阶了,建议你不要再找视频看了,一边看书一边思考吧。

    《Effective Java》

    书中列举了很多编程建议,其实就是告诉怎样去写好代码,你需要从 能写代码(入门)过渡到 会写代码,这本书值得一看。如果你的编码经验比较少,那这边书你可以稍微往后延,因为看完了你可能没有感同身受。

    《Java8 实战》

    Java15 都出来了为什么还要学 Java8 ?因为现在很多公司都还停留在 Java8, Java8是继Java5之后改动很大的一个版本,得好好学。Java8之后的版本非常不给力,换一个 JDK 版本费时费力,收益也不明显,公司肯定不愿意动了。这边书将 Java8所有的新特性都详细讲解了,非常推荐。

    《深入理解 Java 虚拟机 第3版》

    周志明大神写的,非常非常经典,已经更新到第三版了。Java 虚拟机也就是 JVM,JVM 是Java 面试必考的知识,不懂这个直接回家等消息吧。这边书我看了很多遍,每次看完都有新的收获,墙裂建议大家看完。

    《Java 并发编程的艺术》

    这是一本专门讲解Java并发的书,涉及到各种锁、常见安全的集合类,基本就是将 JUC(java.util.concurrent包的简称)里所有的内容覆盖了一遍,看完你一定有收获。强烈推荐!

    上面推荐的几本书可能不太容易读懂,建议多读几遍。书中看不懂的地方可以在网上搜,多找一些优质的博客或者公众号看,比如说有个公众号:爱笑的架构师,专门图解各种核心技术,推荐大家微信搜索关注(自恋,嘿哈)。

    至此 Java 语言特性基本学习完了,就算达不到高手的水平,你也在正轨上了。

     

    另外:文章中涉及到的书我都整理好了,需要的可以点这里获取

     

    基础框架(SSM)

    学什么?

    学习 Java 语言特性可能比较枯燥,接下来可以学习基础框架动手做一些项目,比如 Java 领域非常流行的 Spring 框架,这就是为 Java 后端量身定做的,非常好用。

    在 spring 流行之前,还出现 Struts 这样流行的框架,后面由于种种原因还是被 Spring 打败了。

    大家在网上应该可以经常看到 SSM 的缩写,其实就是Spring+SpringMVC+MyBatis的缩写了。

    你需要掌握以下这些:

    • Spring 全家桶(Spring、Spring MVC、Spring Boot)使用
    • ORM 框架(MyBatis、Hibernate)使用
    • Spring 原理
    • ORM 框架原理

    怎么学?

    学习 SSM 框架最好是动手完成一个简单的项目,建议跟着视频并且把代码敲出来,一来熟悉项目的开发流程,也可以给自己带来成就感。

    敲黑板:阶段性成就感非常重要,没有这个很容易放弃学习,所以要不定时给自己定个小目标,加加鸡腿啥的。

    有很多新手在做项目的时候非常纠结界面,作为一个 Java 后端程序员,你又不是全栈开发,纠结这个干什么,我的建议:要么不要界面只写接口,要么自己动手写点 html,不需要美观,实现功能即可。

    跟着视频做完项目之后需要干什么?答案是:深入理解框架原理。会用框架并不代表你懂框架,作为一个有追求的程序员,懂原理是永远的必修课,谁让这一行太卷了呢,人无你有你最棒。

    推荐几本书: 《Spring 基础内幕》

    首先声明一下这是一本讲解Spring 源码的书,不是教你做项目的书。如果需要深入理解 Spring 的技术原理,这是一本非常推荐的书。有点难啃,多读几遍。

    《MyBatis 技术内幕》

    MyBatis 是 ORM 框架的一种,在国内使用比较多,据说在国外喜欢用 Hibernate。这本书对 MyBatis 的使用和基本原理都介绍比较清楚了。

    敲黑板:技术更新迭代很快,抓住技术的本质才能与时俱进。

    关于基础框架这部分,大神们的学习方法是:使用框架 -> 懂框架 -> 造轮子。

    微服务框架

    学什么?

    近些年微服务架构非常火,究其原因是因为传统的单体架构和面向服务的架构逐渐不能满足互联网快速迭代的需求。微服务可以更容易提供持续继承和持续部署的能力,让产品更快速交付推向市场。

    面向服务的架构其实在五六年前就已经提出,期间经过了一段低潮期,泡沫散去后逐渐浮现了一些好用的框架,国外以 SpringCloud 为代表,国内以 Dubbo 为代表。

    springCloud 和 Dubbo 有区别但是很多基本原理也是类似,大家学习的时候需要掌握技术的本质。下面列举一些核心知识点:

    • Dubbo框架
    • SpringCloud框架
    • 服务注册与发现
    • 分布式服务链路追踪
    • 服务隔离、熔断、降级
    • 服务网关

    怎么学?

    springCloud 和 Dubbo 在官网都有很详细的介绍文档:

    看官网技术文档大家可能会很懵,但这些确实是最权威的资料,也是一手的。

    SpringCloud 和 Dubbo 是这几年刚刚流行的技术,从目前看来相关书籍还是比较少,也缺少一些经典的书,我还是列几本,大家按需获取。

    《深入理解Apache Dubbo与实战》

    Dubbo 最开始是阿里巴巴开源的,后面捐赠给Apache 了。建议大家读这本配合源码一起看。

    《Spring Cloud微服务实战》

    读这本书之前你最好先学习 spring 和 spring boot,不然会很懵。另外这本书是2017年出版的,稍微显旧,大家注意分辨新旧特性。

    如果技术网站和书籍还不能满足你,建议你去搜一些视频学习,这里不做推荐以免认为是广告。推荐搜索平台:B 站、慕课网、网易云课堂。

    敲黑板:微服务框架涵盖的内容非常多,也是有难点的技术,大家戒躁保持耐心。

    常用中间件

    学什么?

    最终用户并不直接使用中间件,换言之中间件不是大众消费类软件产品。但是在大公司里中间件是不可或缺的,它是支撑大型网站架构的一些基础的组件和服务,所以非常非常有必要学。

    小百科 中间件(Middleware)通常是指在一个大型分布式的系统中,负责各个不同组件(Component)/服务(Service)之间管理以及交互数据的。

    业界开源的优秀中间件非常多,通常会根据业务的需要在系统中引入若干,下面列举了一些常见的,都是必学的,非可选哈。

    • 缓存:Redis、Memcached( 推荐 Redis)
    • 消息队列:Kafka、RocketMQ、RabbitMQ、ActiveMQ、ZeroMQ(推荐 Kafka)
    • 数据库中间件:ShardingSpere、Mycat

    怎么学?

    每个中间件涵盖的内容都非常多,要想学精需要大量时间。

    Redis 中文官方网站:

    http://www.redis.cn/

    当做字典学习 redis 常见命令

    Kafka 官网:

    http://kafka.apache.org/

    ShardingSpere 官网:

    http://shardingsphere.apache.org/index_zh.html

    Mycat 权威指南在线 PDF 版:

    http://www.mycat.org.cn/document/mycat-definitive-guide.pdf

    推荐几本相关的书: 《Redis 设计与实现》

    这时Redis 口碑比较好的一本书,书中详细讲解了 Redis 实现原理,如果你只是想学会怎么用,可以跳过一些章节。

    《深入理解Kafka:核心设计与实践原理》

    这本书既适合新手入门扫盲也适合高手进阶,想知道怎么用看前四章即可,想深入学习可以从第五章开始看,写的非常好,推荐学习!

    《分布式数据库架构及企业实践——基于Mycat中间件》

    Mycat 相关的书非常少,这本书是16年写的,有些陈旧了,如果对 Mycat 非常感兴趣可以简单翻一翻,但是不是特别推荐。

    书看完了你还想深入学习,建议大家关注一下极客时间的两门课: 胡夕:《Kafka核心技术与实战》,老师是Apache Kafka Committer,很专业。 蒋德钧:《Redis核心技术与实战》

    不过课程是付费的,手头紧的建议慎重哈。免费资源网上也有,靠大家搜索了~

    中间件的学习是一个漫长的过程,不仅需要很多理论知识还需要实践经验。

    比如你学 Redis 的时候,要思考五种基本数据类型各自使用场景、布隆过滤器是什么原理、用 Redis 怎么实现分布式锁,带着问题去学习效率非常高。

    比如你学 Kafka 消息队列,要对比常见消息队列的优缺点、Kafka 为什么吞吐量高、Kafka 会不会丢消息以及怎么解决。

    比如你学数据库中间件,要想数据库为什么要分库分表、分库分表 ID 如果处理等等。

    数据库

    学什么?

    数据库非常重要,面试也是必考的,可以考的点非常多,可以考得很浅:问一下 SQL 使用,也可以考的很深:问索引和锁的实现原理。下面列了一些常见的知识点。

    • 数据库基本理论:范式、索引原理、数据库引擎
    • SQL 基本语法
    • SQL 调优,explain 执行计划
    • 数据库事务(ACID)
    • 数据库锁:乐观锁、悲观锁、表锁、行锁等

    怎么学?

    建议数据库零基础的同学还是要先学习一下数据库的基本理论,因为我看到很多人都是一上来就学 SQL ,最终也只是会用而已,到后面 SQL 调优的时候就很迷茫了。如果你只是想用一用数据库,这部分也可以跳过。

    关于原理部分有一本非常经典的教材《数据库系统概念》以供学习,经典书籍一般都比较难啃坑也比较厚,建议大家先看目录,挑重点看。大学学过这本书的可以直接跳过了。

    有了一些理论后就可以开始学习 SQL 语法了,这里推荐一本《MySQL 必知必会》,一边看书一边对着电脑敲。

    当然面试大厂肯定会问一下比较难的东西,你需要搞懂索引的原理、事务 ACID、锁,问数据库这些东西必考哦!

    MySQL 学习书籍清单: 《数据库系统概念》

    经典数据库教材,理解一些基本原理,可略看。

    《MySQL必知必会》

    SQL 语法入门好书,推荐!

    《MySQL技术内幕 : InnoDB存储引擎》

    数据库进阶必看,理解存储引擎以及事务、锁、索引等原理。

    分布式架构

    学什么?

    分布式这一部分就是面试的加分项了,答好了面试官会觉得你技术功底深厚,答不好,只要你前面的基础还不错也能过。所以呢,作为一个有追求的技术人,千万不要放过加分的机会。

    分布式相关的内容非常多,下面列举几个在项目中或者面试中经常会遇到的知识点:

    • 分布式事务:两阶段提交(2PC)、补偿事务(TCC)
    • 分布式锁:基于关系型数据库(MySQL)、基于 Redis、基于Zookeeper
    • 分布式 ID:雪花算法(Snowflake)、美团 Leaf

    怎么学?

    这部分内容学好非常难,在很多书中都是轻轻带过,没有深入讲解原理,所以就不推荐书了。

    那怎么学呢?大家可以针对每个知识点到网上搜索优质的博客,后面我也会逐步更文讲解这些知识点,敬请期待,欢迎催更哟。

    必须掌握的工具软件

    工欲善其事,必先利其器。作为一个 Java 开发人员,你需要学习业界常用的软件,软件工具用得越熟你的编码效率越高,下班的时间可能越早(打工人太难了)。

    • Java 最聪明的 IDE:IntelliJ IDEA (请放弃使用 Eclipse,我有一堆理由睡服你)
    • 地球上最好用的版本管理工具:Git
    • 经久不衰的依赖管理工具:Maven
    • Docker

    这些软件你要是用不好,那只能说明…… 你再多学学吧。

    学习资源网站列表汇总

    (1)视频网站

    (2)专栏

    (3)Github

    (4)技术博客:

    (5)搜索引擎:

    (6)知识问答:

    (7)刷题:

    (8)云笔记:

    (9)在线画图:

    各有特色,都推荐。

    另外:文章中涉及到的书我都整理好了,需要的可以点这里获取

     

    最后回答几个常见问题(FAQ)

    学了容易忘怎么办?

    这是大家学习会遇到的头号大问题,怎么解决?重复学习。

    打个比方,假如你正在学习 spring 注解,突然发现了一个注解@Aspect,不知道干什么用的,你可能会去查看源码或者通过博客学习,花了半小时终于弄懂了,下次又看到@Aspect 了,你有点郁闷了,上次好像在哪哪哪学习,你快速打开网页花了五分钟又学会了。

    从半小时和五分钟的对比中可以发现多学一次就离真正掌握知识又近了一步。

    人的本性就是容易遗忘,只有不断加深印象、重复学习才能真正掌握,所以很多书我都是推荐大家多看几遍。哪有那么多天才,他只是比你多看了几遍书。

    推荐这么多书都要看完吗?

    当然不是!有一些书都是同类型的,作者写书的侧重点不一样,大家要学会挑重点看。

    拿到一本书,首先要把目录多看一遍,一般而言书的前几章都是介绍型的内容,如果你已经有了基础,可以直接跳到后面原理解析或者实战部分。

    需要学多久才能成为技术大牛?

    学习无止境!

    业界说法,通过不断努力学习,一到两年可以达到初级水平,三到四年达到中级水平,五年可以达到高级水平。

    实际上每个人的学习能力和精力不一样,时间参考意义不大。

    只要你在一个方向或领域有自己的建树,就可以叫你大牛;如果你在公司是技术骨干、技术专家、架构师,也可以称之为大牛。

    敲黑板:技术学习千万不要浮躁,谦卑一点多学一点,天外有天。

    现在 python、Go 语言很火,要不要直接学它们?

    不要纠结语言,语言只是工具。今天 Go 很火,明天会有其他语言。

    我有一个同学毕业去阿里写 Java,后面跳槽到深圳腾讯写 C++,现在又跳到字节跳动写 Go,在大佬面前这些语言只是语法不一样而已。所以建议大家打好基础,答应我一定打好基础。

    为了保持质量这篇文章足足写了两周时间,希望大家在学习的时候能找到方向,不要再迷茫,加油。

    不如顺手点个赞?!

     

    作者:雷小帅

    推荐一个Github 开源项目,『Java八股文』Java面试套路,Java进阶学习,打破内卷拿大厂Offer,升职加薪!

    https://github.com/CoderLeixiaoshuai/java-eight-part

    作者简介:

    ☕读过几年书:华中科技大学硕士毕业;
    😂浪过几个大厂:华为、网易、百度……
    😘一直坚信技术能改变世界,愿保持初心,加油技术人!

    微信搜索公众号【爱笑的架构师】,关注这个对技术有追求且有趣的打工人。

    展开全文
  • 菜鸟程序员如何才能快速提高自己的技术

    千次阅读 多人点赞 2015-12-21 12:14:15
    导语:很久没有这么悠闲的在家撸一篇文章了,最近也在思考怎样才能写一些对程序员帮助非常大的文章,怎样去运营好我们这个移动开发者聚集地的公众号:非著名程序员。当初弄这个公众号的本意就是为广大的开发者提供...

    导语:很久没有这么悠闲的在家撸一篇文章了,最近也在思考怎样才能写一些对程序员帮助非常大的文章,怎样去运营好我们这个移动开发者聚集地的公众号:非著名程序员。当初弄这个公众号的本意就是为广大的开发者提供各种技术分享,发布最前沿的科技信息和技术。核心观念是:分享。认为只有分享,共享才能让我们开发者团队更强大

    菜鸟程序员如何才能快速提高自己的技术

    好了,言归正传,进入今天的主题,菜鸟程序员如何才能快速提高自己的技术,为什么要写这篇文章呢,因为有很多程序员给我留言,说我们这些初入社会,走向工作的程序员怎样才能做的更好,怎样才能更快的适应工作?还有很多初学者问我,怎样才能更好的学习这项技术?能不能写篇这方面的文章,所以才有了今天的主题。

    这里很明确,主体是两种人,0是初学者,1是刚刚走上工作岗位的程序员。那我就分别来讲讲吧,不一定适合所有人,也就是我的个人经验罢了。

    菜鸟程序员如何才能快速提高自己的技术

    0初学者

    夯实基础

    首先,就我个人经历而言,我认为初学者应该特别注意这个点,要注重基础,夯实语言,应该不能急于求成,欲速则不达,好像和快速提高自己的技术这个题目有点冲突,其实题目本来就是一个伪命题,要想真正的快速提高,必须要以慢打快,才能更快。因为对于初学者而言,基础知识,编程语言必须要夯实,只有真正懂了基础,才能举一反三。

    举个我的例子吧,我记得我在大二的时候,移动互联网刚刚兴起,那时候我本来想学习java web开发来,后来感觉移动开发更有前途,就毅然决然地转向了移动开发,由于比较穷,干不起ios,就学了android,那时大学我就知道玩,没怎么学,刚自学android的时候,必须先学java,java就懂个大概,真的,什么匿名内部类什么的,回调接口,文件流啥的都不懂,学起来超费劲,被迫自己又在网上下载视频,重新学习了一遍java,之后再去看android的时候,才豁然开朗。所以基础绝对重要,我的总结就是:再快不能快基础,再烂不能烂语言

    记笔记,写博客

    其次,学习的时候,要学会总结,要记笔记,告诉你们一个记笔记的好方法,就是写技术博客。在学习过程中,老师讲的demo,总结的知识点,自己记录到技术博客中,由于编程知识点太多,烂熟于心是不可能的,那就好记性不如写博客。写在博客中,既能分享,又能方便自己查找,还能巩固自己的知识点。去看看我的博客你就知道了,里面有很多现在看来不值一提的内容,但是对于初学者而言,绝对重要。总结,记笔记,写博客就跟冠希哥的电脑一样,方便,好看,说不定哪一天就能一博成名

    学会查文档,调bug

    文档这东西,肯定有很多程序员不喜欢看,尤其是英文文档,这个坎我们一定要跨过去,自己看不懂,可以找翻译软件啊,翻译翻译多了,估计就能认识了,也能看个大概了。学会了自己查文档,就提高了自己解决问题的能力了,也提高了学习新技术的能力。别问我为什么这么说,别说话,直接吻我,以后你会感谢我的。调试bug我就不多说了,这个重不重要,还用问吗?总结,学会了查文档,调bug,就跟在百度上谷歌一样,其实没那么难。

    对于自学者而言,在网上搜上一套完整的教学视频,网上教学视频多的是,自己找一套完整的,系统的去学,学完之后,自己要尝试着做一些软件,可能你没有数据,不会做后台,搞服务器,我记得我写过一篇文章叫:《绝对干货:供个人开发者赚钱免费使用的一些好的API接口》,这里面的接口足够初学者练手用的了,做好了,还方便以后拿出去找工作。既做了软件,还能够练手,又能够用于找工作,何乐而不为呢?对于初学者我就先说这么多吧!

    1初入社会的程序员

    其实对于刚到一个新的公司,新的环境的程序员,肯定会有各种不适应,那么自然而然,我们首先要做的就是尽快适应环境,学习代码,刚到公司的一周,肯定是先让你看代码,了解公司,这一两周,也尽快调整自己,适应环境,对于刚到公司的人来说,有很多不好意思,代码你可能不熟悉,不太懂,所以你一定要有勇气去问,都说了不耻下问,何况你这是上问呢。

    在工作的时候,也要时刻总结,了解公司代码的架构,为什么这么写,有什么好处,做到自省和常问,如果工作之余还有时间,就尝试着去了解新的技术和一些框架知识,对于以后的发展还是非常有帮助的。多去浏览一些技术博客和网站,提高自己。说实话,我还真没有什么好的建议和意见。

    对于初入社会刚工作的程序员,我的总结就是:要有凤姐一样厚的脸皮,无耻刘皇叔一样的不羞上问,跟穿山甲一样的能力,你就能混的成功

    著名的移动互联网专家,自媒体人,运营的公众号“非著名程序员”,每天一篇原创技术分享和移动互联网知识分享,微信公众号:smart_android ,头条号和百度百家账号都是“非著名程序员”。

    展开全文
  • HashMap之快速失败避免读写同时进行

    千次阅读 2017-04-09 20:23:09
    HashMap是线程不安全的。那么面对读写同时进行会怎么样呢,JDK面对明显的脏数据如何避免,走进科学为你揭晓传说中的快速失败机制是什么样子

    引言:

    一般面试都有一些线程题目,大致是某某集合和某某集合什么区别,比如Hashmap .HashTable,ConcurrentHashMap有什么区别
    很多网上答案都说线程安全,一个线程不安全。那么这里不是讨论什么叫线程安全,只是讨论线程不安全怎么办。
    

    介绍:

    以HashMap为例,它不安全,什么叫不安全。简单理解就是多线程读写可能是脏数据,比如你在A线程读,B线程写了一个新数据,而A线程却不知道。可怕。。
    之前有一个奔溃是java.util.ConcurrentModificationException,就是线程不安全的操作,不过更专业的说法是快速失败。HashMap在读的过程中,如果写操作,jdk在处理这种情况是有一个判断的:
    即迭代器迭代,检测当前集合大小,如果大小不符合预期则抛出异常达到快速失败的效果。
    例如迭代器迭代开始时候是4个key,中间发现变成5个key,这时候迭代器直接失败抛出异常,因为它认为迭代中是读操作,至始至终都应该是不变的集合才能保障效果。这里有一些问题需要解释:迭代过程,修改key对应的键值对,那也是修改了,那迭代要不要抛异常。如果抛异常怎么判断?毕竟集合大小没有变化呢
    

    代码:

    开启阅读源码模式
    —–会奔溃的代码。(我自己写的测试代码)

    `public static void main(String args[]) {
            HashMap<String, String> map = new HashMap();
            map.put("0", "1");
            map.put("1", "x");
            map.put("2", "x");
            Iterator<String> i = map.keySet().iterator();
            while (i.hasNext()) {
                if (map.get(i.next()).equals("x")) {
                    map.put("ok", "true");              
                }
            }
        }`

    结束,那么问题应该是i.hasNext()
    ——jump it.read the fuck code
    i是hashmap的键对应迭代器,这个类是HashMap$KeySet
    public Iterator<K> iterator() {
    return newKeyIterator();
    }
    public int size() {
    return size;
    }
    public boolean contains(Object o) {
    return containsKey(o);
    }
    public boolean remove(Object o) {
    return HashMap.this.removeEntryForKey(o) != null;
    }
    public void clear() {
    HashMap.this.clear();
    }

    再看KeyIterator类。
    private final class KeyIterator extends HashIterator<K> {
    public K next() {
    return nextEntry().getKey();
    }
    }

    再看nextEntry()方法
    final Entry<K,V> nextEntry() {
    if (modCount != expectedModCount)
    throw new ConcurrentModificationException();
    Entry<K,V> e = next;
    if (e == null)
    throw new NoSuchElementException();


    —–关键代码就是第一步的判断,也就是希望值和实际值不符合直接抛异常,这不就是生活中不符合预期直接解雇你吗。哈哈哈哈哈哈
    if (modCount != expectedModCount)
    throw new ConcurrentModificationException();

    原理介绍:

    小情绪梳理一下,HashMap迭代器中,每一次迭代都判断当前梳理和预期梳理是不是符合保持一致,如果不一致不再迭代直接抛异常。
    那么再解释一下几个变量的原理
    modCount != expectedModCount
    /**
    * The number of times this HashMap has been structurally modified
    * Structural modifications are those that change the number of mappings in
    * the HashMap or otherwise modify its internal structure (e.g.,
    * rehash). This field is used to make iterators on Collection-views of
    * the HashMap fail-fast. (See ConcurrentModificationException).
    */
    transient int modCount;

    HashMap结构修改的次数,包括那些修改Hashmap映射的数量或者导致内部结构。变化的数量,这个变量是用于快速失败。就是这么理解呗,hashmap变化就将变量+1
    常见的是不是有put操作,remove操作,
    看看相关操作都会自增这个变量,也就是修改了HashMap都会让这个变量+1
    public V put(K key, V value) {
    if (key == null)
    return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
    Object k;
    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
    V oldValue = e.value;
    e.value = value;
    e.recordAccess(this);
    return oldValue;
    }
    }
    modCount++;
    addEntry(hash, key, value, i);
    return null;
    }

    再看看 expectedModCount
    1。赋值,是在初始化类也就是迭代器一开始就取当前modCount,预期是当前的数量。

    2 那以后在迭代中,期望值是第一次迭代赋值,实际上你可能会添加一个值,那这样就不一样了。
    直接异常处理。

    一些引申:

    1.HashMap如果在迭代时候又想添加元素是不可以的,至少没有一些外部方法可以这种效果又没有异常抛出。
    但是迭代中去删除是可以的,并且也符合实际情况,有一个方法也对外调用就是不要直接使用hashmap的删除,而是使用迭代器的删除。
    HashInterator调用这个方法可以删除相关key
    `public void remove() {
    if (current == null)
    throw new IllegalStateException();
    if (modCount != expectedModCount)
    throw new ConcurrentModificationException();
    Object k = current.key;
    current = null;
    HashMap.this.removeEntryForKey(k);
    expectedModCount = modCount;
    }`

    再引申一下:一些奇葩面试题目可能面试官想吐槽想恶心别人导致心理阴暗,他们出一些快速失败的例子,但是又不会抛出异常导致奔溃,仔细想一下如果我们在迭代中集合只有一个元素,然后迭代中插入一个键值对会不会奔溃,答案是不奔溃。还有一些是直接break导致不会检测也就不会奔溃,非常隐蔽啊。因为根本没有机会让迭代器判断expect!=modCount啊根本原因也就是快速失败尽自己最大的努力去避免读写同时进行导致脏数据,而不是万无一失的保障。


    终于写完快速失败的原理了,网上已经有很多例子啊(自己真的是妈的智障),但是自己看代码弄清楚原理就是不一样啊,希望大家都弄清楚原理,多读源码,少一些浮夸的东西

    展开全文
  • 零基础的同学如何才能快速学好C++

    千次阅读 多人点赞 2018-12-20 22:37:49
    2018年下半年了,程序员对于c++语言的认识越来越深,很多企业在面试程序员的时候都会说到c++,这就说明c++的时代来临了,所以我们要重视c++。下面的是学c++时要注意的。...1.c++当成一门新的语言...

    2018年下半年了,程序员对于c++语言的认识越来越深,很多企业在面试程序员的时候都会说到c++,这就说明c++的时代来临了,所以我们要重视c++。下面的是学c++时要注意的。绝对经典。!!

    (小编推荐一个学C语言/C++的学习群:715383213,入群即送C/C++全套学习资料,满满的干货!,私信小编“资料”即送C/C++全套学习资料,满满的干货!)

     

    1.把c++当成一门新的语言学习(和c没啥关系!真的。);

    2.看《thinking in c++》,不要看《c++变成死相》;

    3.看《the c++ programming language》和《inside the c++ object model》,不要因为他们很难而我们自己是初学者所以就不看;

    4.不要被vc、bcb、bc、mc、tc等词汇所迷惑——他们都是集成开发环境,而我们要学的是一门语言;

    5.不要放过任何一个看上去很简单的小编程问题——他们往往并不那么简单,或者可以引伸出很多知识点;

    如果想学c++并想学好,可以加这个群,首先是玖四捌,中间是玖伍四,最后是四捌四,里面有大量的学习资料可以下载。

    6.会用visual c++,并不说明你会c++;

    7.学class并不难,template、stl、generic

    programming也不过如此——难的是长期坚持实践和不遗余力的博览群书;

     

    8.如果不是天才的话,想学编程就不要想玩游戏——你以为你做到了,其实你的c++水平并没有和你通关的能力一起变高——其实可以时刻记住:学c++是为了编游戏的;

    9.看visual c++的书,是学不了c++语言的;

    10.浮躁的人容易说:xx语言不行了,应该学yy;——是你自己不行了吧!?

    11.浮躁的人容易问:我到底该学什么;——别问,学就对了;

    12.浮躁的人容易问:xx有钱途吗;——建议你去抢银行;

    13.浮躁的人容易说:我要中文版!我英文不行!——不行?学呀!

    14.浮躁的人容易问:xx和yy哪个好;——告诉你吧,都好——只要你学就行;

    15.浮躁的人分两种:a)只观望而不学的人;b)只学而不坚持的人;

    16.把时髦的技术挂在嘴边,还不如把过时的技术记在心里;

    17.c++不仅仅是支持面向对象的程序设计语言;

    18.学习编程最好的方法之一就是阅读源代码;

    19.在任何时刻都不要认为自己手中的书已经足够了;

     

    20.请阅读《the standard c++ bible》(中文版:标准c++宝典),掌握c++标准;

    21.看得懂的书,请仔细看;看不懂的书,请硬着头皮看;

    22.别指望看第一遍书就能记住和掌握什么——请看第二遍、第三遍;

    23.请看《effective c++》和《more effective c++》以及《excepti c++》;

    24.不要停留在集成开发环境的摇篮上,要学会控制集成开发环境,还要学会用命令行方式处理程序;

    25.和别人一起讨论有意义的c++知识点,而不是争吵xx行不行或者yy与zz哪个好;

    26.请看《程序设计实践》,并严格的按照其要求去做;

    27.不要因为c和c++中有一些语法和关键字看上去相同,就认为它们的意义和作用完全一样;

    28.c++绝不是所谓的c的“扩充”——如果c++一开始就起名叫z语言,你一定不会把c和z语言联系得那么紧密;

    29.请不要认为学过xx语言再改学c++会有什么问题——你只不过又在学一门全新的语言而已;

    (小编推荐一个学C语言/C++的学习群:715383213,入群即送C/C++全套学习资料,满满的干货!)

    30.读完了《inside the c++ object model》以后再来认定自己是不是已经学会了c++;

    31.学习编程的秘诀是:编程,编程,再编程;

    32.请留意下列书籍:《c++面向对象高效编程(c++ effective object-oriented software c software c patterns)》《the art of computer programming》;

    33.记住:面向对象技术不只是c++专有的;

    34.请把书上的程序例子亲手输入到电脑上实践,即使配套光盘中有源代码;

    35.把在书中看到的有意义的例子扩充;

    36.请重视c++中的异常处理技术,并将其切实的运用到自己的程序中;

    37.经常回顾自己以前写过的程序,并尝试重写,把自己学到的新知识运用进去;

    38.不要漏掉书中任何一个练习题——请全部做完并记录下解题思路;

    39.c++语言和c++的集成开发环境要同时学习和掌握;

    40.既然决定了学c++,就请坚持学下去,因为学习程序设计语言的目的是掌握程序设计技术,而程序设计技术是跨语言的;

    41.就让c++语言的各种平台和开发环境去激烈的竞争吧,我们要以学习c++语言本身为主;

    42.当你写c++程序写到一半却发现自己用的方法很拙劣时,请不要马上停手;请尽快将余下的部分粗略的完成以保证这个设计的完整性,然后分析自己的错误并重新设计和编写(参见43);

    43.别心急,设计c++的class确实不容易;自己程序中的class和自己的class设计水平是在不断的编程实践中完善和发展的;

    44.决不要因为程序“很小”就不遵循某些你不熟练的规则——好习惯是培养出来的,而不是一次记住的;

    45.每学到一个c++难点的时候,尝试着对别人讲解这个知识点并让他理解——你能讲清楚才说明你真的理解了;

    46.记录下在和别人交流时发现的自己忽视或不理解的知识点;

    47.请不断的对自己写的程序提出更高的要求,哪怕你的程序版本号会变成version 100.xx;

    48.保存好你写过的所有的程序——那是你最好的积累之一;

    49.请不要做浮躁的人;

    50.请热爱c++!

    小编推荐一个学C语言/C++的学习群:715383213,入群即送C/C++全套学习资料,满满的干货!

    ---------------------

    展开全文
  • 二哥,我是一名大学生,专业是电力工程,但想自学 Java,如何快速打好基础呢? 微信上 tison 向我提出了这个问题。我想我是有资格来回答的,从北京奥运会那年开始学 Java,到现在已经有 10 多个年头了,真的是从一...
  • 程序员如何才能写出一篇好的技术文章

    千次阅读 多人点赞 2016-03-01 00:00:42
    每天有大的时间刷GitHub,博客。从我大二的时候,大概六年前开始技术博客,到现在已经有540+了,大概每年会一百篇左右。这个答案由四部分组成: 博客的流量来源 不同文章类型的写作要点 如何博客 如何收集...
  • 排序算法 阿里巴巴钉钉部门面试题(完整版+答案解析): 远程面,该如何操作才能稳坐“直通车”? (1)准备外在:设备、环境 关于远程面试,第一点我们需要做好的就是准备外在,所谓的外在,包括了设备、视频环境、...
  • 快速找出数组中出现次数超过一半的数字

    万次阅读 热门讨论 2018-07-09 22:04:45
    “只要不是特别大的内存开销,时间复杂度比较重要。因为改进时间复杂度对算法的要求更高。” ——吴斌(NVidia,Graphics ...我们只有对常见的数据结构和算法都了然于胸,才能在需要的时候选择合适的数据结构...
  • 8000干货:那些很厉害的人是怎么构建知识体系的

    万次阅读 多人点赞 2019-09-29 11:18:27
    本文约8000,正常阅读需要15~20分钟。读本文可以获得如下收益: 分辨知识和知识体系的差别 理解如何用八大问发现知识的连接点; 掌握致用类知识体系的构建方法; 能够应用甜蜜区模型找到特定领域来构建知识体系...
  • 那么怎么才能快速获取敬业福? 只需要再找五个人组群,每个人都发一套手写套卡,这样每个人都可以领到敬业福。 如何发手写套卡? 进入“福字 得福卡”的页面 一个福字,生成福卡 点击生成套卡送朋友即可 需要...
  • 点击关注上方“五分钟学算法”,设为“置顶或星标”,第一时间送达干货。博客大致可以分为三步:写作前写作中写作后按照这三步介绍这个过程中我用到一些工具。写作前trello官网地址:http...
  • 怎样利用思维导图快速记忆

    千次阅读 2017-08-30 18:49:09
    思维导图又叫心智图,是一种高效思维模式,目前主要应用于记忆、学习、思考等方面的思维“地图”。 快速记忆的方法有很多,如何用思维导图来快速记忆呢?
  • 于LeetCode刷900题之际的感想

    千次阅读 多人点赞 2019-11-01 08:34:36
    时光匆匆,距离开始博客转瞬便是大半年已过, 从最初寒假每天十题的刷题狂热信徒,到如今一周也做不到二十题的佛系上岸选手,有了很多感想经验,因而有了这篇文章。 我的第一轮刷题,始于二叉树,接着按照二叉...
  • Java 初中级程序员如何快速成长?

    万次阅读 多人点赞 2020-03-15 22:11:05
    入职后如何快速成长到 CTO 入职后三个月试用期要做的事 三法宝,处理同事关系 核心两点,处理好领导关系 每件事都是学习的机会 主动加班,试用期加班是学习的好机会 未通过试用期,如何应对? 前三年需要学的...
  • 未经过系统训练,只依靠天赋文案,可能痛苦了3天的文案,最后产出的价值基本为零。文案不好,浪费精力时间,让老板、同事、自己失望。文案小白,如何才能更快达到高薪专职文案水准?让文案产生价值,带来用户和...
  • Unity游戏制作,本篇文章介绍了复刻皇室战争玩法的一个自制小游戏,共有该游戏的两万教程加制作过程,欢迎品尝! 世界上没有绝对的公平,如果我们起点就比别人第一步,那就更需要比别人努力了。
  • 今天小编就告诉大家如何快速修改HOSTS文件。先来看看,什么是HOSTS?什么是HOSTS文件?Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联...
  • End 行末 Home 开始
  • AndroidStudio的快速入门

    千次阅读 2016-06-20 10:17:18
    心好疼:昨晚写完了这篇博客一半,今天编辑的时候网络突然断了,我的文章就这样没了,但是为了Developer的使用AS这款IDE可以快速上手,我还是继续进行详解。(本篇文章结合图片注释详细介绍AndroidStudio的基本设置...
  • 笔者如今学习android有近8个月,此时才真正地学一本书也甚是惭愧。 在此分享一下自己大概的学习经历。(笔者在大一下就开始学android了,学的时候只有c与c++的基础,一个学期+寒假在OJ上刷了近300道题。对java...
  • 怎样写好一篇高质量的技术文章?

    千次阅读 2020-05-03 02:57:50
    怎样写好一篇高质量的技术文章? 培根说“读史使人明智,读诗使人聪慧,学习数学使人精密,物理学使人深刻,伦理学使人高尚,逻辑修辞使人善辩。” 核心心法 就是起心动念利他,一切方法自来。 先来问自己几个问题 ...
  • 什么的服务器才能叫做大并发

    千次阅读 2013-06-13 16:10:42
    我觉得服务器在成为大并发前,首先要能承受住大并发的压力,无论能否正常返回,首先不能崩溃。 apache和nginx是两个出名的服务器,先来分析一下它们。 大量用户访问的时候,apache会创建大量的进程数...快速响应
  • 这篇文章的有点过于细节,因此考虑到可读性和日后的可查阅性,我以两个问题作为引子。作为TCP相关项目的招聘,也可以作为面试题,不过,我敢肯定,大多数人都不能回答第一个问题,第二个问题可能会模棱两可。问题1...
  • 开发中,经常会用到动态在ScrollView、LinearLayout里addView的事,尤其是ItemView一样时,每次都要一大堆代码 inflater 动态addView,很烦。 这个时候就开始期待,能不能有一种快速为任意ViewGroup添加子View的...
  • 可以说,学姐给我的这份文档真的我的知识查漏补缺,面试问到了好多,值得收藏。
  • 当 AOF 持久化功能处于打开状态时, 服务器在执行一个命令之后, 会以协议格式将被执行的命令追加到服务器状态的 aof_buf 缓冲区的末尾: struct redisServer { // ... // AOF 缓冲区 sds aof_buf; // ... ...
  • 快速阅读

    千次阅读 热门讨论 2013-12-29 20:23:56
    期末考试将至,大家都开启了学霸模式,问题就来了,一个学期都听不懂的知识,怎样在4周内就看?一个学期5、6门课程要求你在4周内学知识点,是不是很不切合实际,而事实上,这是完全有可能的,那就是用快速阅读。
  • 论如何才能提高软件的开发效率及代码效率────给初学者的一些感想 作者:林宣武 E-mail:linxuanwu9@yahoo.com.cn QQ:342569746 著作权所有,转载请带上作者名字 本文的适应读者:刚毕业的学生,并刚入软件...
  • Angular 初学者快速上手教程

    万次阅读 多人点赞 2018-04-12 10:41:37
    课程介绍 本课程是一个系列基础教程,目标是带领读者上手实战,课程以新版本 Angular 的 3 个核心概念作为主线:组件、路由、模块,加上业务开发过程中必须用到的特性:...认真读这个系列文章之后,您会深入理解...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 171,317
精华内容 68,526
关键字:

怎样才能把字快速写完