diff --git "a/blog-site/content/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" "b/blog-site/content/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" index acfdcc15..fef1125f 100644 Binary files "a/blog-site/content/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" and "b/blog-site/content/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" differ diff --git "a/blog-site/content/posts/java/Java\345\217\215\345\260\204.md" "b/blog-site/content/posts/java/Java\345\217\215\345\260\204.md" index 0b7d2ff7..8e296141 100644 --- "a/blog-site/content/posts/java/Java\345\217\215\345\260\204.md" +++ "b/blog-site/content/posts/java/Java\345\217\215\345\260\204.md" @@ -11,15 +11,14 @@ slug: "rookie-reflect" 反射是Java语言的一个特性,它允许程序在运行时来进行自我检查并且对内部的成员进行操作。通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。 程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。 - -反射的核心是JVM在运行时动态加载类或调用方法、访问属性,它不需要事先知道运行对象是谁。 +反射的核心是JVM在运行时动态加载类或调用方法、访问属性,它不需要事先知道运行对象是谁。本质是JVM得到`class`对象之后,再通过`class`对象进行反编译,从而获取对象的各种信息。 ## 反射入口 在操作反射前我们要先了解一些Class类。Java的`Class`类是java反射机制的基础,通过`Class`类我们可以获得关于一个类的相关信息。 虚拟机为每种类型管理一个独一无二的`Class`对象,也就是说每个类都有一个`Class`对象。运行程序时,Java虚拟机首先检查是否所要加载的类对应的`Class`对象是否已经加载。 如果没有加载,JVM就会根据类名查找`.class`文件,并将其`Class`对象载入。 ```java -private Class(ClassLoader loader) { +private Class(ClassLoader loader) { classLoader = loader; } ``` @@ -188,6 +187,17 @@ class MyClass { } ``` +## 反射原理 +反射的核心是`java.lang.reflect`包,该包中包含了用于反射操作的类和接口,如`Class`、`Field`、`Method`、`Constructor`等。反射主要依赖于`Class`对象来进行操作。 +Java反射的本质是JVM得到`class`对象之后,再通过`class`对象进行"反编译",从而获取对象的各种信息。描述反射为“反编译”可能不太准确,因为反射并不是将字节码重新转换为源代码。实际上,反射是在运行时通过Class对象来查询和操作已加载的类的结构信息。 + +反射基本原理大致可分为以下几个步骤: +1. JVM的类加载机制负责将类的字节码从不同的源,如`.class`文件、`JAR`包等,加载到内存中,并将其转化为可以在JVM上运行的Class对象。反射依赖于JVM的类加载机制来获取类的结构信息并进行操作。 +2. 当使用反射时,首先需要获取类的Class对象。每个类在 JVM 中加载后,都会有一个对应的Class对象。这个对象包含了类的所有信息,包括类的结构(字段、方法、构造函数)、注解、泛型信息等。 +反射的第一步是获取这个Class对象,可以通过类名、对象实例的`getClass()`方法或者类的字面常量`.class`来获取。 +3. 通过Class对象,可以使用反射API来访问类的字段、方法和构造函数。实际上,反射是在运行时通过Class对象来查询和操作已加载的类的结构信息。 +4. 在具体实现上,Java反射依赖于`java.lang.reflect`包中的一系列类和接口。这些类和接口提供了访问和操作类结构的方法,例如`Field`、`Method`、`Constructor`等。 + ## 反射应用场景 反射在Java编程中有广泛的应用场景。它主要用于动态加载类、运行时获取和操作类的信息,以及实现灵活的编程逻辑。 通过反射,可以实现诸如依赖注入框架,如`Spring`、ORM框架,如`Hibernate`、动态代理、自定义注解处理器、插件化系统等功能。 diff --git "a/blog-site/content/posts/spring/Spring\350\257\246\350\247\243.md" "b/blog-site/content/posts/spring/Spring\350\257\246\350\247\243.md" index 21c1dba6..aa6cbe3d 100644 --- "a/blog-site/content/posts/spring/Spring\350\257\246\350\247\243.md" +++ "b/blog-site/content/posts/spring/Spring\350\257\246\350\247\243.md" @@ -7,12 +7,11 @@ slug: "java-spring" --- ## 概览 -Spring是一个轻量级的Java开源框架,为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面(AOP)。 - +Spring是一个轻量级的Java开源框架,是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面(AOP)。 简单来说,Spring是一个分层的JavaSE/EE 一站式轻量级开源框架,在每一层都提供支持。 -- 表示层:spring mvc -- 业务层:spring -- 持久层:jdbctemplate、spring data +- 表示层:`SpringMVC`; +- 业务层:`Spring`; +- 持久层:`JDBCTemplate`、`SpringData`; ![Spring详解-001](/iblog/posts/annex/images/spring/Spring详解-001.png) @@ -21,92 +20,184 @@ Spring是一个轻量级的框架,简化我们的开发,里面重点包含 - IOC叫控制反转,在没用IOC之前都要手动new创建对象,使用IOC之后由容器进行对象的创建,并且由容器来管理对象,减去了开发上的成本,提高了工作效率。 - AOP叫面向切面编程,在实际项目开发中需要嵌入一些与业务不想关的代码的时候就可以使用AOP。比如,权限日志的增加。 -Spring虽然把它当成框架来使用,但其本质是一个容器,即IOC容器,里面最核心是如何[创建对象和管理对象](#Bean的创建流程),里面包含了Bean的生命周期和Spring的一些扩展点,包含对AOP的应用。 +Spring虽然把它当成框架来使用,但其本质是一个容器,即IOC容器。里面最核心是如何创建对象和管理对象,包含了Bean的生命周期和Spring的一些扩展点,也包含对AOP的应用。 除此之外,Spring真正的强大之处在于其生态,它包含了Spring Framework、Spring Boot、Spring Cloud等一些列框架,极大提高了开发效率。 ## Spring启动流程 ![Spring详解-004](/iblog/posts/annex/images/spring/Spring详解-004.png) +Spring启动流程的主要步骤及对应的代码如下: +1. 启动入口,从main方法调用`SpringApplication.run`。 + ```java + public class MyApplication { + public static void main(String[] args) { + SpringApplication.run(MyApplication.class, args); + } + } + ``` +2. 初始化,创建`SpringApplication`实例,并设置初始化器和监听器。 + ```java + public static ConfigurableApplicationContext run(Class primarySource, String... args) { + return new SpringApplication(primarySource).run(args); + } + + public SpringApplication(Object... sources) { + initialize(sources); + } + + private void initialize(Object[] sources) { + this.sources = new LinkedHashSet<>(Arrays.asList(sources)); + this.initializers = getSpringFactoriesInstances(ApplicationContextInitializer.class); + this.listeners = getSpringFactoriesInstances(ApplicationListener.class); + } + ``` +3. 配置环境,准备Spring环境,如读取配置文件、系统属性等。 + ```java + public ConfigurableEnvironment prepareEnvironment(SpringApplicationRunListeners listeners, ApplicationArguments applicationArguments) { + // 创建并配置环境 + ConfigurableEnvironment environment = getOrCreateEnvironment(); + configureEnvironment(environment, applicationArguments.getSourceArgs()); + listeners.environmentPrepared(environment); + return environment; + } + ``` +4. 创建上下文,根据应用类型创建合适的应用上下文。 + ```java + protected ConfigurableApplicationContext createApplicationContext() { + Class contextClass = this.applicationContextClass; + if (contextClass == null) { + try { + contextClass = Class.forName(this.webApplicationType.getApplicationContextClassName()); + } + catch (ClassNotFoundException ex) { + throw new IllegalStateException( + "Unable to create a default ApplicationContext, " + + "please specify an ApplicationContextClass", + ex); + } + } + return (ConfigurableApplicationContext) BeanUtils.instantiateClass(contextClass); + } + ``` +4. 刷新上下文,初始化所有单例Bean,启动Spring生命周期。 + ```java + public void refresh() throws BeansException, IllegalStateException { + synchronized (this.startupShutdownMonitor) { + prepareRefresh(); + ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); + prepareBeanFactory(beanFactory); + postProcessBeanFactory(beanFactory); + invokeBeanFactoryPostProcessors(beanFactory); + registerBeanPostProcessors(beanFactory); + initMessageSource(); + initApplicationEventMulticaster(); + onRefresh(); + registerListeners(); + finishBeanFactoryInitialization(beanFactory); + finishRefresh(); + } + } + ``` +5. 通知监听器启动完成,执行`ApplicationRunner`和`CommandLineRunner`。 + ```java + private void callRunners(ApplicationContext context, ApplicationArguments args) { + List runners = new ArrayList<>(); + runners.addAll(context.getBeansOfType(ApplicationRunner.class).values()); + runners.addAll(context.getBeansOfType(CommandLineRunner.class).values()); + AnnotationAwareOrderComparator.sort(runners); + for (Object runner : new LinkedHashSet<>(runners)) { + if (runner instanceof ApplicationRunner) { + callRunner((ApplicationRunner) runner, args); + } + if (runner instanceof CommandLineRunner) { + callRunner((CommandLineRunner) runner, args); + } + } + } + ``` -核心方法`AbstractApplicationContext#refresh()` -``` +其中核心方法为`refresh()`刷新上下文方法。 +```java public void refresh() throws BeansException, IllegalStateException { - synchronized (this.startupShutdownMonitor) { - // Prepare this context for refreshing. - prepareRefresh(); + synchronized (this.startupShutdownMonitor) { + // 1. 准备刷新上下文 + prepareRefresh(); - // Tell the subclass to refresh the internal bean factory. - ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); + // 2. 获取BeanFactory并进行初始化 + ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory(); - // Prepare the bean factory for use in this context. - prepareBeanFactory(beanFactory); + // 3. 为BeanFactory配置上下文相关信息 + prepareBeanFactory(beanFactory); - try { - // Allows post-processing of the bean factory in context subclasses. - postProcessBeanFactory(beanFactory); - - // Invoke factory processors registered as beans in the context. - invokeBeanFactoryPostProcessors(beanFactory); - - // Register bean processors that intercept bean creation. - registerBeanPostProcessors(beanFactory); + try { + // 4. 子类覆盖方法,做进一步的BeanFactory初始化 + postProcessBeanFactory(beanFactory); - // Initialize message source for this context. - initMessageSource(); + // 5. 调用BeanFactoryPostProcessors + invokeBeanFactoryPostProcessors(beanFactory); - // Initialize event multicaster for this context. - initApplicationEventMulticaster(); + // 6. 注册BeanPostProcessors + registerBeanPostProcessors(beanFactory); - // Initialize other special beans in specific context subclasses. - onRefresh(); + // 7. 初始化消息源(用于国际化) + initMessageSource(); - // Check for listener beans and register them. - registerListeners(); + // 8. 初始化事件广播器 + initApplicationEventMulticaster(); - // Instantiate all remaining (non-lazy-init) singletons. - finishBeanFactoryInitialization(beanFactory); + // 9. 子类覆盖方法,在上下文刷新的时候进行进一步的处理 + onRefresh(); - // Last step: publish corresponding event. - finishRefresh(); - } + // 10. 注册监听器以便监听事件 + registerListeners(); - catch (BeansException ex) { - // ... - } + // 11. 初始化所有单例Bean + finishBeanFactoryInitialization(beanFactory); - finally { - // ... - } - } + // 12. 完成刷新过程,通知生命周期处理器 + finishRefresh(); + } + catch (BeansException ex) { + // 如果在刷新过程中出现异常,则销毁已创建的单例Beans以避免资源泄漏 + destroyBeans(); + cancelRefresh(ex); + throw ex; + } + finally { + // 重置标志位 + resetCommonCaches(); + } + } } ``` -1. prepareRefresh 准备刷新容器,此方法做一些刷新容器的准备工作: - - 设置开启时间和对应标志位 - - 获取环境对象 - - 设置监听器和一些时间的集合对象 -2. obtainFreshBeanFactory 创建容器对象:DefaultListableBeanFactory;加载xml配置文件属性值到工厂中,最重要的是BeanDefinition -3. prepareBeanFactory 完成bean工厂的某些初始化操作 - - 设置BeanDefinition的类加载器 - - 设置spring容器默认的类型转换器 - - 设置spring解析el表达式的解析器 - - 添加一个Bean的后置处理器ApplicationContextAwareProcessor - - 将bean工厂的一些类,比如ApplicationContext直接注册到单例池中 - - 去除一些在byType或者byName的时候需要过滤掉的一些bean(spring在依赖注入的时候会先在这些默认注册的bean中进行byType找,如果找到了,就加入到列表中,简单来说就是比如你在bean中依赖注入了ApplicationContext context,那么spring会把默认注册的这些bean中找到然后进行注册) - - 将系统的环境信息、spring容器的启动环境信息、操作系统的环境信息直接注册成一个单例的bean -4. postProcessBeanFactory 这里是一个空壳方法,spring目前还没有对他进行实现;这个方法是留给子类进行实现的,后续可以添加一些用户自定义的或者默认的一些特殊的后置处理器工程到beanFactory中去 -5. invokeBeanFactoryPostProcessors 调用后置处理器;将系统中所有符合条件的普通类都扫描成了一个BeanDefinition 并且放入到了beanDefinitionMap中,包括业务的bean,ban的后置处理器、bean工厂的后置处理器等等 - - 将标记为容器单例类扫描成BeanDefinition放入BeanDefinition Map - - 处理@Import注解 - - 如果我们的配置类是@Configuration的,那么会生成这个配置类的CGLIB代理类,如果没有加@Configuration,则就是一个普通Bean -6. registerBeanPostProcessors 从beanDefinitionMap中取出bean的后置处理器然后放入到后置处理器的缓存列表中 -7. initMessageSource 初始化国际化资源信息 -8. initApplicationEventMulticaster 事件注册器初始化 -9. onRefresh 空壳方法,留给子类实现 -10. registerListeners 将容器中和BeanDefinitionMap中的监听器添加到事件监听器中 -11. finishBeanFactoryInitialization 创建单例池,将容器中非懒加载的Bean,单例bean创建对象放入单例池中,包括容器的依赖注入 -12. finishRefresh 容器启动过后,发布事件 +1. `prepareRefresh`准备刷新容器,此方法做一些刷新容器的准备工作: + - 设置开启时间和对应标志位。 + - 获取环境对象。 + - 设置监听器和一些时间的集合对象。 +2. `obtainFreshBeanFactory`创建容器对象:`DefaultListableBeanFactory`;加载xml配置文件属性值到工厂中,最重要的是`BeanDefinition`。 +3. `prepareBeanFactory`完成Bean工厂的某些初始化操作: + - 设置`BeanDefinition`的类加载器。 + - 设置Spring容器默认的类型转换器。 + - 设置Spring解析EL表达式的解析器。 + - 添加一个Bean的后置处理器`ApplicationContextAwareProcessor`。 + - 将Bean工厂的一些类,比如`ApplicationContext`直接注册到单例池中。 + - 去除一些在`byType`或者`byName`的时候需要过滤掉的一些Bean(Spring在依赖注入的时候会先在这些默认注册的Bean中进行byType找,如果找到了,就加入到列表中,简单来说就是比如你在Bean中依赖注入了`ApplicationContext`,那么Spring会把默认注册的这些Bean中找到然后进行注册)。 + - 将系统的环境信息、Spring容器的启动环境信息、操作系统的环境信息直接注册成一个单例的Bean。 +4. `postProcessBeanFactory` 这里是一个空壳方法,Spring目前还没有对他进行实现;这个方法是留给子类进行实现的,后续可以添加一些用户自定义的或者默认的一些特殊的后置处理器工程到`beanFactory`中去。 +5. `invokeBeanFactoryPostProcessors` 调用后置处理器;将系统中所有符合条件的普通类都扫描成了一个`BeanDefinition`并且放入到了`beanDefinitionMap`中,包括业务的Bean,Bean的后置处理器、Bean工厂的后置处理器等。 + - 将标记为容器单例类扫描成`BeanDefinition`放入`BeanDefinitionMap`。 + - 处理`@Import`注解。 + - 如果我们的配置类是`@Configuration`的,那么会生成这个配置类的CGLIB代理类,如果没有加`@Configuration`,则就是一个普通Bean。 +6. `registerBeanPostProcessors`从`beanDefinitionMap`中取出Bean的后置处理器然后放入到后置处理器的缓存列表中。 +7. `initMessageSource`初始化国际化资源信息。 +8. `initApplicationEventMulticaster`事件注册器初始化。 +9. `onRefresh`空壳方法,留给子类实现。 +10. `registerListeners`将容器中和`BeanDefinitionMap`中的监听器添加到事件监听器中。 +11. `finishBeanFactoryInitialization`创建单例池,将容器中非懒加载的Bean,单例Bean创建对象放入单例池中,包括容器的依赖注入。 +12. `finishRefresh`容器启动过后,发布事件。 ## Spring循环依赖与三级缓存 +[//]: # (写到了这里) ![Spring详解-003](/iblog/posts/annex/images/spring/Spring详解-003.png) Spring循环依赖调用流程: diff --git a/blog-site/public/index.xml b/blog-site/public/index.xml index 5862611d..1ec2d3dd 100644 --- a/blog-site/public/index.xml +++ b/blog-site/public/index.xml @@ -321,7 +321,7 @@ http://localhost:1313/iblog/posts/emp/computer-professional-ref-guide/ Tue, 02 Apr 2024 00:00:00 +0000 http://localhost:1313/iblog/posts/emp/computer-professional-ref-guide/ - �算机专业.png](/iblog/posts/annex/images/essays/计算机专业.png) 计算机知识结构 计算机知识结构组成大致分为学科基础知识 + 计算机知识结构 计算机知识结构组成大致分为学科基础知识和应用编程技能。 学科基础知识包括:数据结构、计算机网络、操作系统、数学、计算机组成原理等等; 应用编程包括:编 艾跃进-社交礼仪-做人的层次 @@ -447,7 +447,7 @@ http://localhost:1313/iblog/posts/emp/quick-write-resume/ Sun, 17 Mar 2024 00:00:00 +0000 http://localhost:1313/iblog/posts/emp/quick-write-resume/ - ��段时间一直在忙简历相关的事情,起初是有一个其他行业的朋友问我,说这些简历我写了好久真难写,我说你可以借助AI,现在这种工具多了去了,为什么不借助呢? 他回答, + 最近一段时间一直在忙简历相关的事情,起初是有一个其他行业的朋友问我,说这些简历我写了好久真难写,我说你可以借助AI,现在这种工具多了去了,为什么不借助呢? 他回答 前端20240316简历 @@ -475,7 +475,7 @@ http://localhost:1313/iblog/posts/emp/front-learning-route/ Thu, 29 Feb 2024 00:00:00 +0000 http://localhost:1313/iblog/posts/emp/front-learning-route/ - g-route&quot; 基础知识 网络知识 HTTP DNS 域名 云服务 网络安全 HTTPS CORS 网络渗透 OWASP HTML CSS JavaScript JQuery Ajax ES6-ES11 综合应用 工程化体系 代码规范 CSS预处理器 Less Sass PostCSS Node Promise Axios 工具 包管理工具 Yarn Npm 打包工具 Webpack Parcel 代码格式化工 + 基础知识 网络知识 HTTP DNS 域名 云服务 网络安全 HTTPS CORS 网络渗透 OWASP HTML CSS JavaScript JQuery Ajax ES6-ES11 综合应用 工程化体系 代码规范 CSS预处理器 Less Sass PostCSS Node Promise Axios 工具 包管理工具 Yarn Npm 打包工具 Webpack Parcel 代码格式化工具 Java20240228简历 diff --git a/blog-site/public/page/3/index.html b/blog-site/public/page/3/index.html index 4f7d986e..6474cd51 100644 --- a/blog-site/public/page/3/index.html +++ b/blog-site/public/page/3/index.html @@ -593,7 +593,7 @@

