• 类型:属性

  • 归属:bean标签

  • 作用:定义bean的作用范围

  • 格式:

  • 取值:

  • singleton:设定创建出的对象保存在spring容器中,是一个单例的对象,默认值

  • prototype:设定创建出的对象保存在spring容器中,是一个非单例的对象

  • request、session、application、 websocket :设定创建出的对象放置在web容器对应的位置

2.1.2.1、singleton

  • 将scope作用范围设置为单例
  • 测试

@Test

// 测试scope属性

public void test1(){

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao1 = (UserDao) app.getBean(“userDao”);

UserDao userDao2 = (UserDao) app.getBean(“userDao”);

System.out.println(userDao1 == userDao2);

// true,两次创建出来的对象是相同的

}

2.1.2.2、prototype

  • 将scope作用范围设置为多例
  • 测试

@Test

// 测试scope属性

public void test1(){

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao1 = (UserDao) app.getBean(“userDao”);

UserDao userDao2 = (UserDao) app.getBean(“userDao”);

System.out.println(userDao1 == userDao2);

// false,两次创建出来的对象是不相同的

}

2.1.3、bean声明周期

  • 名称:init-method,destroy-method

  • 类型:属性

  • 归属:bean标签

  • 作用:定义bean对象在初始化或销毁时完成的工作

  • 格式:

  • 取值:bean对应的类中对应的具体方法名

  • 注意事项:

  • 当scope=“singleton”时,spring容器中有且仅有一个对象,init方法在创建容器时仅执行一次

  • 当scope=“prototype”时,spring容器要创建同一类型的多个对象,init方法在每个对象创建时均执行一次

  • 当scope=“singleton”时,关闭容器会导致bean实例的销毁,调用destroy方法一次

  • 当scope=“prototype”时,对象的销毁由垃圾回收机制gc()控制,destroy方法将不会被执行

2.1.4、总结

  1. 当scope的取值为singleton时
  • Bean的实例化个数:1个

  • Bean的实例化时机:当Spring核心文件被加载时,实例化配置的Bean实例

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

  • 也就是上述代码执行时,实例化配置的Bean实例

  • Bean的生命周期

  • 对象创建:当应用加载,创建Spring容器时,对象就被创建了

  • 对象运行:只要Spring容器在,对象一直活着

  • 对象销毁:当应用卸载,销毁容器时,对象就被销毁了

  1. 当scope的取值为prototype时
  • Bean的实例化个数:多个

  • Bean的实例化时机:当调用getBean()方法时实例化Bean实例

ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”);

UserDao userDao1 = (UserDao) app.getBean(“userDao”);

  • Bean的生命周期

  • 对象创建:当使用对象时,创建新的对象实例

  • 对象运行:只要对象在使用中,就一直或者

  • 对象销毁:当对象长时间不用时,被 Java 的垃圾回收期回收

2.2、Bean实例化三种方式


  • 无参构造方法实例化(重要)

  • 工厂静态方法实例化(了解)

  • 工厂实例方法实例化(了解)

2.2.1、无参构造方法实例化

它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败

<bean id=“userDao” class=“com.itheima.dao.impl.UserDaoImpl”

2.2.2、工厂静态方法实例化

工厂的静态方法返回Bean实例 :

  • 使用class属性来指定包含static工厂方法的类的全限名

  • 使用factory-method 属性来指定工厂方法本身的名称

  1. 编写工厂静态方法

/**

  • 工厂静态方法

*/

public class StaticFactory {

public static UserDao getUserDao(){

return new UserDaoImpl();

}

}

  1. 在Spring核心配置文件配置

2.2.3、工厂实例方法实例化

工厂的非静态方法返回Bean实例:

  • 使用此机制,请将class属性留空,并在factory-bean属性中,指定包含要创建对象的实例方法的bean的名称

  • 使用factory-method属性设置工厂方法本身的名称

  1. 编写工厂实例方法

/**

  • 工厂实例方法创建对象

*/

