自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

李新杰的CSDN

知识改变命运 教育改变中国 代码改变世界

  • 博客(42)
  • 资源 (6)
  • 收藏
  • 关注

原创 线程池开门营业招聘开发人员的一天

线程池一大早就来到了公司,进到了属于自己的“经理”办公室,时间才刚刚8点,虽然他不用打卡。不觉中时间来到了8:40,公司的“中层管理”人员们陆续到来,打卡后坐到各自工位,稍作调整,准备参加公司的“晨会”。趁还有点时间,就给大家介绍下出席晨会的人员吧。线程池就是Java里的大名鼎鼎的ThreadPoolExecutor,是经理。六个中层管理人员分别是:intcorePoolSize、int...

2019-12-02 10:55:43 200

原创 【玩转SpringBoot】异步任务执行与其线程池配置

同步代码写起来简单,但就是怕遇到耗时操作,会影响效率和吞吐量。此时异步代码才是王者,但涉及多线程和线程池,以及异步结果的获取,写起来颇为麻烦。不过在遇到SpringBoot异步任务时,这个问题就不存在了。因为Spring家族是最替用户考虑的。结果就是,像同步一样简单,像异步一样强大。众所熟悉的同步代码先准备一些代码,为了模拟耗时操作,在其中加入线程睡眠语句。同时打印出运行这些代码的线程信息。如下图...

2019-11-20 07:05:00 1492

原创 【玩转SpringBoot】通过事件机制参与SpringBoot应用的启动过程

生命周期和事件监听一个应用的启动过程和关闭过程是归属到“生命周期”这个概念的范畴。典型的设计是在启动和关闭过程中会触发一系列的“事件”,我们只要监听这些事件,就能参与到这...

2019-10-30 07:05:00 701

原创 【玩转SpringBoot】SpringBoot应用的启动过程一览表

SpringBoot应用的启动方式很简单,就一行代码,如下图01:其实这行代码背后主要执行两个方法,一个是构造方法,一个是run方法。构造方法主要内容就是收集一些数据,和...

2019-10-28 07:05:00 384

原创 品Spring:负责bean定义注册的两个“排头兵”

别看Spring现在玩的这么花,其实它的“筹码”就两个,“容器”和“bean定义”。只有先把bean定义注册到容器里,后续的一切可能才有可能成为可能。所以在进阶的路上如果要想走的顺畅些,彻底搞清楚bean定义注册的所有细节至关重要。毕竟这是万里长征的第一步。有句话怎么说来着,“勿在浮沙筑高台”。Spring步入注解和Java配置的时代也有些时日了。而且也旗帜鲜明的表达了bean的注册...

2019-10-18 16:24:43 375

原创 品Spring:SpringBoot和Spring到底有没有本质的不同?

现在的Spring相关开发都是基于SpringBoot的。最后在打包时可以把所有依赖的jar包都打进去,构成一个独立的可执行的jar包。如下图:使用java -jar命令就可以运行这个独立的jar包。如下图:这个jar包的执行入口就是一个main函数,典型的格式如下:@SpringBootApplicationpublicclassTasteSp...

2019-10-18 16:22:51 233 1

原创 品Spring:能工巧匠们对注解的“加持”

问题的描述与方案的提出在Spring从XML转向注解时,为了自身的开发方便,对注解含义进行了扩充(具体参考本号上一篇文章)。这个扩充直接导致了一个问题,就是需要从注解往元注解以及元元注解(即沿着从下向上的方向)里传递数据。为了更好的描述这个问题,请再看个示例:@interfaceA{Stringa()default"";}@A@interface...

2019-10-18 16:19:15 222

原创 品Spring:注解终于“成功上位”

历史还是抛弃了XML,当它逐渐尝到注解的甜头之后。尤其是在Spring帝国,到处充满着注解的气息。注解从一个提供附属信息的“门客”,蜕变为颇具中流砥柱的“君侯”。注解成功登上了帝国的舞台,定会像XML一样留下浓墨重彩的一笔。重新认识一下注解注解其实就是注释、批注的意思。就像看书时在旁边记笔记一样。如果把书上印刷的内容看作是原始信息,那写上的笔记则是新添加的额外信息,且这个额外信息并...

2019-10-18 16:17:53 199