计算机专业
-

�算机专业.png](/iblog/posts/annex/images/essays/计算机专业.png) 计算机知识结构 计算机知识结构组成大致分为学科基础知识......

+

计算机知识结构 计算机知识结构组成大致分为学科基础知识和应用编程技能。 学科基础知识包括:数据结构、计算机网络、操作系统、数学、计算机组成原理等等; 应用编程包括:编......

@@ -608,7 +608,7 @@

计算机专业 - 就业求职 + 就业 diff --git a/blog-site/public/page/5/index.html b/blog-site/public/page/5/index.html index 5f825920..5c6f99e5 100644 --- a/blog-site/public/page/5/index.html +++ b/blog-site/public/page/5/index.html @@ -201,7 +201,7 @@

如何快速写一份简历
-

��段时间一直在忙简历相关的事情,起初是有一个其他行业的朋友问我,说这些简历我写了好久真难写,我说你可以借助AI,现在这种工具多了去了,为什么不借助呢? 他回答,......

+

最近一段时间一直在忙简历相关的事情,起初是有一个其他行业的朋友问我,说这些简历我写了好久真难写,我说你可以借助AI,现在这种工具多了去了,为什么不借助呢? 他回答......

@@ -218,8 +218,6 @@

如何快速写一份简历简历 - 其他 - @@ -327,7 +325,7 @@