public class DynamicFactory {

public UserDao getUserDao(){

return new UserDaoImpl();

}

}

  1. 在Spring核心配置文件配置

2.3、Bean的依赖注入


  • IoC(Inversion Of Control)控制翻转,Spring反向控制应用程序所需要使用的外部资源

  • DI(Dependency Injection)依赖注入,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入

因为UserService和UserDao都在Spring容器中,而最终程序直接使用的是UserService,所以可以在Spring容器中,将UserDao设置到UserService内部。

2.3.1、依赖注入概念

  • 依赖注入 Dependency Injection:它是Spring框架核心IOC的具体实现

  • 在编写程序时,通过控制反转,把对象的创建交给了 Spring,但是代码中不可能出现没有依赖的情况。IOC 解耦只是降低他们的依赖关系,但不会消除。例如:业务层(Service)仍会调用持久层(Dao)的方法。

  • 简单的说,就是坐等框架把持久层(Dao)对象传入业务层(Service),而不用我们自己去获取

2.3.2、依赖注入方式

怎么将UserDao(持久层)怎样注入到UserService(业务层)内部呢?

  • 构造方法

  • set方法

2.3.2.1、set方法注入(主流)

  • 名称:property

  • 类型:标签

  • 归属:bean标签

  • 作用:使用set方法的形式为bean提供资源

  • 格式:

  • 基本属性:

name:对应bean中的属性名,要求该属性必须提供可访问的set方法(严格规范为此名称是set方法对应名称)

value:设定非引用类型属性对应的值,不能与ref同时使用

ref:设定引用类型属性对应bean的id ,不能与value同时使用

  • 注意:一个bean可以有多个property标签

要求被注入的属性,必须有set方法,set方法的方法名由set + 属性首字母大写,

  1. 在UserServiceImpl中添加setUserDao方法

public class UserServiceImpl implements UserService {

private UserDao userDao;

public void setUserDao(UserDao userDao){

this.userDao = userDao;

}

@Override

public void save() {

userDao.save();

}

}

  1. 配置Spring容器调用set方法进行注入
  • 注意点:这里的值是一个引用,ref

2.3.2.2、构造方式注入(了解)

  • 名称:constructor-arg

  • 类型:标签

  • 归属:bean标签

  • 作用:使用构造方法的形式为bean提供资源,兼容早期遗留系统的升级工作

  • 格式:

  • 基本属性:

<constructor-arg name=“argsName” value="argsValue />

name:对应bean中的构造方法所携带的参数名

value:设定非引用类型构造方法参数对应的值,不能与ref同时使用

  • 其他属性:

ref:设定引用类型构造方法参数对应bean的id ,不能与value同时使用

type :设定构造方法参数的类型,用于按类型匹配参数或进行类型校验

index :设定构造方法参数的位置,用于按位置匹配参数,参数index值从0开始计数

  • 注意:一个bean可以有多个constructor-arg标签
  1. 创建有参构造

public class UserServiceImpl implements UserService {

private UserDao userDao;

public UserServiceImpl(UserDao userDao) {

this.userDao = userDao;

}

@Override

public void save() {

userDao.save();

}

}

  1. 配置Spring容器调用有参构造时进行注入

2.3.3、依赖注入数据类型

上面的操作,都是注入的引用Bean,都是对UserDao对象的引用进行注入的,除了对象的引用可以注入,普通数据类型,集合等都可以在容器中进行注入。

对于集合数据类型注入:

  • 名称:array,list,set,map,props

  • 类型:标签

  • 归属:property标签 或 constructor-arg标签

  • 作用:注入集合数据类型属性

  • 格式:

  1. 常量注入
  1. Bean注入
  • 注意点:这里的值是一个引用,ref
  1. 数组注入

红楼梦

西游记

水浒传

三国演义

  1. List注入

听歌

看木鱼水心

敲代码

玩游戏哈哈

  1. Map注入
  1. set注入

英雄联盟

刀塔

刺客信条

虐杀原型

  1. null注入
  1. Properties注入

20190525

林晓

123456

