Java中的注解是如何发挥作用的
注解是干什么的注解本身不提供作用,注解只能是被看作元数据,它不包含任何业务逻辑。注解更像是一个标签,一个声明,表面被注释的这个地方,将具有某种特定的逻辑。
注解常见的种类常见的注解有三大类:JDK的,自定义的,第三方的(比如框架)
注解三板斧定义、使用、读取
定义:包括名字,能用到哪些地方,有效期,是否可以被继承
使用:定义好之后在允许的地方使用标注即可
光有前两步,没什么用,如最熟悉的@Override注解,为什么能验证重写是否有效,怎么不是验证重载?spring的@Autowired为什么是注入作用,而不是输出一句话?显然,他们在程序中做了实现,使得其注解具有各自的作用,也具有了意义,而赋予灵魂的一步就是读取
读取:让注解发挥作用,给注解注入灵魂
注解前置知识首先是元注解,Java中提供了四个
@Documented | @Retention | @Target | @Inherited
分别解释下
@Documented
代表着此注解会被javadoc工具提取成文档
@Retention:
代表该注解的有效期
SOURCE 表示编译期,如@Override,只做编译时的提 ...
springboot启动过程
这个图做的很好:SpringBoot启动结构图
springboot启动分为构造器部分和run部分
构造器123456789101112131415161718public SpringApplication(ResourceLoader resourceLoader, Class<?>... primarySources) { //初始化资源加载器 this.resourceLoader = resourceLoader; //断言资源加载器不为null,否则报错 Assert.notNull(primarySources, "PrimarySources must not be null"); //初始化资源 this.primarySources = new LinkedHashSet<>(Arrays.asList(primarySources)); //推断当前的web应用类型(非WEB / SERVLET / REACTIVE) this.webApplicationType = ...
springboot自动配置原理
在使用springboot进行开发的时候,只需要在application.properties中进行参数配置,不配置也会有一个默认值,tomcat,映射关系都不用配置了,那么spring是如何实现自动配置的呢?
springboot如何实现自动装配自动配置的。这都要归功于springboot强大的注解功能,也是springboot的一大特点
举例:在springboot主运行程序中,下面是常见的springboot启动类
123456@SpringBootApplicationpublic class SpringbootSrcApplication { public static void main(String[] args) { SpringApplication.run(SpringbootSrcApplication.class, args); }}
看起来平平无奇,但为什么一运行main方法就会启动容器?
spring会在启动的时候new自己—>new SpringApplication(primar ...
我的Butterfly美化
前言关于我博客的整个搭建过程可以参照我知乎这篇文章
有涉及到修改源码的部分,Butterfly 版本3.8.3
优先考虑顺序:插件 > 自定义css > 魔改(改源码)
背景板该调整不涉及源码修改。原先的主题分为了上中下三层结构,我觉得过于花了,统一改为了一种背景,文章栏与侧边栏透明思路也简单,只留背景,其余部分去色,替换为背景图的方式,背景0.9透明,主题色做出了调整,可以在主题文件中的theme_color中修改
效果预览(旧)
配置
在themes/source/css下创建自己的css文件加入以下代码,前提是将_config.butterfly文件中的background不能为空且与index_img一致首先是调整背景板为一体(但在暗黑模式下,页脚还会出现阴影快)12345678910111213/* 页脚去色 */#footer { background: none; ...
常用算法归类
二分查找(非递归)
分治算法
动态规划
KMP算法
贪心算法
回溯算法
以下只给出思路与关键方法,算法的源代码放在了git中,需要的自取
leidl97/algorithm-src
二分查找(非递归)非递归的话肯定使用while了
难点
注意边界值条件,只有当左边的值大于右边才跳出循环
当目标值小于mid时,应该让right = mid + 1,需要加1,
同样的,相反情况也需要 -1 。
方法实现
12345678910111213141516171819//非递归实现private static void search3(int[] a, int act) { int left = 0; int right = a.length-1; while (left <= right) { int mid = (left + right) / 2; if (a[mid] == act) { //找到该值 System.out.println("找到该值 ...
报考软件设计师的经历
本人科班出身,工作后公司鼓励考,21年3月份报名,5月底考试,用了一个月时间复习,7月查成绩飘过,之前表示如果过了就做个总结帖,现在兑现诺言
快拿我的速效救心丸来
含金量?IT这行认证满天飞,但基本都没什么实际用处,大多都属于花钱买证的性质,像这种的含金量还用到处网上搜?高不高的自己心里没点数吗。软考这个证虽然也不怎么样,但别的不说一是国家认证,二是实打实考的。多的也不说了,既然决心要考一个了,那就认真备考吧,进入做功课环节,一贴一条龙服务,建议收藏
引用信息摘取官网,可以直接空降查看
官网地址中国计算机技术职业资格网www.ruankao.org.cn![图标](https://pic1.zhimg.com/v2-9351dcc1b8fd87db73bb8dc3912d56d0_180x120.jpg)
报考要求
报考任何级别不需要学历、资历条件,只要达到相应的专业技术水平就可以报考相应的级别
翻译一下就是没什么限制,想考就能考
报考条件
考试要求 (1)掌握数据表示、算术和逻辑运算; (2)掌握相关的应用数学、离散数学的基础知识; (3)掌握计算机体系结构以及各主要部件的性能和 ...
原型模式
设计模式源码git地址:design-pattern-src: 设计模式源码 (gitee.com)
什么是原型模式
使用场景
常见应用场景
什么是浅拷贝?
什么是深拷贝?
两种拷贝方式怎么实现?
什么是原型模式原型模式就是去克隆对象,又涉及到创建对象了,为创建者模式
使用场景1、类初始化需要消化非常多的资源,这个资源包括数据、硬件资源等,原型可以简化创建过程,提高创建效率
2、需要对对象中的部分属性进行修改,而其他属性不需要改变
常见应用场景spring中的bean对象创建
1<bean id="hi" class="com.test.Hi" init-method="init" scope="prototype">
其方法实现(摘取部分)来源于抽象类AbstractBeanFactory
1234567891011121314151617181920212223242526272829303132if (mbd.isSingleton()) { sharedInstan ...
单例模式
设计模式源码git地址:design-pattern-src: 设计模式源码 (gitee.com)
什么是单例模式
使用场景
常见的应用场景
实现套路
八大实现方式
什么是单例模式单例模式指某个类中只存在一个对象实例,创建对象的,属于创建者模式
使用场景对于一些频繁创建销毁的对象来说,创建对象耗时或者消耗资源多,工具类对象
常见的应用场景①Runtime类
12345678910111213141516171819public class Runtime { private static Runtime currentRuntime = new Runtime(); /** * Returns the runtime object associated with the current Java application. * Most of the methods of class <code>Runtime</code> are instance * methods and must be invoked w ...