前端学习路线

-

g-route" 基础知识 网络知识 HTTP DNS 域名 云服务 网络安全 HTTPS CORS 网络渗透 OWASP HTML CSS JavaScript JQuery Ajax ES6-ES11 综合应用 工程化体系 代码规范 CSS预处理器 Less Sass PostCSS Node Promise Axios 工具 包管理工具 Yarn Npm 打包工具 Webpack Parcel 代码格式化工......

+

基础知识 网络知识 HTTP DNS 域名 云服务 网络安全 HTTPS CORS 网络渗透 OWASP HTML CSS JavaScript JQuery Ajax ES6-ES11 综合应用 工程化体系 代码规范 CSS预处理器 Less Sass PostCSS Node Promise Axios 工具 包管理工具 Yarn Npm 打包工具 Webpack Parcel 代码格式化工具......

@@ -342,7 +340,9 @@

前端学习路线

- 面试 + 学习路线 + + 就业 diff --git "a/blog-site/public/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" "b/blog-site/public/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" index acfdcc15..fef1125f 100644 Binary files "a/blog-site/public/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" and "b/blog-site/public/posts/annex/images/spring/Spring\350\257\246\350\247\243-004.png" differ diff --git a/blog-site/public/posts/emp/computer-professional-ref-guide/index.html b/blog-site/public/posts/emp/computer-professional-ref-guide/index.html index 41638783..813b17b3 100644 --- a/blog-site/public/posts/emp/computer-professional-ref-guide/index.html +++ b/blog-site/public/posts/emp/computer-professional-ref-guide/index.html @@ -12,7 +12,7 @@ - + @@ -321,7 +321,7 @@

