依赖

创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承
先来看 parent 的基本功能有哪些?

  1. 定义了 Java 编译版本为 1.8 。
  2. 使用 UTF-8 格式编码。
  3. 继承自 spring-boot-dependencies ,这个里边定义了依赖的版本,也正是因为继承了这个依
    赖,所以我们在写依赖时才不需要写版本号。
  4. 执行打包操作的配置。
  5. 自动化的资源过滤。
  6. 自动化的插件配置。
  7. 针对 application.properties 和 application.yml 的资源过滤,包括通过 profile 定义的不同环境的
    配置文件,例如 application-dev.properties 和 application-dev.yml。

如果Spring Boot 项目要继承自公司内部的 parent ,这个时候该怎么办呢?
一个简单的办法就是我们自行定义 dependencyManagement 节点,然后在里边定义好版本号,再接下来在引用依赖时也就不用写版本号了

<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.8.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

注解

编写启动类 控制器

编写启动类:【项目的入口。】
,在Maven 工程的java 目录下创建项目的包,包里创建一个App 类,
代码如下:

@EnableAutoConfiguration
public class App {public static void main (String [] args) {SpringApplication.run (App.class , args );
}
}

可以直接使用组合注解@Spring BootApplication 来代替@EnableAutoConfiguration 和@ComponentScan ,
@EnableAutoConfiguration 注解表示开启自动化配直。由于项目中添加了spring-boot-starterweb依赖, 因此在开启了自动化配置之后会自动进行Spring 和SpringMVC 的配置。
在Java 项目的main 方法中,通过SpringApplication 中的m 方法启动项目。第一个参数传入App.class ,告诉Spring 哪个是主要组件。第二个参数是运行时输入的其他参数。
接下来创建一个SpringMVC 中的控制器-HelloController,代码如下:

@RestController
public class HelloController {@GetMapping (”/hello ")
public String hello () {return "hello spring boot !”;
}}

在控制器中提供了一个"/hello "接口,此时需要配置包扫描才能将HelloController 注册到SpringMVC 容器中,因此在App 类上面再添加一个注解@ComponentScan 进行包扫描
也可以直接使用组合注解@SpringBootApplication 来代替@EnableAutoConfiguration 和@ComponentScan ,

启动项目有三种不同的方式

