coding我的编程之路——知识管理与知识体系某熊的全栈之路

六年前笔者开始接触到C语言,写了第一行HelloWorld。三年前开始进入工作岗位进行实践,前前后后参与了公司里、学校里也有十来个项目,自己也有多次自主创业的经历。在不懂事的时候,笔者自诩“全栈架构师”,从前端的Android、iOS、Web,到中间件的Apache、Nginx,再到后端的Laravel、Spring、Rails、NodeJs,还有MySQL、Redis、Mongodb,有时候还要做些CI,用用Hadoop、Docker、Spark做做云计算环境,再实践实践机器学习的算法。呵呵,每当想起这些,笔者脑中就闪过了孔乙己一字排开八个大钱的画面,只懂些名词,真是连民科都不如。作为一个有底线的程序猿,知之为知之,不知为不知,虽然笔者在不长的实践生涯中“被迫”着了解了计算机软件行业的许多方面,但是笔者在这里描述这个背景并不是自夸或者装逼,只是想陈述一个事实:如果你还没有感到知识管理、知识归档的痛苦,那说明你还了解的不够多。如果你还只是停留在一字排开数个名词的阶段,那说明你了解的还不够深。

技术分为术与道两者,术即是具体的做事的方法,而道则是做事的逻辑抽象的原则与原理。一味地追求术的人往往都是希望走捷径,不求甚解的。而道之所求也是符合一万小时原理,需要大量的付出与总结。借用数学之美中的例子,如果你想要去建立一个搜索引擎,直接拿来主义,用上Solr、ElasticSearch之类的,是术。而根据下载、索引与排序这三个抽象步骤来进行提炼与升华,这就是道。计算机科学有两类根本问题。一类是理论:算法,数据结构,复杂度,机器学习,模式识别,等等等。一类是系统:操作系统,网络系统,分布式系统,存储系统,游戏引擎,等等等等。粗浅的说,学界会偏向前者,产界偏向后者,笔者作为一只一直读书的从本科到硕士,见多了二者相互嫌弃。但是这二者相辅相成,笔者自己数学一直不好,对于那些公式啊推导畏如猛虎,但是用心看了之后,甚多乐趣啊。所谓举一反三,见微知著,这都是需要在一个广博的知识的基础上才行,所以对于知识,还是应该拿来主义,来者不拒。

笔者回顾自己这几年的风雨历程,老实说,谈到绝望或者无奈的场景往往不是某个具体的问题,能解决的问题是一定可以解决的,而是在知识海洋面前,感受到了宇宙的浩瀚与人类的渺小。庄子有云:吾生也有涯,而知也无涯。以有涯随无涯,殆已!笔者最常感觉痛苦的事情有二:

授人以鱼不如授人以渔,笔者一直觉得我这几年磕磕碰碰精华所在就是这完整的知识体系架构,它给了我莫大的信心与勇气去遨游在璀璨的知识长河中。不积跬步无以至千里,编程之路亦如一场游戏,随时学点知识拿个EXP,或者打个大魔王爆个装备啥的,一个完备的知识体系或者知识图谱,就是你的背囊,也是你行走在知识海洋里的一叶扁舟。当然,本文所讲也只是一家之言,做不得准,大家见仁见智。顺便说一句,笔者很感谢为知笔记为我提供了非常好用的工具,这里友情推广一波。

知识应该放在它应该在的地方。

笔者从学习第一门语言开始,就被教导一个概念,学习一门语言的基础,也就是语法本身,不代表你掌握了这门语言。学习一门语言应该是学习它所代表的完整的生态环境和在各个应用场景下最合适的组合。同样的,笔者大大小小算是用过七八门语言,当然,你为了学习而去学习,用语言的数量标榜自己是毫无意义的。但是,每个语言都有其特性,就像才接触Python时候它的弱类型、快速开发的便捷以及后面应用到大型程序开发时候的代码混乱都给我留下了深刻的印象。往往说一门语言不好是因为你没学到家,但是就所处的技能水准和应用场景而言各个语言还是各有其优势的。笔者看现有的很多教程,以Java为例,它的讲解方式以及应用示例都是基于JDK本身和Java语言本身的特点的。那么笔者自己总结的这份所谓的编程语言的知识结构图或者拓扑图,是会抽象了各个语言的特性而形成。唔,譬如笔者最早是在JavaScript中,在用jQuery的时候接触到了Promise的概念,后来在Java、在Swift中都发现了类似的,但不一定叫这个名字的用法或者第三方类库,那么我们在做笔记时,首先要知道,你现在所学的,是应该放在哪一部分。