计算机专业参考指南

-

算机专业.png](/iblog/posts/annex/images/essays/计算机专业.png)

+

计算机专业.png

计算机知识结构

计算机知识结构组成大致分为学科基础知识和应用编程技能。 学科基础知识包括:数据结构、计算机网络、操作系统、数学、计算机组成原理等等; @@ -363,8 +363,7 @@

建议

根据个人自身学历、能力和兴趣以及一些其他实际客观因素来选择适合的方向,没有最好的专业,适合自己的就是最好的。比如,学历较高,学习能力比较强尤其数学比较好,又对计算机方向有兴趣而且家里比较富裕不是很着急赚钱,能接受收益慢的情况,就可以选择研发方向,从而提前做好准备。 如果不是很适合研发方向,可以考虑开发方向,交叉方向是不推荐的。研发方向比较重视学历和实践能力,开发方向更看重的是实践上手解决问题的能力,如果学校差,平台差,或者是想继续深造可以考虑考个研。无论哪个方向都要持续的进行学习,要提早做好这方面打算。

网络上有很多信息鱼龙混杂,有很多极端的论调,说很多985的找不到工作。 -在我看来各行有各行的难,生化环材的专业肯定也有一肚子苦水要吐,计算机专业只要坐住了去学,不管二本还是双非,找个过的去的工作总归是没问题的。 -������

+在我看来各行有各行的难,生化环材的专业肯定也有一肚子苦水要吐,计算机专业只要坐住了去学,不管二本还是双非,找个过的去的工作总归是没问题的。

diff --git "a/blog-site/public/tags/\345\205\266\344\273\226/index.xml" "b/blog-site/public/tags/\345\205\266\344\273\226/index.xml" index dbbaea81..84aeb967 100644 --- "a/blog-site/public/tags/\345\205\266\344\273\226/index.xml" +++ "b/blog-site/public/tags/\345\205\266\344\273\226/index.xml" @@ -22,13 +22,6 @@ http://localhost:1313/iblog/posts/essays/build-blog/ 搭建博客框架及对比 在众多的博客框架中,Hugo、Jekyll和Hexo因其出色的性能和易用性而备受推崇。 特点 Hugo Jekyll Hexo 速度 极高 中等 较高 易用性 高 中等 高(熟悉JavaS - - 程序员如何提高收入 - http://localhost:1313/iblog/posts/essays/programmer-increase-income/ - Sat, 13 Apr 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/essays/programmer-increase-income/ - 程序员作为副业推荐就是外包接单。怎么接单呢?以下是总结的三种方式。 第一种是靠熟人介绍。如果你做程序员时间比较长,身边总会有些比较厉害的人,他能带你玩一玩,跟这些 - 快速打开Github http://localhost:1313/iblog/posts/essays/accelerate-access-github/ @@ -36,13 +29,6 @@ http://localhost:1313/iblog/posts/essays/accelerate-access-github/ 为什么我们打开Github速度很慢?很卡?甚至于访问不了,原因是中间有个域名通过DNS解析的过程,将域名解析为对应的ip地址,主要时间都花在了DNS解析上。 我们 - - 如何快速写一份简历 - http://localhost:1313/iblog/posts/interview/quick-write-resume/ - Sun, 17 Mar 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/quick-write-resume/ - 最近一段时间一直在忙简历相关的事情,起初是有一个其他行业的朋友问我,说这些简历我写了好久真难写,我说你可以借助AI,现在这种工具多了去了,为什么不借助呢? 他回答 - 如何强制复制网站上的文字 http://localhost:1313/iblog/posts/essays/force-copy-website-text/ @@ -57,12 +43,5 @@ http://localhost:1313/iblog/posts/essays/eye-beam/ 故障排查命令 收录Linux常用命令,以下命令来自https://www.bilibili.com/video/BV14A411378a 关机/重启/注销 常用命令 作 - - 职场中如何正确提出辞职 - http://localhost:1313/iblog/posts/interview/correct-resign/ - Fri, 23 Apr 2021 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/correct-resign/ - 如何正确提出辞职 辞职的时候不要给公司埋雷,当然也不要被公司薅最后一把羊毛。正所谓害人之心不可有,防人之心不可无。 如果你在一个公司实在是工作不下去了,请不要忍气吞 - diff --git "a/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.html" "b/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.html" index 7f7a580b..58bf2c31 100644 --- "a/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.html" +++ "b/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.html" @@ -35,6 +35,7 @@ + @@ -123,6 +124,36 @@