原创 品Spring:实现bean定义时采用的“先进生产力”

前景回顾当我们把写好的业务代码交给Spring之后,Spring都会做些什么呢?仔细想象一下,再稍微抽象一下,Spring所做的几乎全部都是:“bean的实例化,bean的依赖装配,bean的初始化,bean的方法调用,bean的销毁回收”。那问题来了,Spring为什么能够准确无误的完成这波对bean的操作呢?答案很简单,就是:“Spring掌握了有关bean的足够多的信息”。这就是...

2019-10-18 16:12:17 172

原创 品Spring:bean定义上梁山

技术不枯燥,先来点闲聊先说点好事高兴一下。前段时间看新闻说,我国正式的空间站建设已在进行当中。下半年,长征五号B运载火箭将在海南文昌航天发射场择机将空间站核心舱发射升空。预计用2到3年将空间站建好。虽然到时你们不让我上去,不过我也为这件事出不了什么力,算扯平了。哈哈,但是我还是会衷心的祝福你。长征五号火箭首次采用5米大直径的箭体结构,总加注量达到780吨,起飞时共有10台发动机产...

2019-10-18 16:10:52 352

原创 品Spring:帝国的基石

序生活是一杯酒,有时需要麻醉自己,才能够暂时忘却痛苦与不快。生活是一杯茶,有时需要细细品味,才发现苦涩背后也会有甘甜。Spring是一杯酒,一眼望不到边的官方文档,着实让人难以下咽。Spring是一杯茶,在无边的源码中畅游之后,发现色相味道俱全。高考状元是六月份的网红,Spring帝国是Java界的明星。状元有自己的“武功秘籍”,Spring有自己的“帝国基石”。请随...

2019-10-18 10:18:57 293

原创 【玩转SpringBoot】让错误处理重新由web服务器接管

其实web服务器是会处理错误的在web.xml还是随处可见的年代时(确实有点老黄历了),下面的这些配置应该都不陌生。根据错误代码处理错误,如下图01:根据异常类型处理错误...

2019-10-17 07:05:00 192

原创 【玩转SpringBoot】翻身做主人,一统web服务器

寄人篱下的日子一直以来受传统影响,我们的web工程总是打成war包,然后放入tomcat的webapps目录下面。如下图01:当tomcat启动时,会去解压war包,然后...

2019-10-15 07:05:00 180

原创 【玩转SpringBoot】看似复杂的Environment其实很简单

喜欢写代码,讨厌配环境我相信这十个字的小标题代表了大多数码农的心声。十年前读大学时,学校开设了C语言还有C++。但是学习这两种语言,对于新手来说非常没有成就感。于是我就在...

2019-10-11 07:05:00 1214

原创 【设计模式】牛掰格拉斯的代理模式

代理的本质无论任何时候,只要谈到设计模式,大脑中一定要蹦出这四个字“活学活用”。要想对某个事物做到活学活用,必须要对它足够了解,甚至要剖析到本质才行。总是会有些人说,我干...

2019-10-09 07:05:00 205

原创 【玩转SpringBoot】给自动配置来个整体大揭秘

上一篇文章中提到的条件注解,只是自动配置整体解决方案中的一个环节而已,可以说是管中窥豹。本文就逐步擦除迷雾,让整体浮现出来,这样就会有一个宏观的认识。除了写代码之外,还能...

2019-09-29 07:05:00 189

原创 【玩转SpringBoot】用好条件相关注解,开启自动配置之门

自动配置隐含两层含义,要搞清楚上帝让程序员的发量减少,是为了让他变得更聪明,如果有一天聪明到了极点,那就是绝顶聪明。据说在大脑高速运转下,这样更有利于散热,不至于核心温度...

2019-09-27 09:50:00 337

原创 【玩转SpringBoot】配置文件yml的正确打开姿势

序言在很久以前,Spring的配置文件是基于XML的。它的名字就是applicationContext.xml,没错,就只有这一个xml文件。它里面配置了所有的东西。但是...

2019-09-26 07:05:00 6941

原创 品Spring:关于@Scheduled定时任务的思考与探索,结果尴尬了