在这里你要了解这门语言的由来,它的特点,它的基本面貌。譬如你要了解下它各个版本迭代的特点。就像Java8提出之后,你需要专门的对于Java8的语法特性进行一些了解,但是对于某个具体的语法知识点还是应该放到对应的语法讲解的位置。譬如Java8里面提出了函数式接口,那这部分具体的讲解还是应该放置到接口那一部分。

其次呢,你还要在这边了解基本的注释与代码分割的规范,就好像笔者初学Python的时候,这货没有大括号,用的是缩进分割的方法,让才从C++/Java走过来的笔者一顿酸爽。

接下来,在入门概述这边,你还要放外部资料的链接。你不可能把全部的你看到的资料转化为自己的笔记,那么你需要把所有的你看到的有价值的参考资料地址存放在这里。笔者大概分为了:

学习一门语言的时候,你肯定会写HelloWorld,笔者在上面强调过,做笔记的一个目的就是在未来某天你可能全部忘记的时候能够以最快的速度学会,那么你再次学习的时候肯定会去继续写HelloWorld。在这一部门,你需要知道怎么搭建开发环境,特别推荐是也要学下怎么使用Docker去搭建开发环境。接下来呢,你要学下构建工具和依赖管理工具。在早年,笔者才学Java,还不知道用Maven的时候,那个时候根本分不清什么构建啊、依赖管理的概念,每次要用jar包了只能手动拖拽,真心呵呵哒。当然,一门优秀的编程语言一定要有其对应的构建与依赖管理工具,这样才能促进整个社区的活跃与交流。然后你要看看怎么进行代码部署,就好像Python的Notebook、Swift的PlayGround这些个神奇的东西,还是非常好用的。

最后呢,还要看看常用的IDE,不过笔者目前基本上就用的是Atom加上Jetbrains(感恩)这一个系列。唔,之前看到很多大牛喜欢用Sublime啊Vim来写代码,我表示,这个逼还是不要装的好。

学完了HelloWorld,我们就要来看看数据结构了,这是一个编程语言的基石所在。那么不论哪一种语言,它会提供给我们哪些知识呢。

(1)首先是知道怎么去定义变量与常量。就好像JavaScript里面的var、let,以及未来Java里面会加入的val,变量定义的方式也是有很多种的。还有就是要了解下系统的内置的常量,这个在使用PHP进行开发的时候比较用得上。接下来,要看看这个变量是怎么赋值的,是必须单个赋值还是能够链式赋值,或者是像JavaScript这样还能支持解构赋值。最后呢,这一部分还要看看你怎么进行类型、格式判断的,好比instanceof啊typeof这些操作符,都是在这里介绍的。

(2)然后呢要看看一些基本的数据类型。首先是数值类型,是分为了整型、浮点型还是像OJC这样的全是NSNumber,还要看看原始类型和非原始类型的区别。如果是数值的话,还要看看怎么获取随机数、怎么进行科学计算、怎么进行类型转换。接下来,还要看看空类型、布尔类型、可选类型和枚举类型是怎么定义的。

(3)接下来呢,看看字符串类型是怎么用的。字符串也是每个语言必备的,说难不难,说简单吧,那么多用法呢。基本上就要看看它是怎么创建增删、怎么索引遍历、怎么进行类型编码还有些像反向啊之类的基本操作。这里面也会有很多小的知识点,譬如Java里面字符串是不可变类型,譬如PHP里面你连接字符串不能用加号。

(4)然后呢,就要看看结构体是怎么定义的了,这个在Swift里面还是挺重要的,不过在有些语言里就没有。

(6)上面讲的几个数据类型都还好,现在开始就要了解高级复杂数据类型,也就是所谓的集合了。笔者把集合分为了序列类型与键值索引两大部分,譬如分别对应Java中的List和Map。这边也是要了解集合的创建增删、索引遍历、类型转换还有排序啊、查找啊等等高级用法。