+ +
+ +
@@ -131,7 +162,7 @@

@@ -194,27 +225,40 @@

- - - - - - - - - - - - - - - - - - - - - + diff --git "a/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.xml" "b/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.xml" index ce1084fe..1f19eae7 100644 --- "a/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.xml" +++ "b/blog-site/public/tags/\345\255\246\344\271\240\350\267\257\347\272\277/index.xml" @@ -9,10 +9,10 @@ Thu, 29 Feb 2024 00:00:00 +0000 - 前端知识点 - http://localhost:1313/iblog/posts/essays/front-learning-route/ + 前端学习路线 + http://localhost:1313/iblog/posts/emp/front-learning-route/ Thu, 29 Feb 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/essays/front-learning-route/ + http://localhost:1313/iblog/posts/emp/front-learning-route/ 基础知识 网络知识 HTTP DNS 域名 云服务 网络安全 HTTPS CORS 网络渗透 OWASP HTML CSS JavaScript JQuery Ajax ES6-ES11 综合应用 工程化体系 代码规范 CSS预处理器 Less Sass PostCSS Node Promise Axios 工具 包管理工具 Yarn Npm 打包工具 Webpack Parcel 代码格式化工具 diff --git "a/blog-site/public/tags/\345\260\261\344\270\232/index.html" "b/blog-site/public/tags/\345\260\261\344\270\232/index.html" index f53780ae..90a888ee 100644 --- "a/blog-site/public/tags/\345\260\261\344\270\232/index.html" +++ "b/blog-site/public/tags/\345\260\261\344\270\232/index.html" @@ -157,6 +157,32 @@

+
2024
+
+ +
+
+ 程序员如何提高收入 +
04-13
+
+
+ +
+
+ 计算机专业参考指南 +
04-02
+
+
+ +
+
+ 前端学习路线 +
02-29
+
+
+ +
+
2021
@@ -167,6 +193,13 @@

+
+
+ 面试中常见的问题 +
04-23
+
+
+

diff --git "a/blog-site/public/tags/\345\260\261\344\270\232/index.xml" "b/blog-site/public/tags/\345\260\261\344\270\232/index.xml" index a53edda8..a9cdfba5 100644 --- "a/blog-site/public/tags/\345\260\261\344\270\232/index.xml" +++ "b/blog-site/public/tags/\345\260\261\344\270\232/index.xml" @@ -6,8 +6,36 @@ Recent content in 就业 on 脚踏实地 Hugo -- gohugo.io zh - Fri, 23 Apr 2021 00:00:00 +0000 + Sat, 13 Apr 2024 00:00:00 +0000 + + 程序员如何提高收入 + http://localhost:1313/iblog/posts/emp/programmer-increase-income/ + Sat, 13 Apr 2024 00:00:00 +0000 + http://localhost:1313/iblog/posts/emp/programmer-increase-income/ + 程序员作为副业推荐就是外包接单。怎么接单呢?以下是总结的三种方式。 第一种是靠熟人介绍。如果你做程序员时间比较长,身边总会有些比较厉害的人,他能带你玩一玩,跟这些 + + + 计算机专业参考指南 + http://localhost:1313/iblog/posts/emp/computer-professional-ref-guide/ + Tue, 02 Apr 2024 00:00:00 +0000 + http://localhost:1313/iblog/posts/emp/computer-professional-ref-guide/ + 计算机知识结构 计算机知识结构组成大致分为学科基础知识和应用编程技能。 学科基础知识包括:数据结构、计算机网络、操作系统、数学、计算机组成原理等等; 应用编程包括:编 + + + 前端学习路线 + http://localhost:1313/iblog/posts/emp/front-learning-route/ + Thu, 29 Feb 2024 00:00:00 +0000 + http://localhost:1313/iblog/posts/emp/front-learning-route/ + 基础知识 网络知识 HTTP DNS 域名 云服务 网络安全 HTTPS CORS 网络渗透 OWASP HTML CSS JavaScript JQuery Ajax ES6-ES11 综合应用 工程化体系 代码规范 CSS预处理器 Less Sass PostCSS Node Promise Axios 工具 包管理工具 Yarn Npm 打包工具 Webpack Parcel 代码格式化工具 + + + 面试中常见的问题 + http://localhost:1313/iblog/posts/emp/interview-questions-and-answers/ + Fri, 23 Apr 2021 00:00:00 +0000 + http://localhost:1313/iblog/posts/emp/interview-questions-and-answers/ + 自我介绍 个人经历可以进行适当包装,但是不能造假,一方面如果一旦被人拆穿,后果就不用我说了吧,另一方面如果你说谎,说了一些你自己不感兴趣的项目,在入职之后可能会被 + 职场中如何正确提出辞职 http://localhost:1313/iblog/posts/emp/correct-resign/ diff --git "a/blog-site/public/tags/\345\272\224\347\224\250/index.html" "b/blog-site/public/tags/\345\272\224\347\224\250/index.html" index 4e78bc82..f43e883d 100644 --- "a/blog-site/public/tags/\345\272\224\347\224\250/index.html" +++ "b/blog-site/public/tags/\345\272\224\347\224\250/index.html" @@ -181,13 +181,6 @@