  1. 使用Maven 命令启动
    可以直接使用mvn 命令启动项目,命令如下
    mvn springboot : run
    启动成功后,在浏览器地址栏输入“http://localhost: 8080/hello ”即可看到运行结果
  2. 直接运行main 方法
    3… 打包启动
    当然, Spring Boot 应用也可以直接打成jar 包运行。在生产环境中,也可以通过这样的方式来
    运行一个Spring Boot 应用。要将S pring Boot 打成jar 包运行,首先需要添加一个plugin 到pom.xml
    文件中,代码如下:
<build>
<plugins>
<plugin>
<groupid>org.springframework.boot</groupid>
<artifactid>spring-boot-maven-plugin</artifactid>
</plugin>
</plugins>
</build>

然后运行mvn 命令进行打包,代码如下
mvn package
打包完成后,在项目的target 目录下会生成一个jar 文件,通过java -jar 命令直接启动这个jar文件,
即java -jar xxxx.jar

组合注解configuration

@Spring BootApplication 实际上是一个组合注解,定义如下:

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan ( excludeFilters= {@Filter(type = FilterType . CUSTOM , classes= TypeExcludeFilter .class),
@Filter (type = FilterType.CUSTOM , classes =AutoConfigurationExcludeFilter . class) } )
public @interface Spring BootApplication {}

第一个@SpringBootConfiguration 的定义如下:
@Configuration
public @interface SpringBootConfiguration {}

原来就是一个@Configuration ,所以@Spring BootConfiguration 的功能就是表明这是一个配置
类,开发者可以在这个类中配置Bean。从这个角度来讲,这个类所扮演的角色有点类似于Spring中ApplicationContext.xml 文件的角色。

注解@EnableAutoConfiguration 表示开启自动化配置。Spring Boot 中的自动化配置是非侵入式的,在任意时刻,开发者都可以使用自定义配置代替自动化配置中的某一个配置。
③注解@ComponentScan 完成包扫描,也是Spring 中的功能。由于@ComponentScan 注解默认扫描的类都位于当前类所在包的下面, 因此建议在实际项目开发中把项目启动类放在根包中
开发者可以创建一个新的类专门用来配置Bean ,这样便于配置的管理。这个类只需要加上@Configuration 注解即可
@Configuration
public class Myconfig{}
项目启动类中的@ComponentScan 注解,除了扫描@Service , @Repository 、@Component 、@Controller 和@RestController 等之外,也会扫描@Configuration 注解的类。

@ConfigurationProperties注解可以将对程序内变量的赋值提取到配置文件中。
如:

@Setter
@Getter
@ConfigurationProperties(prefix = "file")
public class FileStorageProperties {private String uploadDir;
}

修改application.yml:
file:
upload-dir: ./assets
启动类加上:
@EnableConfigurationProperties({BlogProperties.class, FileStorageProperties.class})

基于@Transactional注解的声明式事务管理

Spring的声明式事务管理,是通过AOP技术实现的事务管理,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。 声明式事务管理最大的优点是不需要通过编程的方式管理事务,因而不需要在业务逻辑代码中掺杂事务处理的代码,只需相关的事务规则声明,便可以将事务规则应用到业务逻辑中。通常情况下,在开发中使用声明式事务处理,不仅因为其简单,更主要是因为这样使得纯业务代码不被污染,极大地方便了后期的代码维护。
和编程式事务管理相比,声明式事务管理唯一不足的地方是,最细粒度只能作用到方法级别,无法做到像编程式事务管理那样可以作用到代码块级别。但即便有这样的需求,也可以通过变通的方法进行解决,例如,可以将需要进行事务处理的代码块独立为方法。Spring的声明式事务管理可以通过两种方式来实现,一是基于XML的方式,一是基于@Transactional注解的方式。 @Transactional注解可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有public方法都将具有该类型的事务属性,同时,也可以在方法级别使用该注解来覆盖类级别的定义。虽然@Transactional注解可以作用于接口、接口方法、类以及类方法上,但是Spring小组建议不要在接口或者接口方法上使用该注解,因为只有在使用基于接口的代理时它才会生效。可以使用@Transactional注解的属性定制事务行为,具体属性如表1.3所示。


具体实现步骤如下。