(7)最后在这里还要学学不可变数据,这一点在函数式编程里面很流行,就好像Facebook提供的Immutable.js这个类库,还是很不错的。

最后,我们要来看看异常处理,包括怎么定义异常、怎么抛出异常,还有怎么用try-catch-finally这种形式来捕获和处理异常。Swift里面提供了try的用法,也是非常Sweet。

接下来我们继续学习函数的概念,唔,像Java这种完全的OO的语言,是没有函数的,里面只有方法,这也是它经常被诟病的地方,老说别的语言HelloWorld就一行,但是Java里面要写好多行。在这里笔者是把包括方法啊、函数都放在这边介绍。

(1)函数定义首先呢要来看看函数是怎么定义的,不同的语言里定义方式有区别有交集。像有什么func、function、define等等N多不同的关键字。要注意下这个函数是不是需要返回值的,像Java里面没有返回值就是void,而Swift里面可以写可以不写,还有很多弱类型语言里没有返回值。另外还要看看怎么定义函数变量,这个和闭包经常放在一起使用。

(2)参数调用看完了定义再看看参数定义和调用方式。参数的话需要了解下有没有默认参数和外部参数。笔者刚接触OJC的时候,它的外部参数确实大大提高了可读性,后来Swift继承并且发扬光大了。下面就要看看不定参数,譬如怎么在Java里面定义不定参数。最后,要看看引用传值和复制传值的区别,在有些语言里还存在有in-out这样的关键字。

(3)匿名函数/Lambda/闭包Java8里面引入了Lambda的用法,Lambda本身也是函数式编程的一枚标杆,是一种设计模式吧。这里要看看Lambda怎么用,像有的语言里是->,有的是=>,这个要区分下。还有就是看看闭包怎么定义,Swift里面提供了一个尾随闭包的调用方式,非常方便。

(4)生成器生成器、yield,最早笔者是在Python中接触到的,现在看ES里面也引入了这个概念。生成器一般和迭代器搭配在一起使用,不过也可以用来编写异步代码。

(5)装饰器装饰器感觉有点像AOP的概念,笔者也是在Python和Angular2中接触到的。

(6)函数柯里化和反柯里化在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。这个技术由ChristopherStrachey以逻辑学家哈斯凯尔·加里命名的,尽管它是MosesSchnfinkel和GottlobFrege发明的。这是来自维基百科的名词解释。顾名思义,柯里化其实本身是固定一个可以预期的参数,并返回一个特定的函数,处理批特定的需求。这增加了函数的适用性,但同时也降低了函数的适用范围。笔者在JavaScript与Scala会比较常用这个特性,这里以JavaScript为例说明柯里化的核心思想。

这里主要学习下模块化的概念,譬如Java、C#里面都会存在有命名空间,而Swift里是全局命名空间。还有像ES6里,这个export、import关键字到底是咋用的。

笔者还真没接触过Lisp、Haskell这样纯函数式语言,基本上都是OO的吧。那么类与对象也就是非常重要的一个部分。

(1)类的定义怎么定义类、怎么用public、private、protected或者类似的方法来划分可见域、怎么来划分属性。像Swift里面还有延迟加载啊、属性监控啊等等。怎么来定义方法(和上面的函数一起看)。

(2)对象怎么初始化对象,有的语言里有new,有的没有。怎么实践单例模式。还有就是this或者self这样类似的用法到底干啥的,像JavaScript里面,因为最早的时候没有OO的概念,各种自定义的对象,这时候this的用法也就非常的杂乱。还有就是对象属于哪个类型进行的判断,这一点和变量章节有所重复。

(3)继承怎么继承一个对象,还有就是继承之后的方法对于访问的父类中的属性啊、重载啊咋搞的,这个在Java面试题里面经常碰到。

(4)抽象类、接口/协议与委托怎么定义抽象类或者接口,在Swift和OJC中是协议的概念,还有就是譬如Java中的怎么定义一个注解。

(5)内部类这个在Java中用的比较多,又分为静态内部类、成员内部类、局部内部类以及匿名内部类。