-
-
- Validator参数校验 -
07-01
-
-
-
管道流设计模式结合业务 diff --git "a/blog-site/public/tags/\345\272\224\347\224\250/index.xml" "b/blog-site/public/tags/\345\272\224\347\224\250/index.xml" index 187176fd..6755d927 100644 --- "a/blog-site/public/tags/\345\272\224\347\224\250/index.xml" +++ "b/blog-site/public/tags/\345\272\224\347\224\250/index.xml" @@ -29,13 +29,6 @@ http://localhost:1313/iblog/posts/essays/pay-code/ 结构 完整代码:https://gitee.com/gitee_pikaqiu/easy-archetype pom.xml &lt;dependencies&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-web&lt;/artifactId&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-test&lt;/artifactId&gt; &lt;scope&gt;test&lt;/scope&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.projectlombok&lt;/groupId&gt; &lt;artifactId&gt;lombok&lt;/artifactId&gt; &lt;optional&gt;true&lt;/optional&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;cn.hutool&lt;/groupId&gt; &lt;artifactId&gt;hutool-all&lt;/artifactId&gt; &lt;version&gt;5.8.11&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.alipay.sdk&lt;/groupId&gt; &lt;artifactId&gt;alipay-sdk-java&lt;/artifactId&gt; &lt;version&gt;4.9.9&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; - - Validator参数校验 - http://localhost:1313/iblog/posts/essays/springboot-validator/ - Sat, 01 Jul 2023 00:00:00 +0000 - http://localhost:1313/iblog/posts/essays/springboot-validator/ - 常见参数校验 在日常的接口开发中,为了防止非法参数对业务造成影响,经常需要对接口的参数做校验,最简单就是用if条件语句来判断,但是随着参数越来越多,业务越来越复杂 - 管道流设计模式结合业务 http://localhost:1313/iblog/posts/essays/pipeline-business/ diff --git "a/blog-site/public/tags/\347\256\200\345\216\206/index.html" "b/blog-site/public/tags/\347\256\200\345\216\206/index.html" index f877b177..ee8bb107 100644 --- "a/blog-site/public/tags/\347\256\200\345\216\206/index.html" +++ "b/blog-site/public/tags/\347\256\200\345\216\206/index.html" @@ -162,28 +162,28 @@

@@ -195,7 +195,7 @@

@@ -207,7 +207,7 @@

@@ -219,7 +219,7 @@

diff --git "a/blog-site/public/tags/\347\256\200\345\216\206/index.xml" "b/blog-site/public/tags/\347\256\200\345\216\206/index.xml" index fff5587e..4d032486 100644 --- "a/blog-site/public/tags/\347\256\200\345\216\206/index.xml" +++ "b/blog-site/public/tags/\347\256\200\345\216\206/index.xml" @@ -10,51 +10,51 @@ 如何快速写一份简历 - http://localhost:1313/iblog/posts/interview/quick-write-resume/ + http://localhost:1313/iblog/posts/emp/quick-write-resume/ Sun, 17 Mar 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/quick-write-resume/ + http://localhost:1313/iblog/posts/emp/quick-write-resume/ 最近一段时间一直在忙简历相关的事情,起初是有一个其他行业的朋友问我,说这些简历我写了好久真难写,我说你可以借助AI,现在这种工具多了去了,为什么不借助呢? 他回答 前端20240316简历 - http://localhost:1313/iblog/posts/interview/interview-resume-20240316/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240316/ Sat, 16 Mar 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/interview-resume-20240316/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240316/ 自我介绍 199* · *** 河北·** 152****6158 &nbsp;152****6158@163.com 有5年前端开发经验,擅长封装复杂业务组件,熟练使用Vue2、Vue3框架进行开发,有微信小程序和App开发丰富实战经验;能独立封装复 Java20240315简历 - http://localhost:1313/iblog/posts/interview/interview-resume-20240315/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240315/ Fri, 15 Mar 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/interview-resume-20240315/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240315/ 自我介绍 1998 · 李济芝 河北唐山 15176733539 &nbsp;m15176733539@163.com 五年开发经验,熟悉支付、电商、银行相关业务。擅长使用设计模式,具备独立开发及故障排查能力。有框架设计开发经验、前端后端Web开发经 Java20240228简历 - http://localhost:1313/iblog/posts/interview/interview-resume-20240228/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240228/ Wed, 28 Feb 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/interview-resume-20240228/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240228/ 自我介绍 19** · *** 河北·** 182****7274 &nbsp;160****714@qq.com 求职意向 期望城市:唐山 工作薪资:面议 工作性质:全职 目标职能:中级/高级Java工程师 专业技能 熟练掌握Java相关知识,具备良好的面向 Java20230915简历 - http://localhost:1313/iblog/posts/interview/interview-resume-20230915/ + http://localhost:1313/iblog/posts/emp/interview-resume-20230915/ Fri, 15 Sep 2023 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/interview-resume-20230915/ + http://localhost:1313/iblog/posts/emp/interview-resume-20230915/ 自我介绍 1998 · 李济芝 河北唐山 15176733539 &nbsp;m15176733539@163.com 本人有严谨的工作态度与高质量意识;能查阅各种开发技术手册,具有独立解决问题的能力。具备扎实的Java基础和四年开发经验,有良好的编 Java20220422简历 - http://localhost:1313/iblog/posts/interview/interview-resume-20220422/ + http://localhost:1313/iblog/posts/emp/interview-resume-20220422/ Fri, 22 Apr 2022 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/interview-resume-20220422/ + http://localhost:1313/iblog/posts/emp/interview-resume-20220422/ 自我介绍 1998 · 李济芝 河北唐山 15176733539 &nbsp;m15176733539@163.com 本人有严谨的工作态度与高质量意识;能查阅各种开发技术手册,具有独立解决问题的能力。具备扎实的Java基础和三年开发经验,有良好的编 Java20201124简历 - http://localhost:1313/iblog/posts/interview/interview-resume-20201124/ + http://localhost:1313/iblog/posts/emp/interview-resume-20201124/ Tue, 24 Nov 2020 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/interview-resume-20201124/ + http://localhost:1313/iblog/posts/emp/interview-resume-20201124/ 自我介绍 1998 · 李济芝 河北唐山 15176733539 &nbsp;m15176733539@163.com 专业技能 熟练使用 SSM,SpringBoot等框架技术; 熟练使用HTML,CSS等相关技术; 有Redis,Vue相关使用经验; 有对 diff --git "a/blog-site/public/tags/\347\272\277\347\250\213/index.html" "b/blog-site/public/tags/\347\272\277\347\250\213/index.html" index effcc9cd..912bbe81 100644 --- "a/blog-site/public/tags/\347\272\277\347\250\213/index.html" +++ "b/blog-site/public/tags/\347\272\277\347\250\213/index.html" @@ -169,14 +169,14 @@

