首页
学习
活动
专区
工具
TVP
发布

趣谈编程

专栏作者
94
文章
114761
阅读量
51
订阅数
一篇文章讲透MySQL为什么要用B+树实现索引
索引这个词,相信大多数人已经相当熟悉了,很多人都知道MySQL的索引主要以B+树为主,但是要问到为什么用B+树,恐怕很少有人能把前因后果讲述的很完整。本文就来从头到尾介绍下数据库的索引。
用户1260737
2019-11-24
15.4K1
Spring,你可能只了解冰山一角
生活是一杯酒,有时需要麻醉自己,才能够暂时忘却痛苦与不快。 生活是一杯茶,有时需要细细品味,才发现苦涩背后也会有甘甜。 Spring是一杯酒,一眼望不到边的官方文档,着实让人难以下咽。 Spring是一杯茶,在无边的源码中畅游之后,发现色相味道俱全。 高考状元是六月份的网红,Spring帝国是Java界的明星。 状元有自己的“武功秘籍”,Spring有自己的“帝国基石”。 请随本文一起,品Spring,寻找帝国的基石。 帝国的基石 无论是大到一个国家,或是小到一个个人,都有自己赖以存在的基石。这个基石就是核心支柱,就像经济基础支撑着上层建筑。 以BAT来说,百度的搜索,阿里的电商,腾讯的社交。可以说这是他们的立司之本,如果想在这些方面和他们PK,几乎没有胜算的可能。 Spring绝对是Java开发领域中一颗闪耀的明星,它的巨大光芒甚至一直在引领着Java的发展方向。 现在说它已经发展为一个帝国,应该不会有人站出来反对吧。嗯,站出来也没关系,本人不接受反对。哈哈。 那么有一个问题,请大家思考下,Spring帝国的基石是什么? 用过或了解Spring的人肯定都会说是IoC啦,AOP啦,声明式事务啦等等。只能说这些回答浮于表面,明显不走心啊。 好了,我来公布答案吧,这个帝国的基石,其实就是Bean。肯定会有人问,这个bean是什么东西啊,那就去看它的定义吧。对,就是Spring中的bean定义。 在Spring中,bean定义其实就是一个接口,即BeanDefinition。我在上一篇“毕业十年”的文章中说过,我们定义的类或接口其实都是对一种数据构成的描述,所以可以直接把类或接口看作是一种数据结构。 那么bean定义接口,就是一种数据结构,它记录了一个bean的全部信息,后期Spring对这个bean的所有操作都是建立在这些信息之上的。 如果对Spring不是很熟悉的朋友,听到“bean的全部信息”这句话会有点懵。不要担心,照例拿生活中我们熟悉的事物去做类比,争取让所有人都能明白。 在医疗行业,每个患者都会有一个病历,上面记录了患者家族病史,患者个人病史,都做过哪些检查以及检查结果,都做过哪些治疗以及恢复情况。还有大夫每次对患者的病情诊断与分析。 这些信息肯定是记录的越全面越好,后续的治疗方案都是依赖这些信息而制定的。Spring中bean的信息就对等于这里患者的病历信息。 在公安系统,每个嫌疑人也会有一个档案,上面记录了他的口供,作案信息或一些其它证据,同样这些信息搜集的越全面越好,后期法官的宣判与量刑也都依赖于它。 那么在这里,记录案件信息的档案,就可以对等于Spring中bean的信息。 相信通过这两个示例,你已经完全明白了这个bean信息的作用和地位。虽然到目前为止,你可能还真不知道它里面到底存储的是什么信息。但这不要紧,只要记住它非常重要就可以了。 趁着这个机会,再小小拓展一下: 这里的病历信息和档案信息里面记录的都是一些数据,所以可以认为它们对应于程序中的数据结构。 医生的治疗方案和法官的宣判,其实都是依赖这些数据做出的决定,因此可以认为它们对应于程序中的算法。 可见,数据结构决定着算法,或者说,算法是基于数据结构而设计的。 因此,可以说数据结构的重要性要大于算法。良好的数据结构能简化算法,不好的数据结构只能使算法变得更复杂。 跟着变化走,把它当朋友 在上篇文章中提到过,唯一不变的就是变化,所以随着时间的推移,只需不断往这个数据结构中补充新的bean信息,Spring再利用这些补充信息去定义新的操作,以适应发展的需要。 就是这样,Spring一步一步成长为一个浩浩荡荡的帝国。就像我在上一遍文章中说的,类或接口这样的数据结构一定要进行精心设计,这样代码写起来会简单些,而且后期改起来也会容易些。 一个非常明显的例子,一开始都是基于XML配置文件的,现在都是基于注解或Java配置的,可以说Spring完成了一次华丽的转身,而且非常完美丝滑,没有一点拖泥带水。 其实就是在bean定义数据结构中加入了注解和Java配置相关的信息,Spring利用这些信息去重新实现一遍,并且和基于XML的实现并存,因此既可以用XML也可以用注解。 就像我在上一篇文章中说的,一定要合理抽象,从宏观整体把握,良好定义整体架构或结构,至于一些具体的局部实现细节,可以根据实际情况来定。 因为局部实现涉及范围一般较小,后期换用新的方式来个重新实现也会相对容易一些。从XML到注解基本就是这样子的。 其实说实话,上一篇文章就是从这一篇分离出去的,专门为本篇文章埋伏笔、做铺垫用的。哈哈。 滔滔不绝的说了这么多,快来看看庐山真面目吧。 最讨厌的就是源码 有句话是怎么说的呢,“要不是为了生活,谁愿意把自己弄得满身才华”。哈哈,看源码时多想想这句话。 不想看的,直接跳过吧。 Be
用户1260737
2019-09-08
3940
你真的知道链表和数组的区别吗?
对一名程序猿来讲,使用哪种语言来开发程序不是最重要的,数据结构和算法才是核心,是程序猿的内功,最终决定你的技术上限。如果你想拔高自己的水平,提高核心竞争力,数据结构和算法是必须要学的,今天就带大家一起来学习链表的概念,并用 Java 语言实现一个链表的结构。
用户1260737
2019-06-11
2.5K0
跟Google大佬一起学数据结构与算法
加我好友的人估计已经知道,我在朋友圈分享过两次极客时间的课程,一次是趣谈网络,看完后觉得不错,这次有位Google大佬给大家出了一个系列的数据结构与算法的图文音频教程。
用户1260737
2018-10-25
5660
快速排序(基础版)
面试官:聊聊快速排序 快速排序,顾名思义,是一种排序速度非常快的排序方法,该算法之所以非常快,是因为高度优化的内部循环,该算法在实际应用中非常广泛。今天我们聊聊快速排序 排序思想 师傅,我听说山下的李
用户1260737
2018-06-13
7890
希尔排序
希尔排序(ShellSort)是以它的发明者Donald Shell名字命名的,希尔排序是插入排序的改进版,实现简单,对于中等规模数据的性能表现还不错 排序思想 前情回顾:直接插入排序(对插入排序不熟
用户1260737
2018-06-13
3770
神速Hash
面试官: 聊聊HashMap的底层 理解HashMap底层,首先应该理解Hash函数,今天我们聊聊Hash函数出现冲突的解决办法(此故事为连载形式,若没看上篇,可点击此处神速Hash阅读) 链地址法 次日清晨,大臣们按时上朝,接着讨论昨日的话题 “昨日Hash函数的选择我们已经有了具体的方案了,那就只剩下冲突的解决问题了”,王大臣率先发话 “要解决冲突其实也不难,既然会有多个元素被Hash到同一个位置,而这个位置只能存储一个元素,那么我让这个位置可以存储多个元素不就可以了吗?”,何大臣说道 “哦,怎么
用户1260737
2018-01-31
7220
神速Hash
面试官: 聊聊HashMap的底层实现 理解HashMap底层,首先应该理解Hash函数,今天我们聊聊什么是Hash函数以及Hash函数的设计 查找速度的困扰 算法国自建立起,就以快速为至高的荣誉,O(n^2) 时间复杂度的设计常常被人嫌弃,一般都想着弄个O(logn) 算法国最近遇到了一个问题,就是随着处理数据的逐步增大,查找的时间越来越大了 之前用的数组和链表,最后改成二叉查找树,可是这些都需要和其中的元素进行比较,比较的次数越多,查询的速度就越慢 国王想着能不能有一种办法,查找某个元素的时候,不需要
用户1260737
2018-01-31
7700
没有更多了
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档