(6)反射与类装载

这里介绍基本的输入输出的方法,包括控制台的输入输出、参数的处理、文件基本的读写,还有像Java里面繁多的什么字节流、字符流啊进行介绍。

学完了语法基础,那我们的笔记就要进入其他的具体的应用了,这里又分为Advanced、Storage、TestRelease、SysProc这几个部分。

在这里就要进行泛型编程、内存管理、序列化和反序列化、编程规范和代码风格以及由该语言实现的算法的学习。

(1)并发并发这部分要了解多线程的基本概念、线程通信的基本概念。基本的异步模式,像Promise、Callback啊等等,还有就是异步的数据流,也就是消息总线,还有就是响应式开发。

(2)同步与线程安全这边要了解锁的基本概念,譬如Java中的synchronized和Lock。然后还要了解一些内建的线程安全的数据结构。

此部分主要介绍用于开发对应程序的语言详情,基本上和上面的编程语言知识体系结构相一致。

这一部分基本上是整个客户端开发的最重要的地方,首先在UI.md中介绍界面呈现的基本原理,什么Screen、坐标系之类的。

本部分要介绍系统自带的基本组件,譬如Android里面的Activity、Fragment,iOS里面的UIView、UIViewController等等。此外,还需要介绍:

(1)Layout&Position此部分介绍基本的布局与定位的知识。包括基本的布局约束,譬如左边距、右边距、居中等等。然后是基本的定位方式,包括绝对布局、相对布局、弹性布局和线性布局等等。接下来是基本的布局管理器,Android开发的同学应该对这个概念不陌生。然后就是自动布局或者所谓的响应式布局,对应了iOS中的AutoLayout和Web里面的响应式开发。

(2)Container此部分主要介绍经常的作为容器的View,一个是页卡视图,就是常说的TabBar,譬如Android中的Tab、iOS中的TabbarController等等。还有导航视图,就是NavigationView,譬如iOS中的UINavigationController。最后是最常用的滚动视图,ScrollView,譬如Web中的Swiper等等。滚动视图还要解决几个问题:InfiniteScroll、上拉下拉刷新以及像ViewPager这样的基于页面的滑页式滚动。

(3)Router:页面路由譬如ui-router等等。

(1)Event&Gesture(事件与手势操作)这里对于用户常见的点击、拖拽等事件进行响应处理,包括了基本事件的绑定与监听、事件捕获传递与分发机制以及复杂手势的监听与识别,譬如多点触控、拖拽、滚动】缩放和摇晃等。

(3)Sensor本部分主要包括对于各种传感器,包括陀螺仪、重力传感器等的使用,譬如iOS的HealthKit就是放在这里的。

(4)Notification这里记录对于通知栏的操作,包括本地通知与远程推送的通知。

本部分主要对于基本的绘图与数据可视化进行了记录,包括但不限于:

(1)Graphics这里记录了基本的绘图、画笔的使用,包括了像颜色与取色、头像啊、表情啊之类的处理。

(2)Style&Theme样式与主题的处理,在Android中就会经常涉及到样式与主题的概念,还有什么夜间模式、日间模式之类的。

(3)Filter这里进行基本的滤镜与过滤的处理,注意,这里与图片部分的滤镜区别在于这里的滤镜是面向于某个View,而不仅仅是图片进行的。

(4)Chart这里记录各种图表,什么折线图、饼状图等等。

本部分主要记录动画以及常见的变换的内容,包括了动画构造库以及常见的动画集合。动画构造库的话又会分为帧动画与属性控制这两种。

(1)Dialog:对话框插件包括了模态对话框、弹出层与提示层、覆盖层、ActionSheet等等。

(4)TableGrid:网格与表单包括了基本的列表的使用、网格的使用以及卡片式界面的使用。譬如iOS的UITableView、Android的CardView、RecycleView都要放在这里。

(5)Gallery:画廊包括了图片的基本操作,譬如图片的加载、懒加载、缓存、动图的播放与控制、图片滤镜、图片标签、图片贴纸、图片裁剪与美化等等。还有图片相册的浏览、图片轮播、瀑布流方式图片展示、焦点图浏览等等。

(6)WebView包括了WebView的基本使用、本地交互以及Cordova的集成等等。