  1. 修改配置类 在配置类中,使用@EnableTransactionManagement注解开启声明式事务的支持,同时为数据源添加事务管理器。

如何在事务处理中捕获异常
声明式事务处理的流程是: (1)Spring根据配置完成事务定义,设置事务属性。 (2)执行开发者的代码逻辑。 (3)如果开发者的代码产生异常(如主键重复)并且满足事务回滚的配置条件,则事务回滚;否则,事务提交。
现在的问题是,如果开发者在代码逻辑中加入了try…catch…语句,Spring还能不能在声明式事务处理中正常得到事务回滚的异常信息?答案是不能。这是因为默认情况下,Spring只在发生未被捕获的RuntimeExcetpion时才回滚事务。如何在事务处理中捕获异常呢?具体修改如下
(1)修改@Transactional注解。 需要将TestServiceImpl类中的@Transactional注解修改为: @Transactional(rollbackFor={Exception.class})
//rollbackFor指定回滚生效的异常类,多个异常类逗号分隔;
//noRollbackFor指定回滚失效的异常类
(2)在catch语句中添加“throw new RuntimeException();”语句。 注意:在实际工程应用中,在catch语句中添加“TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();”语句即可。也就是说,不需要在@Transaction注解中添加rollbackFor属性。

JDBC配置

spring jdbc的配置

xml配置:
Spring JDBC的XML配置主要使用Spring JDBC模块的core和dataSource包进行Spring数据库编程。core包是JDBC的核心功能包,包括常用的JdbcTemplate类;dataSource包是访问数据源的工具类包。使用Spring JDBC操作数据库,需要对其进行配置。XML配置文件示例代码如下:

<!-配置数据源-->
<bean id="dataSource"class="org.springframe.jdbc. datasource. DriverManager">
<!--MySOL数据库驱动-->
<property name="driverClassName" value="com. mysql.jdbc. Driver"/>
<!-连接数据库的URL-->
<property name="url" value="jdbc: mysql://localhost:3306/springtest?characterEncoding utf8"/>
<!--连接数据库的用户名-->
<property name="username" value="root"/>
<!--连接数据库的密码-->
<property name="password" value="root"/>
<!--配置JDBC模板-->
<bean id="jdbcTemplate" class="org. springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"ref="dataSource"/></bean>

java配置:

package config;import org. springframework. beans. factory. annotation. Value;import org. springframework. context. annotation. Bean;import org. springframework. context. annotation. ComponentScan;import org. springframework. context. annotation. Configuration;import org. springframework. context. annotation. PropertySource;import org. springframework. jdbc. core. JdbcTemplate;import org. springframework. jdbc. datasource. DriverManagerDataSource;Configuration/通过该注解来表明该类是一个 Spring的配置,相当于一个xm文件
@ ComponentScan(basePackages="dao")/配置扫描包PropertySourcevalue=(value={"classpath:jdbc. properties"}, ignoreResourceNotFound=true)
//配置多个属性文件时value={"classpath jdbc.properties","xx","xxx”}public class SpringJDBCConfig@Value("s{jdbc.url}")
//注入属性文件jdbc. properties中的jdbc.urprivate String jdbcUrl;@Value("$ {jdbc. driverClassName}")private String jdbcDriverClassName;@Value("$ {jdbc. username}")private String jdbcUsername;
@Value("sjdbc. password}")private String jdbcPassword;
/**
*配置数据源
**/@Beanpublic DriverManagerDataSource dataSource(){DriverManagerDataSource myDataSource =new DriverManagerDataSource()
//数据库驱动myDataSource. setDriverClassName(jdbcDriverClassName);
//相应驱动的jdbcUrlmyDataSource. setUrl( jdbcUr1)
//数据库的用户名myDataSource. setUsername(jdbcUsername);
//数据库的密码myDataSource. setPassword( jdbcUsername);return myDataSource;
/**
配置 JdbcTemplate
**/
@Bean( value="jdbcTemplate")public JdbcTemplate getJdbcTemplate(){return new JdbcTemplate( dataSource());
}
}

上述Java配置示例中,需要事先在classpath目录(如应用的src目录)下创建属性文件,代码如下:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springtest?characterEncoding=utf8
jdbc.username=root
jdbc.password=root

另外,在数据访问层(如Dao类)使用jdbcTemplate时,也需要将jdbcTemplate注入对应的Bean中,代码如下:

@Repositorypublic class TestDaoImpl implements TestDao{@Autowired
//使用配置文件中的JDBC模板private JdbcTemplate jdbcTemplate;
}

获取JDBC模板后,要知道如何使用它,需要了解JdbcTemplate类的常用方法——update()和query()方法。
· public int update(String sql,Object args[])
该方法可以对数据表进行增加、修改、删除等操作。使用args[]设置SQL语句中的参数,并返回更新的行数。代码如下: String insertSql=“insert into user values(null,?,?)”;
Object param1[]={“chenheng1”,“男”};
jdbcTemplate.update(sql,param1);
· public List query(String sql,RowMapper rowMapper,Object args[])
该方法可以对数据表进行查询操作。rowMapper将结果集映射到用户自定义的类中**(前提是自定义类中的属性要与数据表的字段对应**)。代码如下:

String select = "select * from user";
RowMapper<MyUser>rowMapper = new BeanPropertyRowMapper<MyUser>(MyUser.class);
List<MyUser>list = jdbcTemplate.query(sql,rowMapper,null);

数据库配置的属性文件jdbc.properties,具体内容如下:

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/springtest?characterEncoding=utf8
jdbc.username=root
jdbc.password=root

在应用的src目录下,创建config包,并在该包中创建配置类SpringJDBCConfig。在该配置类中使用@PropertySource注解读取属性文件jdbc.properties,并配置数据源和JdbcTemplate,具体代码如下:

package config;import org.springframework.beans.factory.annotation. Value;import org.springframework.context.annotation.Bean;import org. springframework.context.annotation. ComponentScan;import org.springframework.context.annotation. Configuration;import org.springframework.context.annotation. PropertySource;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.datasource. DriverManagerDataSource;
// Configuration通过该注解来表明该类是一个 Spring的配置,相当于一个xml文件ComponentScan(basePackages={"dao","service"})//配置扫描包PropertySource(value{"classpath:jdbc. properties"}, ignoreResourceNo=true)public class SpringJDBCConfigvalue("$ {jdbc. url}")
//注入属性文件jdbc. properties中的jdbc.urlprivate String jdbcUrl;value("s{jdb. driverClassName}")private String jdbcDriverClassName;@Value("$ {jdbc. username)")private String jdbcUsername;@Value(" ${jdbc. password}")private String jdbcPassword;
//配置数据源
/@Beanpublic DriverManagerDataSource dataSource(){DriverManager DataSource myDataSource new DriverManagerDataSource();
//数据库驱动myDataSource. setDriverClassName( jdbcDriverClassName);
/相应驱动的jdbcUr11myDataSource. setUrl( jdbcUr1)
//数据库的用户名myDataSource. setUsername( jdbcUsername);
//数据库的密码myDataSource. setPassword( jdbcUsername)return myDataSource;
}
//配置 JdbcTemplate@Bean(value="jdbcTemplate")public JdbcTemplate getJdbcTemplate(){return new JdbcTemplate( dataSource())
}