diff --git "a/blog-site/public/tags/\347\272\277\347\250\213/index.xml" "b/blog-site/public/tags/\347\272\277\347\250\213/index.xml" index 6c135fb0..0c96db6a 100644 --- "a/blog-site/public/tags/\347\272\277\347\250\213/index.xml" +++ "b/blog-site/public/tags/\347\272\277\347\250\213/index.xml" @@ -16,18 +16,18 @@ 线程状态及转换 线程状态共包含6种,6中状态又可以互相的转换。 新建状态(New): 创建了线程后尚未启动; 可运行状态(Runnable): 可能正在运行,也可能正在等 - Java中常用到的锁 - http://localhost:1313/iblog/posts/essays/java-lock/ + Java中的锁都有什么 + http://localhost:1313/iblog/posts/essays/java-locks/ Tue, 07 Apr 2020 00:00:00 +0000 - http://localhost:1313/iblog/posts/essays/java-lock/ - 公平锁 指多个线程按照申请锁的顺序来获取锁类似排队打饭 先来后到 优点: 所有的线程都能得到资源,不会饿死在队列中。 缺点: 吞吐量会下降很多,队列里面除了第一个线程,其他 + http://localhost:1313/iblog/posts/essays/java-locks/ + 锁 在Java中根据锁的特性来划分可以分为很多,锁的主要作用是确保多线程环境下的数据安全,从而保证程序的正确执行。 在Java中具体&quot;锁&quot;的实现 - Java中集合的线程不安全问题 + Java中常用线程安全的集合 http://localhost:1313/iblog/posts/essays/java-thread-collection/ Sun, 05 Apr 2020 00:00:00 +0000 http://localhost:1313/iblog/posts/essays/java-thread-collection/ - ArrayList ArrayList线程不安全示例: public static void main(String[] args) { ArrayList&lt;String&gt; arrayList = new ArrayList&lt;&gt;(); for(int i=0; i&lt; 3; i++) { new Thread(() -&gt; { arrayList.add(UUID.randomUUID().toString()); System.out.println(arrayList); },String.valueOf(i)).start(); } } // ConcurrentModificationException 同步修改异常 Exception in thread &#34;8&#34; java.util.ConcurrentModificationException [null, 2041b613-8068-4ddd-9d01-305f5680d377] [null, 2041b613-8068-4ddd-9d01-305f5680d377, b3e0296d-e263-4632-a023-4267cdec5e25] [null, 2041b613-8068-4ddd-9d01-305f5680d377] 原因分析: 当某个线程正在执行 ad + Java中常用线程安全的集合 在多线程环境中,数据的一致性和线程的安全性是至关重要的。传统的集合类,如ArrayList、HashMap和HashSet,在并发访 CAS详解 diff --git "a/blog-site/public/tags/\351\233\206\345\220\210/index.html" "b/blog-site/public/tags/\351\233\206\345\220\210/index.html" index 42bc4fa7..96ee1fd6 100644 --- "a/blog-site/public/tags/\351\233\206\345\220\210/index.html" +++ "b/blog-site/public/tags/\351\233\206\345\220\210/index.html" @@ -174,7 +174,7 @@

diff --git "a/blog-site/public/tags/\351\233\206\345\220\210/index.xml" "b/blog-site/public/tags/\351\233\206\345\220\210/index.xml" index 43841ef9..0aef66ff 100644 --- "a/blog-site/public/tags/\351\233\206\345\220\210/index.xml" +++ "b/blog-site/public/tags/\351\233\206\345\220\210/index.xml" @@ -16,11 +16,11 @@ 相关概念 capacity: 容量,默认16; loadFactor: 负载因子,表示HashMap满的程度,默认值为0.75f,也就是说默认情况下,当HashMap中 - Java中集合的线程不安全问题 + Java中常用线程安全的集合 http://localhost:1313/iblog/posts/essays/java-thread-collection/ Sun, 05 Apr 2020 00:00:00 +0000 http://localhost:1313/iblog/posts/essays/java-thread-collection/ - ArrayList ArrayList线程不安全示例: public static void main(String[] args) { ArrayList&lt;String&gt; arrayList = new ArrayList&lt;&gt;(); for(int i=0; i&lt; 3; i++) { new Thread(() -&gt; { arrayList.add(UUID.randomUUID().toString()); System.out.println(arrayList); },String.valueOf(i)).start(); } } // ConcurrentModificationException 同步修改异常 Exception in thread &#34;8&#34; java.util.ConcurrentModificationException [null, 2041b613-8068-4ddd-9d01-305f5680d377] [null, 2041b613-8068-4ddd-9d01-305f5680d377, b3e0296d-e263-4632-a023-4267cdec5e25] [null, 2041b613-8068-4ddd-9d01-305f5680d377] 原因分析: 当某个线程正在执行 ad + Java中常用线程安全的集合 在多线程环境中,数据的一致性和线程的安全性是至关重要的。传统的集合类,如ArrayList、HashMap和HashSet,在并发访 diff --git "a/blog-site/public/tags/\351\235\242\350\257\225/index.html" "b/blog-site/public/tags/\351\235\242\350\257\225/index.html" index 171f3f5e..6fb74c74 100644 --- "a/blog-site/public/tags/\351\235\242\350\257\225/index.html" +++ "b/blog-site/public/tags/\351\235\242\350\257\225/index.html" @@ -167,13 +167,6 @@

-
-
- 前端学习路线 -
02-29
-
-
-
2021
@@ -181,7 +174,7 @@