2.3.3.1、普通数据类型注入

public class UserDaoImpl implements UserDao {

private String username;

private int age;

public void setUsername(String username) {

this.username = username;

}

public void setAge(int age) {

this.age = age;

}

@Override

public void save() {

System.out.println(username+"===="+age);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

  • 普通值的注入,用value

2.3.3.2、List集合注入

  1. 集合数据类型List<String>的注入

public class UserDaoImpl implements UserDao {

privata List strList;

public void setStrList(List strList){

this.strList = strList;

}

@Override

public void save() {

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

aaa

bbb

ccc

ddd

  1. 集合数据类型List<User>的注入
  • 新建一个实体类User,属性有name、addr,包含getter/setter,有/无参构造,toString方法

public class UserDaoImpl implements UserDao {

privata List strList;

public void setUserList(List userList){

this.userList = userList;

}

@Override

public void save() {

System.out.println(userList);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

2.3.3.3、Map集合注入

集合数据类型Map<String,User>的注入

public class UserDaoImpl implements UserDao {

privata Map<String,User> userMap;

public void setUserMap(Map<String,User> userMap){

this.userMap = userMap;

}

@Override

public void save() {

System.out.println(userMap);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

2.3.3.4、Properties注入

集合数据类型Properties的注入

public class UserDaoImpl implements UserDao {

privata Properties properties;

public void setProperties(Properties properties){

this.properties = properties;

}

@Override

public void save() {

System.out.println(properties);

System.out.println(“save running…”);

}

}

  • 在Spring核心配置文件进行配置

20190525

林晓

123456

2.3.4、使用p命名空间简化配置(了解)

  • 名称:p:propertyName,p:propertyName-ref

  • 类型:属性

  • 归属:bean标签

  • 作用:为bean注入属性值

  • 格式:

  • 注意:使用p命令空间需要先开启spring对p命令空间的的支持,在beans标签中添加对应空间支持
  • 例子

改为:

<bean

id=“userService”

class=“com.itheima.service.impl.UserServiceImpl”

p:userDao-ref=“userDao”

p:bookDao-ref=“bookDao”

/>

2.4、团队开发


import 一般用于团队开发使用,可以将多个 beans.xml 配置文件,导入合并为一个。

  • 名称:import

  • 类型:标签

  • 归属:beans标签

  • 作用:在当前配置文件中导入其他配置文件中的项

  • 格式:

  • 基本属性:

<import resource=“config.xml"/>

​ resource:加载的配置文件名

  • Spring容器加载多个配置文件

new ClassPathXmlApplicationContext(“config1.xml”,“config2.xml”);

  • Spring容器中的bean定义冲突问题

  • 同id的bean,后定义的覆盖先定义的

  • 导入配置文件可以理解为将导入的配置文件复制粘贴到对应位置

  • 导入配置文件的顺序与位置不同可能会导致最终程序运行结果不同

假设,现在项目中有多个人开发,这三个人复制不同的类开发,不同的类需要注册在不同的bean中,我们可以利用 import 将所有人的 beans.xml 合并为一个总的!

  • 张三

  • 李四

  • 王五

  • applicationContext.xml

3、Spring配置数据源

===============================================================================

3.1、数据源的作用


  • 数据源就是连接池

  • 事先实例化数据源,初始化部分连接资源

  • 使用连接资源时从数据源中获取

  • 使用完毕后将连接资源归还给数据源

  • 常见的数据源(连接池):DBCP、C3P0、Druid等

3.2、数据源开发步骤


  1. 导入数据源的坐标和数据库驱动坐标

mysql

mysql-connector-java

5.1.47

c3p0

c3p0

0.9.1.2

com.alibaba

druid

1.1.10

junit

junit

4.11

org.springframework

spring-context

5.0.5.RELEASE

  1. 在资源resources目录下新建jdbc.properties

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/test

jdbc.username=root

jdbc.password=root

  1. applicationContext.xml加载jdbc.properties配置文件获得连接信息
  • 首先引入context命名空间和约束路径

  • 命名空间

xmlns:context=“http://www.springframework.org/schema/context”

  • 约束路径

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xmlns:context=“http://www.springframework.org/schema/context”

xsi:schemaLocation=

"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:property-placeholder location=“classpath:jdbc.properties”/>

  1. 测试

@Test

//测试手动创建c3p0数据源(加载properties配置文件)

public void test03() throws Exception {

//加载类路径下的jdbc.properties

ResourceBundle rb = ResourceBundle.getBundle(“jdbc”);

ComboPooledDataSource dataSource = new ComboPooledDataSource();

dataSource.setDriverClass(rb.getString(“jdbc.drier”));

dataSource.setJdbcUrl(rb.getString(“jdbc.url”));

dataSource.setUser(“jdbc.username”);

dataSource.setPassword(“jdbc.password”);

Connection connection = dataSource.getConnection();

}

3.3、Spring相关API


3.3.1、applicationContext接口

  • applicationContext :接口类型,代表应用上下文,可以通过其实例获得Spring容器中的Bean对象

3.3.2、applicationContext实现类

  • ClassPathXmlApplicationContext : 它是从类的根路径下加载配置文件,推荐使用这种

  • FileSystemXmlApplicationContext : 它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置

  • AnnotationConfigApplicationContext : 当使用注解配置容器对象时,需要使用此类来创建 spring 容器。它用来读取注解

3.3.3、getBean()方法

  • getBean("id") : 当参数的数据类型是字符串时,表示根据 Bean 的 id 从容器中获得Bean实例,返回是Object,需要强转。

  • getBean(class) :当参数的数据类型是Class字节码类型时,表示根据类型从容器中匹配Bean实例,当容器中相同类型的Bean有多个时,则此方法会报错

3.3.4、重点API

ApplicationContext app = new ClasspathXmlApplicationContext(“xml文件”);

app.ge

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

tBean(“id”);

app.getBean(class);

4、Spring注解开发

==============================================================================

Spring是轻代码而重配置的框架,配置比较繁重,影响开发效率,所以注解开发是一种趋势,注解代替xml配置文件可以简化配置,提高开发效率。

4.1、Spring原始注解


Spring原始注解主要是替代Bean的配置

注意:

  • 使用注解进行开发时,需要在applicationContext.xml中配置组件扫描,作用是指定哪个包及其子包下的Bean需要进行扫描以便识别使用注解配置的类、字段和方法

<context:component-scan base-package=“com.itheima”/>

  • 说明

  • 在进行包所扫描时,会对配置的包及其子包中所有文件进行扫描

  • 扫描过程是以文件夹递归迭代的形式进行的

  • 扫描过程仅读取合法的java文件

  • 扫描时仅读取spring可识别的注解

  • 扫描结束后会将可识别的有效注解转化为spring对应的资源加入IoC容器

  • 注意

  • 无论是注解格式还是XML配置格式,最终都是将资源加载到IoC容器中,差别仅仅是数据读取方式不同

  • 从加载效率上来说注解优于XML配置文件

  • 我们也可以开启属性注解支持,这样所有注解都可生效

<context: annotation-config/>

| 注解 | 说明 |

| — | — |

| @Component | 使用在类上个用于实例化Bean |

| @Controller | 使用在web层类上用于实例化Bean |

| @Service | 使用在service层类上用于实例化Bean |

| @Repository | 使用在dao层类上用于实例化Bean |

| @Autowired | 使用在字段上上用于根据类型依赖注入 |

| @Qualifier | 结合@Autowired一起使用用于根据名称进行依赖注入 |

| @Resource | 相当于@Autowired + @Qualifier,按照名称进行注入 |

| @Value | 注入普通属性 |

| @Scope | 标注Bean的作用范围 |

| @PostConstruct | 使用在方法上标注方法是Bean的初始化方法 |

| @PreDestroy | 使用在方法上标注该方法是Bean的销毁方法 |

4.2、Bean的定义


我们之前都是使用 bean 的标签进行bean注入,但是实际开发中,我们一般都会使用注解!

  • 名称:@Component @Controller @Service @Repository

  • 类型:类注解

  • 位置:类定义上方

  • 作用:设置该类为spring管理的bean

  • 范例:

@Component

public class ClassName{}

  • 说明:

  • @Controller、@Service 、@Repository是@Component的衍生注解,功能同@Component

  • 相关属性

  • value(默认):定义bean的访问id


使用@Component标识UserDaoImpl需要Spring进行实例化

// 等价于

@Component(“userDao”)

public class UserDaoImpl implements UserDao {

@Override

public void save() {

System.out.println(“save running…”);

}

}

4.3、作用域注解


使用@Scope标注Bean的范围

  • 名称:@Scope

  • 类型:类注解

  • 位置:类定义上方

  • 作用:设置该类作为bean对应的scope属性

  • 范例:

@Scope

public class ClassName{}

  • 相关属性

  • value(默认):定义bean的作用域,默认为singleton

//@Scope(“prototype”)

@Scope(“singleton”)

public class UserDaoImpl implements UserDao{

}

4.4、衍生注解


@Component 有几个衍生注解,我们在 web 开发中,会按照mvc三层架构分层!

  • dao层: @Repository

  • service层: @Service

  • controller层:@Controller

这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean

@Repository

public class UserDao {

}

@Service

public class UserService {

}

@Controller

public class UserController {

}

写上这些注解,就相当于将这个类交给Spring管理装配了!

4.5、bean的生命周期


  • 名称:@PostConstruct@PreDestroy

  • 类型:方法注解

  • 位置:方法定义上方

  • 作用:设置该类作为bean对应的生命周期方法

  • 范例:

@PostConstruct

public void init() { System.out.println(“init…”); }

4.6、加载第三方资源


  • 名称:@Bean

  • 类型:方法注解

  • 位置:方法定义上方

  • 作用:设置该方法的返回值作为spring管理的bean

  • 范例:

@Bean(“dataSource”)

public DruidDataSource createDataSource() { return ……; }

  • 说明:

  • 因为第三方bean无法在其源码上进行修改,使用@Bean解决第三方bean的引入问题

  • 该注解用于替代XML配置中的静态工厂与实例工厂创建bean,不区分方法是否为静态或非静态

  • @Bean所在的类必须被spring扫描加载,否则该注解无法生效

  • 相关属性

  • value(默认):定义bean的访问id

4.7、bean的非引用类型属性注入


  • 名称:@Value

  • 类型:属性注解、方法注解

  • 位置:属性定义上方,方法定义上方

  • 作用:设置对应属性的值或对方法进行传参

  • 范例:

@Value("${jdbc.username}")

private String username;

  • 说明:

  • value值仅支持非引用类型数据,赋值时对方法的所有参数全部赋值

  • value值支持读取properties文件中的属性值,通过类属性将properties中数据传入类中

  • @value注解如果添加在属性上方,可以省略set方法(set方法的目的是为属性赋值)

  • 相关属性

  • value(默认):定义对应的属性值或参数值

@Component(“userDao”)

public class UserDaoImpl implements UserDao {

@Value(“注入普通数据”)

private String str;

@Value("${jdbc.driver}")

private String driver;

@Override

public void save() {

System.out.println(“save running…”);

}

}

4.8、bean的引用类型属性注入


  • 名称:@Autowired@Qualifier

  • 类型:属性注解、方法注解

  • 位置:属性定义上方,方法定义上方

  • 作用:设置对应属性的对象或对方法进行引用类型传参

  • 范例:

@Autowired(required = false)

@Qualifier(“userDao”)

private UserDao userDao;

  • 说明:

  • @Autowired默认按类型装配,指定@Qualifier后可以指定自动装配的bean的id

  • 相关属性

  • required:定义该属性是否允许为null


自动装配注解感觉视频没有讲解到位,这里引用狂神的案例来进行记录,当然此部分是为了加深理解,也可直接跳过4.6

具体视频讲解:Bean的自动装配


4.6、Bean的自动装配


  • 自动装配是Spring满足bean依赖的一种方式

  • Spring 会在上下文中自动寻找,并自动给 bean 装配属性!

在Spring中有三种装配的方式

  1. 在xml中显示的配置

  2. 在java中显示配置

  3. 隐式的自动装配bean【重要】下面主要记录第三种

4.6.1、测试环境搭建

  1. 新建两个实体类,Cat、Dog 都有一个叫的方法

public class Cat {

public void shout(){

System.out.println(“喵~”);

}

}

public class Dog {

public void shout(){

System.out.println(“汪~”);

}

}

  1. 新建一个人类,人类含有狗、猫两个变量

public class People {

private Cat cat;

private Dog dog;

private String name;

public Cat getCat() {

return cat;

}

public void setCat(Cat cat) {

this.cat = cat;

}

public Dog getDog() {

return dog;

}

public void setDog(Dog dog) {

this.dog = dog;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Override

public String toString() {

return “People{” +

“cat=” + cat +

“, dog=” + dog +

“, name=’” + name + ‘’’ +

‘}’;

}

}

  1. 编写Spring核心配置文件

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns=“http://www.springframework.org/schema/beans”

xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=“http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”>

  1. 测试类测试

public class Mytest {

@Test

public void test01(){

ApplicationContext context = new ClassPathXmlApplicationContext(“applicationContext.xml”);

People people = (People) context.getBean(“people”);

people.getDog().shout();//汪~

people.getCat().shout();//喵~

}

}

4.6.2、byName自动装配

  • autowire="byName"(按名称自动装配)

  • 由于在手动配置xml过程中,常常发生字母缺漏和大小写等错误,而无法对其进行检查,使得开发效率降低,采用自动装配将避免这些错误,并且使配置简单化。

  1. 修改bean配置,增加一个属性 autowire="byName"
  1. 我们将 cat 的bean id 修改为 catXXX,如下
  1. 再次测试,报错

解释

当一个 bean 节点带有 autowire="byName"的属性时。

  1. 将查找其类中所有的 set 方法名,例如 set Cat,获得将 set 去掉并且首字母小写的字符串,即 cat。

  2. 去Spring容器中寻找是否有此字符串名称 id 的对象,例如去找 cat

  3. 如果有,就取出注入;如果没有,就报空指针异常

4.6.3、byType自动装配

  • autowire="byType" (按类型自动装配)

  • 使用 autowire="byType" 首先需要保证:同一类型的对象,在Spring容器中唯一(也就是bean中class属性必须只有一个)。如果不唯一,则报错

测试:

  1. 将people的bean配置修改一下:autowire="byType"
  1. 测试,正常输出

  2. 再注册一个 cat 的bean 对象!

  1. 测试,报错

  2. 删掉cat2,将cat的bean的id属性该掉

  1. 测试,无报错

解释

  • 按照类型自动装配不需要管bean的id属性,只要保证bean的class属性唯一即可

4.6.4、总结

小结:

  • byName 的时候,需要保证所有的 bean 的 id 唯一,并且这个 bean 需要和自动注入的属性的 set 方法的值一致!

Spring框架技术总结(一),如何才能更容易拿到大厂Offer相关推荐

  1. Android开发技术总结!如何才能更容易拿到大厂Offer?值得收藏!

    我,来自大山. 我,不甘平凡. 笔者80后,出生在江西一个偏远的山村.虽然出生时已经不是那个温饱都是问题的年代,但是也谈不上有个幸福的童年.家里很穷.幼儿园并没有读,因为家里觉得花那个钱没有必要,小学 ...

  2. 真牛!如何才能更容易拿到大厂Offer?挥泪整理面经

    前言 我今年38岁,失业前是南方二线城市某知名互联网公司的部门技术主管,婚姻幸福,膝下有一儿一女,组成一个好字,房子车子:有一辆十几万的汽车,一套月供八千的房子,妻子全职在家带娃,家里的一切开销全部指 ...

  3. hashmap扩容过程,如何才能更容易拿到大厂Offer?挥泪整理面经

    一.背景介绍 从实用角度梳理一篇能够帮大家快速扫盲的CMake基础教程,也是对我目前负责项目的一次学习总结.既然选择从项目实用性考虑,下面的讲解内容可能并不一定完整,更多的是符合项目目前使用到的一些特 ...

  4. 如何才能更容易拿到大厂Offer?从理论到实践!

    高并发架构 消息队列 搜索引擎 缓存 分库分表 读写分离 设计高并发系统 高并发架构部分内容 缓存: Redis高可用: 高并发系统设计: 分布式系统 分布式业务系统,就是把原来用 Java 开发的一 ...

  5. 腾讯T2亲自讲解!如何才能更容易拿到大厂Offer?年薪50W

    其实不是Android不行了,而是你跟不上了 我的很多读者都在反馈说,现在一个岗位可以收到的简历数,是前几年的几倍.我们必须承认,僧多粥少就是 Android 行业的现状,别说初中级工程师,就是高级工 ...

  6. 腾讯T3大牛总结!如何才能更容易拿到大厂Offer

    前言 Redis作为基于键值对的NoSQL数据库,具有高性能.丰富的数据结构.持久化.高可用.分布式等特性,同时Redis本身非常稳定,已经得到业界的广泛认可和使用.因此,作为一个Java开发者,掌握 ...

  7. spring 框架技术

    springfreemarkerhibernatebeanmvcvelocity 注: 本文为作者本人辛苦劳作结果,耗费了大量时间,请低调引用,引用注明出处.谢谢!感谢夏昕 文档说明 (at) 为em ...

  8. Spring框架技术总结(一),java编程自学教程

    格式: 常量注入 Bean注入 注意点:这里的值是一个引用,ref 数组注入 红楼梦 西游记 水浒传 三国演义 List注入 听歌 看木鱼水心 敲代码 玩游戏哈哈 Map注入 set注入 英雄联盟 刀 ...

  9. Spring框架技术总结(一)

    ✍SSM框架之行

最新文章

  1. Nginx + Tomcat 负载均衡集群配置
  2. 【数理知识】《随机过程》方兆本老师-目录
  3. 概要设计 重要性_儿童户外游乐场应如何设计-户外游乐设备厂家【经验分享】...
  4. 使用Prometheus+Grafana 监控MySQL/MONGODB
  5. FileUpload路径
  6. [C++STL]常用拷贝和替换算法
  7. 如何提高linux的时钟精度,Linux时钟精度提高有什么办法?
  8. jQuery 基础事件
  9. “编程能力差,90%输在了数学上!”骨灰级开发:其实你们都是瞎努力!
  10. python编程是啥-学了Python编程之后,同是新手的他们做了什么?
  11. micropython文件上传软件_4-3 为NodeMCU刷入MicroPython固件
  12. 开启、关闭数据库mysql
  13. python数据挖掘实验报告_数据挖掘实习报告
  14. 网络电视接口 php,【小白教程】智能电视背后这些接口怎么用?
  15. 职场生涯的3个步骤--法、儒、道家的管理哲学
  16. Ubuntu状态栏显示网速,内存利用率等信息——sysmonitor
  17. 弹出visual studio 实时调试器解决
  18. oracle. 设置参数 sid,更改Oracle数据库的SID
  19. python实现词云且更换背景图片
  20. 运维派 企业面试题45 创建10个 用户 ; ping探测主机是否在线

热门文章

  1. 终于知道为什么程序员都喜欢删库跑路了
  2. 如何建设前端物料平台?
  3. 第10章 51PC实物制作
  4. 单目SLAM在移动端应用的实现难点有哪些?
  5. 老用户WAU以及老用户周活跃度
  6. background-attachment: fixed/scroll
  7. 2016年各大安卓渠道最新商务合作通讯录
  8. (P5)模型运行及结果可视化(netCDF)
  9. 外贸B2B网站如何做Google SEO获取流量?
  10. python在电力系统中的应用_python电力