非Spring风格的代码与Spring的结合现在的开发都是基于Spring的,所有的依赖都有Spring管理,这没有问题。但是要突然写一些非Spring风格的代码时,可能会很不习惯,如果还要和Spring风格的代码结合起来的话,就会稍显麻烦。因为非Spring风格的代码不由Spring管理,所以Spring不会给我们注入依赖,相反,我们要自己去Spring中拿取依赖。...

2019-09-24 07:05:00 258

原创 【Java】反射调用与面向对象结合使用产生的惊艳

(希望文章像图片一样惊艳)缘起我在看Spring的源码时,发现了一个隐藏的问题,就是父类方法(Method)在子类实例上的反射(Reflect)调用。初次看到,感觉有些奇...

2019-09-23 07:05:00 88

原创 品Spring:真没想到,三十步才能完成一个bean实例的创建

在容器启动快完成时,会把所有的单例bean进行实例化,也可以叫做预先实例化。这样做的好处之一是,可以及早地发现问题,及早的抛出异常,及早地解决掉。本文就来看下整个的实例化过程。其实还是比较繁琐的。一、从容器中找出所有的bean定义名称因为不知道谁是单例bean,所以只能先全部找出来。如下图01:二、循环遍历所有的bean名称,检查是否符合条件首先要合并bean定...

2019-09-19 11:45:00 181

原创 品Spring:对@Autowired和@Value注解的处理方法

在Spring中能够完成依赖注入的注解有JavaSE提供的@Resource注解,就是上一篇文章介绍的。还有JavaEE提供的@javax.inject.Inject注解,这个用的很少,因为一般都不会去引用JavaEE的jar包。编程新说注:JavaEE早已经被Oracle抛弃了。JavaEE这个名字已经成为历史。还有两个就是@Value和@Autowired注解,这可是Spring自己...

2019-09-18 07:05:00 736

原创 品Spring:对@Resource注解的处理方法

@Resource是Java的注解,表示一个资源,它具有双向的含义,一个是从外部获取一个资源,一个是向外部提供一个资源。这其实就对应于Spring的注入和注册。当它用在字段和方法上时,表示前者。当它用在类上时表示后者。Spring只提供了对前者的支持。该注解本身表示的是资源,资源的含义是很宽泛的。由于绝大部分情况下在使用Spring的时候,它的容器里都是普通的bean,所以这个注解就作为...

2019-09-17 07:05:00 1027

原创 品Spring:对@PostConstruct和@PreDestroy注解的处理方法

在bean的实例化过程中,也会用到一系列的相关注解。如@PostConstruct和@PreDestroy用来标记初始化和销毁方法。平常更多的是侧重于应用,很少会有人去了解它背后发生的事情。今天就来看下它们的源码,这样它们对你来说就不再是黑盒子了,而且学习源码对每个技术人来说都是必经之路。人们对事物的认知以及自己的做法,往往分为三个阶段:1)最初看一个事物,非常复杂,简直没有一点头...

2019-09-12 07:05:00 339

原创 品Spring:详细解说bean后处理器

一个小小的里程碑首先感谢能看到本文的朋友,感谢你的一路陪伴。如果每篇都认真看的话,会发现本系列以bean定义作为切入点,先是详细解说了什么是bean定义,接着又强调了bean定义为什么如此重要。然后又讲了获取bean定义详细信息的方法,接着又讲了bean定义注册的若干种方式,然后是bean定义注册方式的实现细节。最后又以SpringBoot应用为例,从容器启动前、启动后分两个阶段解说...

2019-09-11 08:30:17 184

原创 品Spring:bean工厂后处理器的调用规则

上一篇文章介绍了对@Configuration类的处理逻辑,这些逻辑都写在ConfigurationClassPostProcessor类中。这个类不仅是一个“bean工厂后处理器”,还是一个“bean定义注册后处理器”。这其实是两个接口,它们都是来操作bean定义。所以非常重要。换句话说,能操作bean定义的,也只有这两个接口,你说重要不重要。查看下类型信息,在整个Spring...

2019-09-09 07:05:00 183

原创 品Spring:注解之王@Configuration和它的一众“小弟们”