本部分主要讲解网络调用,包括了:

(1)网络管理譬如网络可达性判断、打开网络等等放在这。

(2)Socket

(3)HttpClient常见的网络客户端的使用,譬如Android中的okHttp、iOS中的AFNetwork等等的基本使用都放在这,基本的请求管理、并发请求等等。注意,这里还有一个叫HTTPStubs或者MockServer,是方便开发或者测试进行的本地伪装网络请求。

(4)Push本部分进行推送与长连接实现的内容。

(5)FileTransfer本部分进行基本的文件传输,上传和下载的记录。

(6)Serialization本部分进行常见的譬如JSON、FlatBuffer以及MsgPack序列化的研究。

(1)DataBase(数据库)像iOS的CoreData、SQLite的使用,以及最近比较火的Realm的使用。

(2)File(文件)这里记录了基本的文件浏览与访问,还有对于配置文件、资源文件的使用等等。

(3)Cache(缓存系统)

(1)组件之间的通信像Android中利用AIDL进行通信、利用ContentProvider进行通信等等。

(2)并发与异步

(3)服务

(4)RPC:远程服务调用

(1)Debug(调试与记录)包括日志、线程与Crash的监控等等

(2)Test包括了单元测试、界面测试以及第三方测试等等。

(3)Release包括了Android中的签名、iOS里面的提交到AppStore的流程还有类似于云测这样的第三方测试。

(4)Optimization优化

(5)Plugin&DynamicPatch(插件化与动态更新)这个在Android中用的比较多,像阿里的那个可以动态更新的工具。

(6)APM:应用状态追踪与评分

对于数据科学这部分,笔者自己也正在完善中,只能是大概如下:

分布式系统这部分,一方面要了解分布式系统的基本的知识原理,另一方面就是应用了,笔者主要分为了以下几个部分:

这部分是运维管理,也包含了DevOps的很多理念在这边,主要就是:

THE END
1.基于Java+SSM+JSP图书管理借阅系统(源码+LW+调试文档+讲解等)/图书馆/图书馆、借阅、管理系统、图书、书籍、阅读、图书管理员、读者、借阅证、还书、图书检索、借阅记录、图书分类、在馆人数、借阅排行榜、图书借阅规则、借阅期限、逾期罚款、图书预约、馆际互借、 项目相关介绍 null 1 2 系统测试 系统测试在程序设计的过程中起着举足轻重的作用。它是对程序质量的全面检阅。首先,功能https://blog.csdn.net/baronti/article/details/144335979
2.乌鲁木齐网站设计定制/重庆seo网站系统一、Java基础 1、Java基础教学视频 2、Java基础博客文章目录 3、Java基础书籍 二、关于JavaWeb基础 1、JavaWeb基础教程视频 2、关于JavaWeb博客文章 三、关于数据库 1、关系型数据库教学视频 2、非关系性数据库Redis视频 四、关于JDK新特性 五、关于并发编程 http://www.llbn.cn/news/134875.html
3.手把手实现Java图书管理系统(附源码)Javaweb项目:基于JavaWeb的图书管理系统(有源码) 源码如下 实现功能 数据库 运行环境 数据库设计 图书馆作为一种信息资源的集散地,图书和用户借阅资料繁多,包含很多的信息数据的管理,现今,有很多的图书馆都是初步开始使用,甚至尚未使用计算机进行信息管理。图书馆信息管理作为计算机应用的一个分支,有着手工管理无法比拟https://cloud.tencent.com/developer/article/2129040
4.图书商城后台语言:JavaJava项目实战-图书管理系统的的Java毕业设计(源码+演示视频+数据库).zip 【项目技术】开发语言:Java 数据库:mysql 【实现功能】管理员功能模块: 管理员登录进入基于web的图书管理系统后可以查看后台首页、我的面板、管理员管理、图书管理、借阅管理、会员管理等内容; 会员功能模块:会员登录进入基于web的图书管理系统可以https://www.iteye.com/resource/qq_33404596-11112401
5.IT实战营Java[代码详细教程+文档+PPT+源码等]javaweb高校宿舍管理系统|寝室管理[包运行成功+永久免费答疑辅导] 本项目含代码详细讲解视频,手把手带同学们敲代码从0到1完成项目详细教程学习地址:https://www.bilibili.com/video/BV1V7411M7Et《基于javaweb实现的高校宿舍管理系统》该项目含有源码、文档 2024/http://www.itszyclub.com/
6.java+mysql实现图书馆管理系统实战java这篇文章主要为大家详细介绍了java+mysql实现图书馆管理系统实战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了java+mysql实现图书馆管理系统的具体代码,供大家参考,具体内容如下 概述 基于Spring + Spring MVC + MyBatis的图书馆管理系统,使用Maven进行包管理。https://www.jb51.net/article/202376.htm
7.图书管理系统需求分析报告范文(精选10篇)采用JAVA和SQL开发,即使遇到困难,也能从丰富的参考书中找到解决方案。开发出的系统具有库存图书管理功能,能高效管理师生借阅信息,统计每年、每月、某天的图书借入借出情况,对财务信息进行统计、分析等。 6.2处理流程和数据流程 a.系统能对书籍信息进行管理。 https://www.ruiwen.com/baogao/6437442.html
8.Java,包括设计模式计算机网络操作系统数据库数据结构JavaWeb JSP Kotlin 17、加餐 18、活着 免责声明 简单说一下我为什么要花半个多月的时间来整理这份书单。主要是因为很多读者的知识体系是零散的,不成系统的,况且技术书籍这么庞杂。有了我这份清单之后,那些没有经验或者经验有限的初学者,在学习的时候思路瞬间就开阔了许多:少走弯路,利用有限的精力,更加高效地学习https://github.com/luseking/JavaBooks
9.Java知识分享网11-07【免费】SpringBoot+Vue(高校)学籍管理系统【Java毕业 11-04【免费】基于Python的Django+Vue3在线考试系统【Py 10-31【免费】SpringBoot+Vue学生成绩管理系统【Java毕业 10-28【免费】SpringBoot+Vue智慧校园(校园管理)系统【 10-25【免费】SpringBoot+Vue宠物商城网站系统【Java毕业推荐http://www.java1234.com/
10.2023届电子信息与计算机工程系优秀毕业设计作品毕业设计6.基于java的学生文档管理系统 2019级计算机科学与技术 杜燕华 新时代的来到,互联网对各行各业都产生着重大影响与改变,尤其互联网技术对人们的生活都带来了许多便捷,让人们的生活发生了巨大变化。 本学生文档管理系统采用了现代化的技术栈,其中后端使用SpringBoot框架进行开发,前端采用了流行的VUE3框架以及elementUIhttps://www.cdutetc.cn/c/4c068411-751b-4f12-b725-f69e34c010a3.html
11.专业介绍信管专业管理基础、会计学、企业资源规划、SAP后勤管理、SAP财务管理、信息资源管理、C语言程序设计、数据结构、管理信息系统、信息系统分析与设计、Java程序设计、数据库原理与应用、Java Web应用开发技术、应用统计学、信息管理运筹学、Python程序设计、大数据分析、机器学习、大数据治理与安全、企业运营模拟实训、ERP业财https://sub2.dlust.edu.cn/kjzs/channel-24.html
12.Java/SSM/LayUIJavaEE课程设计(基于Layui+SSM的图书管理系统本文为JavaEE课程的课程设计,如需原文件及项目代码请后台联系作者或qq3416252112,也可在作者主页资源中下载,仅供学习交流使用! 文章目录 JavaEE课程设计(基于Layui+SSM的图书管理系统) 一、项目介绍 二、技术栈 三、项目结构 (一)数据库 1、管理员表(admin) https://blog.51cto.com/u_14210396/6246333
13.java大型网站系统与JAVA中间件实践.pdf 不限速下载? 百度云下载链接 百度云提取码:hdbx 分布式Java应用基础与实践.pdf 不限速下载? 百度云下载链接 百度云提取码:dbeu 疯狂Java讲义.pdf nbsp; 百度云下载链接 百度云提取码:hejg 高性能响应式Web开发实战.pdf 不限速下载? 百度云下载链接 百度云提取码:bafb 构建高https://gitee.com/ShaoxiongDu/java-books