src下创建entity包,创建实体类MyUser"

package entity;public class Myuser{private Integer uiaiprivate String uname;private string usexi
省略set和get方法public String toString(){return " [uid=" I uid +" uname ="+ uname+, usex "= usex +"]"}}

数据访问层
src目录下,创建dao包,在该包中创建数据访问接口TestDao和接口实现类TestDaoImpl。在实现类TestDaoImpl中使用@Repository注解标注此类为数据访问层,并使用@Autowired注解依赖注入JdbcTemplate。

package dao;inport java. util. List;inport entity. MyUser;public interface TestDao{public int update(String sql, Object[] param);public List <MyUser> query(String sql, Object[] param);}

TestDaompl.java:

package dao;import java. util. List;import org. springframework.beans.factory.annotation. Autowired;import org. springframework.jdbc.core. BeanPropertyRowMapper;import org. springframework.jdbc.core.JdbcTemplate;import org. springframework.jdbc.core.RowMapper;import org. springframework.stereotype.Repository;import entity. MyUser;@Repositorypublic class TestDaoImpl implements TestDao{@Autowired
//使用配置类中的JDBC模板private JdbcTemplate jdbcTemplate;
/**更新方法,包括添加、修改、删除param为sql中的参数,如通配符?
**/@Overridepublic int update(String sql, Object[ param){return jdbcTemplate. update(sql, param);
}/**查询方法param为sql中的参数,如通配符?
**/@Overridepublic List< MyUser> query(String sql, Object[] param){RowMapper<MyUser> rowMapper= new BeanPropertyRowMapper< MyUser>(MyUser.class);return jdbcTemplate. query(sql, rowMapper);
}
}

创建业务逻辑层
src目录下,创建service包,在该包中创建数据访问接口TestService和接口实现类TestServiceImpl。在实现类TestServiceImpl中使用**@Service注解标注此类为业务逻辑层,并使用@Autowired注解依赖注入TestDao。**
TestService.java

package service;
public interfave TestService{public void testJDBC();
}

TestServiceImpl.java

package service;import java. util.List;import org. springframework. beans. factory. annotation. Autowired;import org. springframework. stereotype. Service;import dao. TestDao;import entity. MyUser;Servicepublic class TestServiceImpl implements TestServiceAutowiredpublic TestDao testDao;Overridepublic void testJDBC(){String insertSql="insert into user values(null,?,?)";
//数组 param的值与 insertSql语句中的?一一对应Object param1[]={"chenheng11","男"};Object param2[]={"chenheng22","女"};Object param3[] ={"chenheng3", ""}Object param4[] {"chenheng4", ""}
//添加用户testDao. update(insertSql, param1);testDao. update(insertSql, param2);testDao. update(insertSql, param3);testDao. update(insertSql, param4);
//查询用户String selectSql ="select from user";
List< MyUser>list= testDao. query( selectSql,null);for(MyUser mu: list){System. out. println(mu);
}
}

解决配置不生效

@ImportResource

@ImportResource:导入Spring的配置文件,让配置文件生效。
示例:
boot.service.HelloService:

package boot.service;public class HelloService {}

放在resource下的bean.xml:

<?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"><bean id="helloService" class="boot.service.HelloService"></bean>
</beans>

BootApplicationTests.java

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.SpringRunner;@RunWith(SpringRunner.class)
@SpringBootTest
public class BootApplicationTests {@AutowiredApplicationContext ioc;@Testpublic void testConfig() {boolean b = ioc.containsBean("helloService");System.out.print(b);}}

运行结果:

试图通过添加一个Spring的配置文件bean.xml来把HelloService注入进去。
运行测试类结果:false
结果表明IoC容器中并不包含HelloService,即:配置文件bean.xml没有生效
解决方式
方式一: 主程序中进行配置@ImportResouece注解

@ImportResource(locations = {"classpath:bean.xml"}) // 通过此配置是
bean.xml生效
@SpringBootApplication
public class BootApplication {public static void main(String[] args) {//应用启动起来
SpringApplication.run(BootApplication.class, args);
}
}

先运行主程序,然后再启动刚刚的测试类,现在输出:

可以看到已经是true

方法二:通过配置类实现,这种方式也是Spring Boot推荐的
@Configuration

public class MyConfig {// 将方法的返回值添加到容器之中,并且容器中这个组件的id就是方法名@Bean
public HelloService helloService(){System.out.print("通过@Bean给容器添加组件了..");
return new HelloService();
}
}

注意,这个config文件一定要在与测试类一样的包下,否则不能成功添加组件,导致输出仍然是false
文件目录:

(其中MyConfig为配置类,鼠标所在位置为测试类)
@Configuration标注这是一个配置类
通过@Bean注解,将方法的返回值添加到容器之中,并且容器中这个组件的id就是方法名
2. 把主程序类中@ImportResource()配置注释掉
3. 测试成功,添加了HelloService()组件

Web 容器配置

1.在Spring Boot 项目中,可以内置Tomcat 、Jetty 、Undertow 、Netty 等容器。当开发者添加了
spring-boot-starter-web 依赖之后, 默认会使用Tomcat 作为Web 容器。如果需要对Tomcat 做进一步的配置,可以在application.properties 中进行配置,代ti马如下:
server .port=8081
server . error .path=/error
server . servlet .session.timeout=30m
server . servlet.context- path=/chapter02
se rver . tomcat.uri encodi ng=utf- 8
server .tomcat.max-threads=500
server . tomcat.basedir=/home/sang/tmp
server.port Web 容器的端口号。
error.path 当项目出错时跳转去的页面。
session.timeout :session 失效时间, 30m 表示30 分钟,如果不写单位, 默认单位是秒。
由于Tomcat 中配直session 过期时间以分钟为单位, 因此这里单位如果是秒的话,该时间会被转换为一个不超过所配直秒数的最大分钟数, 例如这里配置了119 ,默认单位为秒,则实际session 过期时间为1 分钟。
• context-path 表示项目名称, 不配置时,默认为/。如果配置了,就要在访问路径中加上配直的路径。
• uri-encoding 表示配直Tomcat 请求编码。
• max - threads 表示Tomcat 最大线程数。
• basedir 是一个存放Tomcat 运行日志和临时文件的目录,若不配,则默认使用系统的临时目录。

2.HTTPS 配置
由于HTTPS 具有良好的安全性,在开发中得到了越来越广泛的应用, 像微信公众号、小程序等的开发都要使用HTTPS 来完成。对于个人开发者而言, 一个HTTPS 证书的价格还是有点贵,国内有一些云服务器厂商提供免费的H TTPS 证书, 一个账号可以申请数个。不过在jdk 中提供了一个Java 数字证书管理工具keytool , 在\jdk\bin 目录下,通过这个工具可以自己生成一个数字证书,
生成命令如下:
• keytool -genkey -alias tomcathttps - keyalg RSA-keysize 2048 - keystore sang. p12-validity 365
• -genkey 表示要创建一个新的密钥。
• -alias 表示keystore 的别名。
• -keya lg 表示使用的加密算法是RSA , 一种非对称加密算法.
• -keysize 表示密钥的长度.
• -keystore 表示生成的密钥存放位直。
• -validity 表示密钥的有效时间,单位为天

springboot项目中的注解 启动项目的方式 解决spring的bean.xml配置不生效 spring的基础JDBC配置相关推荐

  1. maven项目中处理tomcat启动不成功的解决方法

    在做淘淘商城是搭载好框架时,在测试的时候tomcat启动不成功,也不显示报错,Starting ProtocolHandler ["http-bio-8080"] 后台不出来这句话 ...

  2. 【SpringBoot】Spring项目中value注解,@Value不能够读取到配置文件的值,无法成功注入值的问题汇总及解决

    Spring项目中value注解,@Value不能够读取到配置文件的值,无法成功注入值的问题汇总及解决 @Value注解 常规用法示例 我们都知道通过@Value()注解可以取到我们配置文件的内容,之 ...

  3. springboot项目中pom文件parent报错的解决方法

    springboot项目中pom文件parent报错的解决方法 1:首先配置maven环境 2:修改maven的settings.xml文件 3:用编辑器修改settings文件 4:设置Eclips ...

  4. H5项目中通过iframe引入语音导览解决微信jsapi关于同一级域名二级域名跨域问题解决方案

    H5项目中通过iframe引入语音导览解决微信jsapi关于同一级域名二级域名跨域问题解决方案 在项目的入口文件App.js中 <iframe src="https://www.abc ...

  5. vue php跨域,Vue 项目中遇到的跨域问题及解决方法(后台php)

    问题描述 前端 vue 框架,后台 php,百度跨域问题后台加这段代码 header("Access-Control-Allow-Origin: *"); 加了之后报这个错: Th ...

  6. ssm把图片保存到项目中_项目中的图片跨域问题解决方式

    现象 首先,在生产环境中,由于进行编辑图片时,将图片回显到ReactCrop组件中进行可裁剪编辑,然而回显时,需要将图片转化为base64的格式或者blob对象, 此时需要将图片次绘制成canvas进 ...

  7. Angular2项目中浏览器拦截弹出窗口的解决方法

    Angular2项目中浏览器拦截弹出窗口的解决方法 为什么把项目是Angular2的放到了前边? 因为正常也页面网上已经很多解决方案.请自行百度或Google. 现象:当window.open为用户触 ...

  8. eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法

    eclipse项目中关于导入的项目里提示HttpServletRequest 不能引用的解决办法  当使用eclipse导入外部的web工程时,有时会提示HttpServletRequest, Ser ...

  9. TIA博途WINCC中英文切换的项目中摄氏度符号无法正常显示的解决办法

    TIA博途WINCC中英文切换的项目中摄氏度符号无法正常显示的解决办法 问题概述 组态了中英文切换的多语言项目,有些应用场合在数值显示时需要标注单位,例如:摄氏度符号°C. 常见的问题是切换显示语言为 ...

最新文章

  1. 给django视图类添加装饰器
  2. 栈 - 关于出栈序列,判断合法的出栈序列
  3. 为什么 MySQL的常用引擎都默认使用 B+ 树作为索引?
  4. All men are brothers【并查集+数学】
  5. 大一的一些心得与近况
  6. 谁为“上班玩耍”买单
  7. 嵌入式数据库Sqlite移植教程-转
  8. DT大数据梦工厂 第55,56讲
  9. 星环大数据助银行数据仓库全面升级
  10. Web 方向学习路线
  11. 腾讯笔试题——五笔编码
  12. vue3.0 axios 图片上传
  13. hive中order by、distribute by、sort by和cluster by的区别和联系
  14. MapReduce明星搜索指数统计,找出人气王
  15. ali arthas 火焰图_手把手教你看懂Chrome火焰图!(调试性能必备)
  16. Python——解一元二次方程
  17. HCIA--基础网络实验---HTTP服务搭建
  18. 前端面试题集锦——前端综合问题
  19. hutool导出excel大数据_HuTool工具类使用之Excel文档的导入导出
  20. 【求职】陌陌C++方向面经

热门文章

  1. stanford course
  2. 计算机错误2 找不到指定文件,无法执行目录中的文件 错误2系统找不到指定文件怎么办?...
  3. linux生成数字命令,Linux下随机生成密码的命令
  4. python面对对象汉诺塔_如何使用python实现的汉诺塔的小程序
  5. 给定一个投资组合的收益序列,以沪深300作为参照,分解该投资组合的α和β
  6. 期末考试前的预习,科目:化工设备与反应器(5)
  7. 7. webpack 初步熟悉使用
  8. 做科研没人带,发不了文章怎么办?
  9. 对比学习(Contrastive Learning)相关进展梳理
  10. 从 Word2Vec 到 BERT