其实对Spring的了解达到一定程度后,你就会发现,无论是使用Spring框架开发的应用,还是Spring框架本身的开发都是围绕着注解构建起来的。空口无凭,那就说个最普通的例子吧。在Spring中要启用一项XXX功能,标准做法就是用@EnableXXX这种“启用”类型的注解。那么这种类型的注解一般都做了什么呢?分析一下吧。看过本号文章的人都知道,Spring的核心就是bean定义和b...

2019-09-04 07:05:00 142

原创 品Spring:SpringBoot发起bean定义注册的“二次攻坚战”

上一篇文章整体非常轻松,因为在容器启动前,只注册了一个bean定义,就是SpringBoot的主类。OK,今天接着从容器的启动入手,找出剩余所有的bean定义的注册过程。具体细节肯定会颇为复杂,同样,大家只需关注都干了什么,不用考虑如何干的。来宏观的看下容器的启动过程,即refresh方法,如下图01:只捡重要的来说,就是四大步:第一,准备好bean工厂(BeanFac...

2019-09-02 07:05:00 233

原创 品Spring:SpringBoot轻松取胜bean定义注册的“第一阶段”

上一篇文章强调了bean定义注册占Spring应用的半壁江山。而且详细介绍了两个重量级的注册bean定义的类。今天就以SpringBoot为例,来看看整个SpringBoot应用的bean定义是如何注册进容器的。先来看看经典的启动入口,如下图01:可以看到调用的是run方法,并把主类(main或primary)作为第一个参数出入。接下来要做的事情,就是顺藤摸瓜,看看到底发...

2019-08-28 07:05:00 148

原创 小学生都能看懂的表达式计算(图解)

基础知识 会加减乘除(纳尼,这个还有不会的吗)会双向链表和树(纳尼,还个还要会吗) 温故知新 表达式 2 + 3 - 4 + 5,人类计算的过程是这样的,如下图:因为加减操作符优先级相同,所以从左到右依次运算。 可计算机不会这样啊,必须先转化为一棵树(AST,抽象语法树,这是编译原理中的概念)才行,如下图:操作符上提变为根节点,左右操作数下降变为...

2019-01-04 09:46:11 598

原创 Hbase给初学者的“下马威”

自从成为架构师()之后,李大胖的学习动力似乎少了一些,尤其是今年(当然也有一些客观因素)。临近岁末,内心着实有些惭愧,决定学习一把大数据。跟随一下业界前沿(其实已经不是前沿了),梦想着有一天能够拥有拥有梦想的权力。操练起来启动装有CentOS的虚拟机(IP是172.18.232.181),按照官方文档内容选择hadoop-2.8.5和hbase-2.0.2,还有zookeeper-3.4.1...

2019-01-02 10:14:32 2266 3

原创 五分钟轻松了解Hbase面向列的存储

说明:从严格的列式存储的定义来看,Hbase并不属于列式存储,有人称它为面向列的存储,请各位看官注意这一点。 行式存储 传统的数据库是关系型的,且是按行来存储的。如下图:其中只有张三把一行数据填满了,李四王五赵六的行都没有填满。因为这里的行结构是固定的,每一行都一样,即使你不用,也必须空到那里,而不能没有。来一张形象的图:不管你坐或不坐,座位都在那里,不离不弃。...

2018-12-28 10:36:06 454

原创 [Java] 线程之并发与同步

使用多线程的目的通常是为了提高并发性,这就不可避免的出现了线程同步的问题。在研究如何解决线程同步问题之前,必须先弄清楚什么是线程同步,为什么需要线程同步。很好的明白事物的原因,才能更好的解决问题。我们先来讲清楚这些概念和问题。并发并发是指两个或多个事物在同一时间间隔内发生。简单的理解就是在同一段时间内发生了多个事情。这里需要着重指出的是一个时间段,而不是一个时刻。比如一个处理器同一时刻只能

2012-11-25 11:25:24 4716 1

原创 [Java] 锁机制之synchronized

在处理多线程同步问题的时候,方法之一就是使用锁机制来同步多个线程在同一时刻对同一资源访问。在这里需要强调的是这两个“同一”的概念,第一是在同一时刻,如果每个线程都在不同的时刻进行访问,并且访问的时长也不重叠,就不需要进行同步;第二是同一资源,如果每个线程都访问不同的资源,那就更不需要同步了。同一时刻和我们日常生活中的时刻可能不太一样,不过可以这样去帮助理解。同一资源的界定要根据实际情况来定,在处理

2012-11-08 16:43:58 635

原创 [Java] 线程之wait和notify

wait方法和notify方法来源于Object类,对wait方法的调用必须先获得监视器,然后在监视器上调用wait方法,意思是使当前线程在监视器上等待(即进入阻塞状态),直到被其它线程在同一个监视器上通知为止,然后解除阻塞状态,重新被安排调度执行,否则将一直阻塞。wait方法还有重载方法,即带有超时参数,表示该线程最大的等待时间,过了这个时间后,即便是没有其他线的通知,该线程也会自动解除阻塞状态

2012-11-04 15:15:12 309

原创 [Java] 线程之join

线程里面有一个join方法,意思是等待该线程的消亡,即等待该线程被执行完。它还有带参数的重载方法,参数是等待的最长时间。一个线程自己对自己调用这个方法显然没什么意思,就表示自己再等一定的时间消亡,这没什么实际意义。一般是对另外一个线程调用这个方法,表示等待一段时间或直到另外一个线程执行完毕这个线程才继续往下执行。这说明了什么,很显然是在调整线程间的执行顺序,这也是join方法的一个重要的使用场景。

2012-10-31 09:56:21 314

原创 [Java] 线程之sleep

Java的线程有一个sleep方法,它的目的是让当前正在执行的线程临时的放弃执行,进行休眠一定的时间,过了这个时间后又重新恢复执行。线程在休眠期间它所持有的监视器锁是不会被释放的。这个方法可以普通的调用,也可以在获得锁的情况下调用,只是在休眠期间一直占有锁。下面是普通调用的实例代码:Thread t3 = new Thread(new Runnable(){ public

2012-10-30 13:54:34 342

原创 [Java] 线程中断(三)

前两篇文章分别说明了线程应该由它自己来处理中断和运行中的线程如何自己处理中断,本文主要描述阻塞中的线程如何自己处理中断。线程阻塞其实就是在执行过程中,为了某些条件或基于别的什么原因,自愿的或被迫的暂定一定的时间,然后条件满足后再继续执行。查阅一下线程类,发现使线程阻塞的方法就这么几个:最常用的是sleep,让线程休眠一定的时间,时间过后再继续执行;其次是wait,让线程在一定时间内等待,直到被通知

2012-10-27 14:34:50 481

原创 [Java] 线程中断(二)

上一篇文章说明了中断线程最好的做法是让被中断的线程自己处理具体的中断过程和细节。线程的拥有者只需调用被中断线程的interrupt()方法,设置它的状态为中断,然后就不在管它。那么线程是如何中断自己的呢?这篇文章来进行大概的讨论。        其实,如果线程的目的和作用不同,那么线程的执行过程可能完全不一样。我们在使用多线程的时候,首先需要考虑这个线程在运行的过程中需不需要被中断或者会不

2012-10-24 14:09:21 286

原创 [Java] 线程中断(一)

正常情况下,一个线程完成它所有的任务后,就会自动退出。线程所持有的资源以及线程本身都会被释放掉。但是,在有些情况下,比如某些条件发生了改变或我们已经获得了想要的结果,这时虽然线程还没有执行完毕,但是我们已经不需要它在继续执行了,这时候就可以中断正在执行的线程。       想象一下,要使一个正在运行的线程中断、不再继续运行,我们该怎么做呢?一种方法是我们可以直接把这个线程杀掉,就像在任务管

2012-10-23 17:39:34 324

五子棋算法

欢迎需要的朋友下载,提出宝贵建议......

2007-12-19

语法分析器

用C++实现的递归下降语法分析器<br>欢迎需要的朋友下载

2007-12-14

汇编成绩学号排名次

汇编实现成绩排序,并显示排序后的学号+成绩<br>欢迎需要的朋友下载。。。

2007-12-14

汇编求阶乘

采用汇编实现的调用递归子程序计算N的阶乘并显示结果<br>欢迎需要的朋友下载

2007-12-14

Effective.STL.pdf

English Edition STL Both Study English And STL<br>Kill Two Bird With One Stone !

2007-12-12

STL_tutorial_reference

这是英文版的STL,感觉还不错,跟大家分享一下

2007-12-12

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除