diff --git "a/blog-site/public/tags/\351\235\242\350\257\225/index.xml" "b/blog-site/public/tags/\351\235\242\350\257\225/index.xml" index 2e34c6c3..42b222b0 100644 --- "a/blog-site/public/tags/\351\235\242\350\257\225/index.xml" +++ "b/blog-site/public/tags/\351\235\242\350\257\225/index.xml" @@ -15,18 +15,11 @@ http://localhost:1313/iblog/posts/keepupd/interview-junior-javaer/ 为方便面试,不至于在网上像一个无头苍蝇乱翻,整理了一篇关于面试的资料。本文几乎涵盖了Java所有的知识点,包括:Java基础、网络与安全、常见框架、分布式服务治 - - 前端学习路线 - http://localhost:1313/iblog/posts/interview/front-learning-route/ - Thu, 29 Feb 2024 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/front-learning-route/ - 基础知识 网络知识 HTTP DNS 域名 云服务 网络安全 HTTPS CORS 网络渗透 OWASP HTML CSS JavaScript JQuery Ajax ES6-ES11 综合应用 工程化体系 代码规范 CSS预处理器 Less Sass PostCSS Node Promise Axios 工具 包管理工具 Yarn Npm 打包工具 Webpack Parcel 代码格式化工具 - 面试中常见的问题 - http://localhost:1313/iblog/posts/interview/interview-questions-and-answers/ + http://localhost:1313/iblog/posts/emp/interview-questions-and-answers/ Fri, 23 Apr 2021 00:00:00 +0000 - http://localhost:1313/iblog/posts/interview/interview-questions-and-answers/ + http://localhost:1313/iblog/posts/emp/interview-questions-and-answers/ 自我介绍 个人经历可以进行适当包装,但是不能造假,一方面如果一旦被人拆穿,后果就不用我说了吧,另一方面如果你说谎,说了一些你自己不感兴趣的项目,在入职之后可能会被 diff --git a/blog-site/public/zh/sitemap.xml b/blog-site/public/zh/sitemap.xml index cf3c0639..c906645a 100644 --- a/blog-site/public/zh/sitemap.xml +++ b/blog-site/public/zh/sitemap.xml @@ -187,7 +187,10 @@ http://localhost:1313/iblog/posts/ideology/other-code-03/ 2024-04-14T00:00:00+00:00 - http://localhost:1313/iblog/posts/essays/programmer-increase-income/ + http://localhost:1313/iblog/posts/emp/programmer-increase-income/ + 2024-04-13T00:00:00+00:00 + + http://localhost:1313/iblog/tags/%E5%B0%B1%E4%B8%9A/ 2024-04-13T00:00:00+00:00 http://localhost:1313/iblog/posts/ideology/art-eloquence-and-social-graces-007/ @@ -214,10 +217,7 @@ http://localhost:1313/iblog/posts/ideology/art-eloquence-and-social-graces-003/ 2024-04-03T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/computer-professional-ref-guide/ - 2024-04-02T00:00:00+00:00 - - http://localhost:1313/iblog/tags/%E5%B0%B1%E4%B8%9A%E6%B1%82%E8%81%8C/ + http://localhost:1313/iblog/posts/emp/computer-professional-ref-guide/ 2024-04-02T00:00:00+00:00 http://localhost:1313/iblog/posts/ideology/art-eloquence-and-social-graces-002/ @@ -280,22 +280,25 @@ http://localhost:1313/iblog/tags/%E7%AE%80%E5%8E%86/ 2024-03-17T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/quick-write-resume/ + http://localhost:1313/iblog/posts/emp/quick-write-resume/ 2024-03-17T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/interview-resume-20240316/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240316/ 2024-03-16T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/interview-resume-20240315/ + http://localhost:1313/iblog/posts/emp/interview-resume-20240315/ 2024-03-15T00:00:00+00:00 http://localhost:1313/iblog/posts/essays/force-copy-website-text/ 2024-03-14T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/front-learning-route/ + http://localhost:1313/iblog/posts/emp/front-learning-route/ 2024-02-29T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/interview-resume-20240228/ + http://localhost:1313/iblog/tags/%E5%AD%A6%E4%B9%A0%E8%B7%AF%E7%BA%BF/ + 2024-02-29T00:00:00+00:00 + + http://localhost:1313/iblog/posts/emp/interview-resume-20240228/ 2024-02-28T00:00:00+00:00 http://localhost:1313/iblog/posts/worksummary/work-summary-2023/ @@ -304,7 +307,7 @@ http://localhost:1313/iblog/tags/%E5%B7%A5%E4%BD%9C%E6%80%BB%E7%BB%93/ 2023-12-01T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/interview-resume-20230915/ + http://localhost:1313/iblog/posts/emp/interview-resume-20230915/ 2023-09-15T00:00:00+00:00 http://localhost:1313/iblog/posts/essays/scheduled-job/ @@ -334,7 +337,7 @@ http://localhost:1313/iblog/posts/essays/pay-code/ 2023-08-10T00:00:00+00:00 - http://localhost:1313/iblog/posts/essays/springboot-validator/ + http://localhost:1313/iblog/posts/spring/springboot-validator/ 2023-07-01T00:00:00+00:00 http://localhost:1313/iblog/posts/essays/pipeline-business/ @@ -373,7 +376,7 @@ http://localhost:1313/iblog/posts/essays/java-design/ 2022-08-02T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/interview-resume-20220422/ + http://localhost:1313/iblog/posts/emp/interview-resume-20220422/ 2022-04-22T00:00:00+00:00 http://localhost:1313/iblog/posts/toy/java-multi-gadget/ @@ -445,13 +448,10 @@ http://localhost:1313/iblog/posts/jvm/jvm-about/ 2021-04-27T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/interview-questions-and-answers/ - 2021-04-23T00:00:00+00:00 - - http://localhost:1313/iblog/tags/%E8%81%8C%E5%9C%BA/ + http://localhost:1313/iblog/posts/emp/interview-questions-and-answers/ 2021-04-23T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/correct-resign/ + http://localhost:1313/iblog/posts/emp/correct-resign/ 2021-04-23T00:00:00+00:00 http://localhost:1313/iblog/posts/jvm/java-garbage-collection/ @@ -523,7 +523,7 @@ http://localhost:1313/iblog/posts/java/rookie-exception/ 2021-01-13T00:00:00+00:00 - http://localhost:1313/iblog/posts/interview/interview-resume-20201124/ + http://localhost:1313/iblog/posts/emp/interview-resume-20201124/ 2020-11-24T00:00:00+00:00 http://localhost:1313/iblog/tags/docker/ @@ -544,7 +544,7 @@ http://localhost:1313/iblog/posts/essays/docker-start/ 2020-04-07T00:00:00+00:00 - http://localhost:1313/iblog/posts/essays/java-lock/ + http://localhost:1313/iblog/posts/essays/java-locks/ 2020-04-07T00:00:00+00:00 http://localhost:1313/iblog/posts/essays/java-thread-collection/ diff --git a/docs/page/7/index.html b/docs/page/7/index.html index f3a94ec5..c2718e5f 100644 --- a/docs/page/7/index.html +++ b/docs/page/7/index.html @@ -399,7 +399,7 @@

Spring详解

-

概览 Spring是一个轻量级的Java开源框架,为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面(AOP)。 简单来说,Sp......

+

概览 Spring是一个轻量级的Java开源框架,是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面(AOP)。 简单来说,S......

diff --git a/docs/posts/java/rookie-reflect/index.html b/docs/posts/java/rookie-reflect/index.html index 18706b1c..1caf909a 100644 --- a/docs/posts/java/rookie-reflect/index.html +++ b/docs/posts/java/rookie-reflect/index.html @@ -186,6 +186,30 @@ + + + + + + + + + +