文章目录
前言
一、简单项目的创建
二、常用依赖的引入
三、常用配置的编写
四、逆向工程的使用
五、常用类的编写
1. 自定义常量类
2. 自定义注解类
3. 自定义枚举类
4. 自定义异常类
5. 通用响应对象
6. 简单接口编写
7. 常用的工具类
六、网盘下载
前言
关于怎么搭建 SpringBoot 项目,我相信大部分开发者自己都能搭建好,至于我为什么还要写,主要是我自己觉得搭一个项目挺麻烦的,想搞一个基础的模子,以后学习其它的技术就可以直接引用这个模子,写下笔记便于日后回顾和修改,顺便发下博客。
注意:以下项目创建方式以及项目内容完全是根据个人喜好而搭建的,仅具借鉴意义~~
一、简单项目的创建
这里项目的创建,我使用的工具是 IDEA,还有一个很重要的事情就是管理项目,这里我建议项目最好有一个集中的地方管理,所以我创建了一个 my-project
的文件夹专门用于管理自己的项目。
打开 IDEA
工具,点击 File
-> New
-> Project...
创建一个项目
选择 Sring Initializr
(如果你用的是 IDEA 社区版的可能没有这个选项),完善以下资料,然后点击 Next
选择 SpringBoot 版本,点击 Finish
然后一个最简单的 spring-boot 项目就建好了,如果你只是为了创建一个 spring-boot 项目的话,到这里就可以结束了,以下内容很多东西都是按照我个人意愿去编写的,并不具有通用性,但是仍可借鉴使用~~
简单完善一下目录结构
com.duojiala.mikeboot
common ------------------------------------公共定义类
config ----------------------------------------配置类
controller -----------------------------------控制层
dao -------------------------------------------dao层
domain
annotations --------------------------注解类
bean -----------------------------------自定义类
dto --------------------------------------组装对象类
entity ----------------------------------实体类
enums ---------------------------------枚举类
req --------------------------------------请求体
resp ------------------------------------响应体
exceptions ------------------------------自定义异常类
service ------------------------------------服务层
imp -------------------------------------实现类
utils -------------------------------------------工具类
PS:以上并非标准,项目结构你可以根据自己的需求或者喜好去设计
二、常用依赖的引入
之前在创建项目的时候其实是可以选择添加依赖的,但是我没有去做,所以如果你按照我上述步骤创建项目的话,pom.xml
文件中只有两个依赖,如下:
接下来就是引入一些常用的依赖,供大家参考:
SpringBoot 项目的启动依赖:如果没有添加该依赖,启动类一运行会直接停止
< dependency>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-starter-webartifactId >
< scope> compilescope >
dependency >
lombok 依赖插件:方便实体类 bean 快速生成 get
set
方法,从而不用手动添加
< dependency>
< groupId> org.projectlombokgroupId >
< artifactId> lombokartifactId >
dependency >
commons-lang3是Apache的Jakarta commons工程下具有一系列公共基础类,Lang组件主要是一些工具类,涉及到数组工具类,字符串工具类,字符工具类,数学方面,时间日期工具类,异常,事件等工具类。
< dependency>
< groupId> org.apache.commonsgroupId >
< artifactId> commons-lang3artifactId >
< version> 3.10version >
dependency >
通用Mapper依赖:是对底层 sql 进行了抽象封装,不需要考虑 sql 怎么写,只需要按照逻辑思维,遵循 tkmybatis 的语法即可实现数据库操作。
< dependency>
< groupId> tk.mybatisgroupId >
< artifactId> mapper-spring-boot-starterartifactId >
< version> 2.1.5version >
dependency >
JDBC驱动包:用 JDBC 连接 MySQL 数据库时必须使用该 jar 包,能够与数据库建立连接、发送 SQL 语句以及处理结果。
< dependency>
< groupId> mysqlgroupId >
< artifactId> mysql-connector-javaartifactId >
dependency >
校验参数:就是一个规范,所有实现类必须是线程安全的,提供一些注解,但并不提供实现,可以根据需求去写一些有校验功能的注解。
< dependency>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-starter-validationartifactId >
dependency >
Fastjson:是一个 Java 语言编写的高性能功能完善的 JSON 库。它采用一种 “假定有序快速匹配” 的算法,把 JSON Parse 的性能提升到极致,是目前 Java 语言中最快的 JSON 库。Fastjson 接口简单易用,已经呗广泛使用在序列化、协议交互、Web 输出、Android 客户端等多种应用场景。
< dependency>
< groupId> com.alibabagroupId >
< artifactId> fastjsonartifactId >
< version> 1.2.51version >
dependency >
Spring web依赖
< dependency>
< groupId> org.springframeworkgroupId >
< artifactId> spring-webartifactId >
dependency >
mybatis 自动配置依赖
< dependency>
< groupId> org.mybatis.spring.bootgroupId >
< artifactId> mybatis-spring-boot-autoconfigureartifactId >
< version> 2.1.1version >
dependency >
表格依赖
< dependency>
< groupId> com.alibabagroupId >
< artifactId> easyexcelartifactId >
< version> 2.2.7version >
dependency >
< dependency>
< groupId> org.apache.poigroupId >
< artifactId> poi-ooxmlartifactId >
< version> 3.17version >
dependency >
添加 mybatis 逆向工程插件,generator 的配置文件这里我放在 /resources/generator
目录下
< plugin>
< groupId> org.mybatis.generatorgroupId >
< artifactId> mybatis-generator-maven-pluginartifactId >
< version> 1.3.6version >
< configuration>
< configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml
configurationFile >
< overwrite> trueoverwrite >
< verbose> trueverbose >
configuration >
< dependencies>
< dependency>
< groupId> mysqlgroupId >
< artifactId> mysql-connector-javaartifactId >
< version> 8.0.13version >
dependency >
< dependency>
< groupId> tk.mybatisgroupId >
< artifactId> mapperartifactId >
< version> 4.1.5version >
dependency >
dependencies >
plugin >
最后我 pom.xml
文件的配置如下:
< project xmlns = " http://maven.apache.org/POM/4.0.0" xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" >
< modelVersion> 4.0.0modelVersion >
< parent>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-starter-parentartifactId >
< version> 2.1.4.RELEASEversion >
< relativePath/>
parent >
< groupId> com.duojialagroupId >
< artifactId> mike-bootartifactId >
< version> 0.0.1-SNAPSHOTversion >
< name> mike-bootname >
< description> Demo project for Spring Bootdescription >
< properties>
< java.version> 1.8java.version >
properties >
< dependencies>
< dependency>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-starterartifactId >
dependency >
< dependency>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-starter-webartifactId >
< scope> compilescope >
dependency >
< dependency>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-starter-testartifactId >
< scope> testscope >
< exclusions>
< exclusion>
< groupId> org.junit.vintagegroupId >
< artifactId> junit-vintage-engineartifactId >
exclusion >
exclusions >
dependency >
< dependency>
< groupId> org.apache.commonsgroupId >
< artifactId> commons-lang3artifactId >
< version> 3.10version >
dependency >
< dependency>
< groupId> org.projectlombokgroupId >
< artifactId> lombokartifactId >
dependency >
< dependency>
< groupId> tk.mybatisgroupId >
< artifactId> mapper-spring-boot-starterartifactId >
< version> 2.1.5version >
dependency >
< dependency>
< groupId> mysqlgroupId >
< artifactId> mysql-connector-javaartifactId >
dependency >
< dependency>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-starter-validationartifactId >
dependency >
< dependency>
< groupId> com.alibabagroupId >
< artifactId> fastjsonartifactId >
< version> 1.2.51version >
dependency >
< dependency>
< groupId> org.springframeworkgroupId >
< artifactId> spring-webartifactId >
dependency >
< dependency>
< groupId> org.mybatis.spring.bootgroupId >
< artifactId> mybatis-spring-boot-autoconfigureartifactId >
< version> 2.1.1version >
dependency >
< dependency>
< groupId> com.alibabagroupId >
< artifactId> easyexcelartifactId >
< version> 2.2.7version >
dependency >
< dependency>
< groupId> org.apache.poigroupId >
< artifactId> poi-ooxmlartifactId >
< version> 3.17version >
dependency >
dependencies >
< build>
< plugins>
< plugin>
< groupId> org.springframework.bootgroupId >
< artifactId> spring-boot-maven-pluginartifactId >
plugin >
< plugin>
< groupId> org.mybatis.generatorgroupId >
< artifactId> mybatis-generator-maven-pluginartifactId >
< version> 1.3.6version >
< configuration>
< configurationFile>
${basedir}/src/main/resources/generator/generatorConfig.xml
configurationFile >
< overwrite> trueoverwrite >
< verbose> trueverbose >
configuration >
< dependencies>
< dependency>
< groupId> mysqlgroupId >
< artifactId> mysql-connector-javaartifactId >
< version> 8.0.13version >
dependency >
< dependency>
< groupId> tk.mybatisgroupId >
< artifactId> mapperartifactId >
< version> 4.1.5version >
dependency >
dependencies >
plugin >
plugins >
build >
project >
三、常用配置的编写
这里自动创建的项目,配置文件默认是 properties
的文件,这里我改用成 yml
格式的(仅仅是个人习惯的问题)
application.yml
常用配置的编写:
server :
port : 8868
servlet :
context-path : /mike
spring :
application :
name : mike- boot
datasource :
url : jdbc: mysql: //127.0.0.1: 3306/mike? characterEncoding=UTF- 8&useSSL=false&serverTimezone=GMT%2B8
hikari :
username : 'root'
password : 'root'
driver-class-name : 'com.mysql.cj.jdbc.Driver'
mybatis :
configuration :
map-underscore-to-camel-case : true
log-impl : org.apache.ibatis.logging.stdout.StdOutImpl
四、逆向工程的使用
之前在常用依赖引入中有引入 mybatis 逆向工程的插件,这里主要就是去编写逆向工程的一些配置文件,以及使用
首先需要在 resources
目录下创建文件夹 com/duojiala/mikeboot/dao
目录(要和你 dao 目录相一致),如果你用 IDEA 创建的话,切记不可直接 com.duojiala.mikeboot.dao
这样创建,因为这样创建的文件夹只是一个名字叫做 com.duojiala.mikeboot.dao
的文件夹,并非多层目录,比如:
用 IDEA 要一个一个创建
在创建一个 generator
的文件夹,该文件夹下面加上两个配置文件 config.properties
和 generatorConfig.xml
,做完以上步骤之后大概是这样的
config.properties
中配置编写:
jdbc.driverClass=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc : mysql : //127.0.0.1: 3306/mike?useSSL=false&characterEncoding=UTF-8&nullCatalogMeansCurrent=true&serverTimezone=GMT%2B8
jdbc.user=root
jdbc.password=root
javaModelTargetProject=src/main/java
javaModelTargetPackage=com.duojiala.mikeboot.domain.entity
mapperXMLTargetProject=src/main/resources
mapperXMLTargetPackage=com.duojiala.mikeboot.dao
mapperTargetProject=src/main/java
mapperTargetPackage=com.duojiala.mikeboot.dao
这里你要换成你自己的数据库,以及对应的映射关系要以你自己的项目去修改。
generatorConfig.xml
中配置编写:
DOCTYPE generatorConfiguration
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
< generatorConfiguration>
< properties resource = " generator/config.properties" />
< context id = " Mysql" targetRuntime = " MyBatis3Simple" defaultModelType = " flat" >
< property name = " beginningDelimiter" value = " `" />
< property name = " endingDelimiter" value = " `" />
< plugin type = " tk.mybatis.mapper.generator.MapperPlugin" >
< property name = " mappers" value = " tk.mybatis.mapper.common.Mapper" />
< property name = " caseSensitive" value = " true" />
plugin >
< jdbcConnection driverClass = " ${jdbc.driverClass}"
connectionURL = " ${jdbc.url}"
userId = " ${jdbc.user}"
password = " ${jdbc.password}" >
jdbcConnection >
< javaModelGenerator targetPackage = " ${javaModelTargetPackage}"
targetProject = " ${javaModelTargetProject}" />
< sqlMapGenerator targetPackage = " ${mapperXMLTargetPackage}"
targetProject = " ${mapperXMLTargetProject}" />
< javaClientGenerator targetPackage = " ${mapperTargetPackage}"
targetProject = " ${mapperTargetProject}"
type = " XMLMAPPER" />
< table tableName = " %" >
< generatedKey column = " id" sqlStatement = " JDBC" />
table >
context >
generatorConfiguration >
现在我连接的是我本地数据,该库里面只有一张 user 表
现在通过 mybatis 逆向工程生成 user 表对应的 实体类 和 mapper 文件,按如下步骤
执行完可以看见项目中已经生成了所配置数据库中所有表的映射实体类和 Mapper 文件
如果你想要针对某一张表生成对应的映射实体类和 Mapper 文件,可将 generatorConfig.xml
文件中 标签中的 %
改成表明,例如:只生成 user 表的
< table tableName = " user" >
< generatedKey column = " id" sqlStatement = " JDBC" />
table >
同时,还需要在启动类上加上 @MapperScan
的注解扫描 mapper:@MapperScan(basePackages = {"com.duojiala.mikeboot.dao"})
五、常用类的编写
1. 自定义常量类
位于 common
目录下,创建示例类 DefineConstants.java
public class DefineConstants {
public static final String DEF_NUMBER = "0" ;
public static final String DEF_MONEY = "0.00" ;
}
2. 自定义注解类
位于 annotations
目录下,创建示例类 Describe.java
@Target ( { ElementType . METHOD, ElementType . FIELD, ElementType . ANNOTATION_TYPE, ElementType . CONSTRUCTOR, ElementType . PARAMETER, ElementType . TYPE_USE} )
@Retention ( RetentionPolicy . RUNTIME)
@Documented
public @interface Describe {
String desc ( ) ;
}
3. 自定义枚举类
位于 enums
目录下,创建性别枚举类 GenderEnum.java
@Getter
@AllArgsConstructor
public enum GenderEnum {
WOMAN ( 0 , "女" ) ,
MAN ( 1 , "男" )
;
private final int type;
private final String desc;
public static GenderEnum getGenderEnum ( int type) {
return Stream . of ( values ( ) ) . filter ( value -> value. getType ( ) == type) . findFirst ( ) . orElse ( null ) ;
}
public static String getDescByType ( int type) {
GenderEnum genderEnum = getGenderEnum ( type) ;
if ( genderEnum== null ) return null ;
return genderEnum. getDesc ( ) ;
}
}
位于 enums
目录下,再创建一个自定义异常枚举 ExceptionEnum.java
@AllArgsConstructor
@Getter
@ToString
public enum ExceptionEnum {
BAD_REQUEST ( 301 , "错误的请求" ) ,
NOT_FIND ( 302 , "未找到对应数据" )
;
private final int code;
private final String msg;
}
4. 自定义异常类
位于 exceptions
目录下,创建自定义公共异常 CommonException.java
public class CommonException extends RuntimeException {
private ExceptionEnum exceptionEnum;
public CommonException ( ExceptionEnum exceptionEnum) {
super ( exceptionEnum. getMsg ( ) ) ;
this . exceptionEnum = exceptionEnum;
}
public void setExceptionEnum ( ExceptionEnum exceptionEnum) {
this . exceptionEnum = exceptionEnum;
}
public ExceptionEnum getExceptionEnum ( ) {
return exceptionEnum;
}
@Override
public String getMessage ( ) {
return this . exceptionEnum. getMsg ( ) ;
}
}
5. 通用响应对象
位于 dto
目录下,创建一个通用的响应对象 ResponseBean.java
@NoArgsConstructor
@AllArgsConstructor
@Data
@Builder
@Slf4j
public class ResponseBean {
private int code;
private String msg;
private Object data;
public static int SUCCESS_CODE = 200 ;
public static int ERROR_CODE = 300 ;
public static String SUCCESS_MSG = "Success" ;
public static String ERROR_MSG = "Error" ;
public static ResponseBean success ( ) {
return ResponseBean . builder ( )
. code ( SUCCESS_CODE)
. msg ( SUCCESS_MSG)
. build ( ) ;
}
public static ResponseBean success ( Object data) {
return ResponseBean . builder ( )
. code ( SUCCESS_CODE)
. msg ( SUCCESS_MSG)
. data ( data)
. build ( ) ;
}
public static ResponseBean error ( ) {
return ResponseBean . builder ( )
. code ( ERROR_CODE)
. msg ( ERROR_MSG)
. build ( ) ;
}
public static ResponseBean error ( int code, String msg) {
return ResponseBean . builder ( )
. code ( code)
. msg ( msg)
. build ( ) ;
}
}
6. 简单接口编写
请求体类,放在 req
目录下,创建 IdReq.java
@Data
@NoArgsConstructor
@AllArgsConstructor
public class IdReq {
private String id;
}
响应体类,放在 resp
目录下,创建 UserInfoResp.java
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class UserInfoResp {
private String id;
private String name;
private String birthday;
private String gender;
}
Controller 类,位于 controller
目录下,创建 UserController.java
@Slf4j
@RestController
@RequestMapping ( value = "/user" )
@RequiredArgsConstructor ( onConstructor = @__ ( @Autowired ) )
@CrossOrigin ( origins = "*" , methods = { RequestMethod . POST, RequestMethod . GET} )
public class UserController {
private final UserService userService;
@PostMapping ( value = "/query-user-info" )
public ResponseBean queryUserInfo ( @RequestBody @Validated IdReq req) {
return ResponseBean . success ( userService. queryUserInfo ( req) ) ;
}
}
Service 类,位于 service
目录下,创建 UserService.java
public interface UserService {
UserInfoResp queryUserInfo ( IdReq req) ;
}
Service 实现类,位于 impl
目录下,创建 UserServiceImpl.java
@Slf4j
@Service
@RequiredArgsConstructor ( onConstructor = @__ ( @Autowired ) )
public class UserServiceImpl implements UserService {
private final UserMapper userMapper;
@Override
public UserInfoResp queryUserInfo ( IdReq req) {
User user = userMapper. selectByPrimaryKey ( req. getId ( ) ) ;
if ( user == null ) {
throw new CommonException ( ExceptionEnum . NOT_FIND) ;
}
return UserInfoResp . builder ( )
. id ( user. getId ( ) . toString ( ) )
. name ( user. getName ( ) )
. birthday ( user. getBirthday ( ) )
. gender ( GenderEnum . getDescByType ( user. getGender ( ) ) )
. build ( ) ;
}
}
一个根据 id 查询用户的简单方法就写完了,postman 测试正常
7. 常用的工具类
位于 utils
目录下,这里我复制了些我常用的工具类
CommonUtil ---------------------------------------- 通用工具类
DateUtil ---------------------------------------------- 时间工具类
EnumUtil -------------------------------------------- 枚举工具类
PageHelperUtil ------------------------------------ 分页工具类
PureNetUtil ----------------------------------------- 网络访问工具类
StringTool ------------------------------------------- 字符串工具类
六、网盘下载
以下是我搭建这个基础 SpringBoot 项目的网盘下载链接:
链接:百度网盘 提取码:w7yo
你可能感兴趣的:(入门教程,java)
【Python】一文详细介绍 py格式 文件
高斯小哥
Python基础【高质量合集】 python 新手入门 学习
【Python】一文详细介绍py格式文件个人主页:高斯小哥高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程希望得到您的订阅和支持~创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)文章目录一、py格式文件简介二、如何创建和编辑py格式文件三、如何运行py
华为OD机试 - 单向链表中间节点(Java & JS & Python & C & C++)
华为OD题库
华为od 链表 java
须知哈喽,本题库完全免费,收费是为了防止被爬,大家订阅专栏后可以私信联系退款。感谢支持文章目录须知题目描述输出描述解析代码题目描述给定一个单链表L,请编写程序输出L中间结点保存的数据。如果有两个中间结点,则输出第二个中间结点保存的数据。例如:给定L为1→7→5,则输出应该为7;给定L为1→2→3→4,则输出应该为3;输入描述每个输入包含1个测试用例。每个测试用例:第一行给出链表首结点的地址、结点总
学习JavaEE的日子 Day32 线程池
A 北枝
学习JavaEE 学习 java-ee java 线程池
Day32线程池1.引入一个线程完成一项任务所需时间为:创建线程时间-Time1线程中执行任务的时间-Time2销毁线程时间-Time32.为什么需要线程池(重要)线程池技术正是关注如何缩短或调整Time1和Time3的时间,从而提高程序的性能。项目中可以把Time1,T3分别安排在项目的启动和结束的时间段或者一些空闲的时间段线程池不仅调整Time1,Time3产生的时间段,而且它还显著减少了创建
请简单介绍一下Shiro框架是什么?Shiro在Java安全领域的主要作用是什么?Shiro主要提供了哪些安全功能?
AaronWang94
shiro java java 安全 开发语言
请简单介绍一下Shiro框架是什么?Shiro框架是一个强大且灵活的开源安全框架,为Java应用程序提供了全面的安全解决方案。它主要用于身份验证、授权、加密和会话管理等功能,可以轻松地集成到任何JavaWeb应用程序中,并提供了易于理解和使用的API,使开发人员能够快速实现安全特性。Shiro的核心组件包括Subject、SecurityManager和Realms。Subject代表了当前与应用
通俗易懂:什么是Java虚拟机(JVM)?它的主要作用是什么?
大龄下岗程序员
mysql java mysql spring
Java虚拟机(JavaVirtualMachine,JVM)是一种软件实现的抽象计算机,它负责执行Java字节码(Bytecode)。Java程序并不是直接在物理计算机上运行,而是先由Java编译器将源代码编译成与平台无关的字节码,然后由JVM负责读取字节码并在实际硬件架构上运行。JVM的主要作用包括以下几个方面:1.跨平台性-JVM是Java语言“一次编写,到处运行”(WriteOnce,Ru
3、JavaWeb-Ajax/Axios-前端工程化-Element
所谓远行Misnearch
# JavaWeb 前端 ajax elementui java 前端框架
P34Ajax介绍Ajax:AsynchroousJavaScriptAndXML,异步的JS和XMLJS网页动作,XML一种标记语言,存储数据,作用:数据交换:通过Ajax给服务器发送请求,并获取服务器响应的数据异步交互:在不重新加载整个页面的情况下,与服务器交换数据并实现更新部分网页的技术,例如:搜索联想、用户名是否可用的校验等等。同步与异步:同步:服务器在处理中客户端要处于等待状态,输入域名
枚举使用笔记
万变不离其宗_8
项目笔记 笔记
1.java枚举怎么放在方法上面的注释里面/***保存*@paramuserId用户id*@paramtype见枚举{@linkcom.common.enums.TypeEnum}*@return*/voidsave(LonguserId,Stringtype);
Python dict字符串转json对象,小数精度丢失问题
朝如青丝 暮成雪
json python
一前言JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,dict是Python的一种数据格式。本篇介绍一个float数据转换时精度丢失的案例。二问题描述importjsontest_str1='{"π":3.1415926535897932384626433832795028841971}'test_str2='{"value":10.00000}'print
java实体中返回前端的double类型四舍五入(格式化)
婲落ヽ紅顏誶
java
根据业务,需要通过后端给前端返回部分double类型的数值,一般需要保留两位小数,使用jackson转换对象packagecom.ruoyi.common.core.config;importcom.fasterxml.jackson.core.JsonGenerator;importcom.fasterxml.jackson.databind.JsonSerializer;importcom.f
Java中HashMap底层数据结构及主要参数?
山间漫步人生路
java 数据结构 开发语言
在Java中,HashMap的底层数据结构主要基于数组和链表,同时在Java8及以后的版本中,当链表长度超过一定阈值时,链表会转换为红黑树来优化性能。这种结构结合了数组和链表的优点,既提供了快速的随机访问,又允许动态地扩展存储桶的大小。HashMap的主要参数包括:初始容量(InitialCapacity):这是HashMap在创建时设定的桶数组的大小。默认值为16。这个值可以根据预计存储的键值对
Java学习笔记01
.wsy.
日常 java 学习 笔记
1.1Java简介Java的前身是Oak,詹姆斯·高斯林是java之父。1.2Java体系Java是一种与平台无关的语言,其源代码可以被编译成一种结构中立的中间文件(.class,字节码文件)于Java虚拟机上运行。1.2.3专有名词JDK提供编译、运行Java程序所需要的种种工具及资源。JRE是运行Java所依赖的环境的集合。JVM是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功
Java回溯知识点(含面试大厂题和源码)
一成码农
java 面试 开发语言
回溯算法是一种通过遍历所有可能的候选解来寻找所有解的算法,如果候选解被确认不是一个解(或至少不是最后一个解),回溯算法会通过在上一步进行一些变化来丢弃这个解,即“回溯”并尝试另一个候选解。回溯法通常用递归方法来实现,在解决排列、组合、选择问题时非常有效。回溯算法的核心要点:路径:也就是已经做出的选择。选择列表:也就是你当前可以做的选择。结束条件:也就是到达决策树底层,无法再做出选择的条件。回溯算法
Azkaban各种类型的Job编写
__元昊__
一、概述原生的Azkaban支持的plugin类型有以下这些:command:Linuxshell命令行任务gobblin:通用数据采集工具hadoopJava:运行hadoopMR任务java:原生java任务hive:支持执行hiveSQLpig:pig脚本任务spark:spark任务hdfsToTeradata:把数据从hdfs导入TeradatateradataToHdfs:把数据从Te
java基础相关面试题详细总结
。。。。。96
java 开发语言
1.Java中的数据类型有哪些?答:Java中的数据类型包括基本数据类型(如整数、浮点数、字符等)和引用数据类型(如类、接口、数组等)。2.什么是面向对象编程(OOP)?答:面向对象编程是一种编程范式,它将数据和对数据的操作封装在一起,形成对象。通过对象之间的交互来实现程序的功能。3.解释类和对象的关系。答:类是对象的抽象描述,而对象是类的具体实例。一个类可以创建多个对象,每个对象都具有类中定义的
javascript 日期转换为时间戳,时间戳转换为日期的函数
cdcdhj
javascript学习日记 javascript 开发语言 ecmascript
日期转化为时间戳,主要用valueOf()来进行转化为毫秒时间戳,getTime()IOS系统无法解析转换,所以都有valueOf()letgetTimestampOrDate=function(timestamp){lettimeStamp='';constregex=/^\d{4}(-|\/)\d{2}(-|\/)\d{2}$/;constregex2=/^\d{4}(-|\/)\d{2}(-
Java面试题:解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用,Java中的多线程是如何实现的,Java垃圾回收机制的基本原理,并讨论常见的垃圾回收算法
杰哥在此
Java系列 java jvm 算法 面试
Java内存模型与多线程的深入探讨在Java的世界里,内存模型和多线程是开发者必须掌握的核心知识点。它们不仅关系到程序的性能和稳定性,还直接影响到系统的可扩展性和可靠性。下面,我将通过三个面试题,带领大家深入理解Java内存模型、多线程以及并发编程的相关原理和实践。面试题一:请解释JVM的内存结构,并描述堆、栈、方法区在内存结构中的角色和作用。关注点:JVM内存结构的基本组成堆、栈、方法区的功能和
【Python】成功解决ModuleNotFoundError: No module named ‘torchinfo‘
高斯小哥
BUG解决方案合集 python pytorch 新手入门 学习 debug
【Python】成功解决ModuleNotFoundError:Nomodulenamed‘torchinfo’个人主页:高斯小哥高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程希望得到您的订阅和支持~创作高质量博文(平均质量分92+),分享更多关于深度学习、PyTorch、Python领域的优质内容!(希望得到您的关注~)文
COMP315 JavaScript Cloud Computing for E Commerce
zhuyu0206girl
javascript 开发语言 ecmascript
Assignment1:Javascript1IntroductionAcommontaskincloudcomputingisdatacleaning,whichistheprocessoftakinganinitialdatasetthatmaycontainerroneousorincompletedata,andremovingorfixingthoseelementsbeforeform
JSON与AJAX:网页交互的利器
入冉心
json ajax 前端
在现代Web开发中,JSON(JavaScriptObjectNotation)和AJAX(AsynchronousJavaScriptandXML)是两项不可或缺的技术。它们共同为网页提供了动态、实时的数据交互能力,为用户带来了更加流畅和丰富的体验。本文将详细介绍JSON和AJAX的概念、原理,并通过代码示例展示它们在实际开发中的应用。一、JSON:轻量级的数据交换格式JSON是一种轻量级的数据
程序员开发技术整理
laizhixue
学习 前端框架
前端技术:vue-前端框架element-前端框架bootstrap-前端框架echarts-图标组件C#后端技术:webservice:soap架构:简单的通信协议,用于服务通信ORM框架:对象关系映射,如EF:对象实体模型,是ado.net中的应用技术soap服务通讯:xml通讯ado.net:OAuth2:登录授权认证:Token认证:JWT:jsonwebtokenJava后端技术:便捷工
javascript的数据类型及转换
田小田txt
一、JavaScript数据类型:共有string,number,boolean,object,function五种数据类型;其中Object,Date,Array为对象型;2个不包含任何值的数据类型:null,undefined。二、Typeof查看数据类型:typeof"John"//返回stringtypeof3.14//返回numbertypeofNaN//返回numbertypeoffa
java线程之Lock的使用
dimdark
目标:大致介绍一下java.util.concurrent.locks包下的类,接口及其常用方法1.Lock接口Lock接口使用Lock接口的最佳模式:publicvoidmethod()throwInterruptedException{try{lock.lock();//lock.lockUninterruptibly();}finally{lock.unlock();}}用户必须手动释放Lo
第六届蓝桥杯大赛软件赛省赛Java 大学C组题解
爱跑步的程序员~
刷题 蓝桥杯 省赛
文章目录A隔行变色思路解题方法复杂度CodeB立方尾不变思路解题方法复杂度CodeC无穷分数思路解题方法复杂度CodeD奇妙的数字思路解题方法复杂度CodeE移动距离思路解题方法复杂度CodeF垒骰子思路解题方法复杂度CodeA隔行变色思路这是一个简单的计数问题。我们需要找出21到50之间的奇数数量。奇数行将被染成蓝色,偶数行将被染成白色。解题方法我们可以使用一个for循环从21遍历到50,然后使
Java学习笔记04:Java_数组
JasonYangQ
Java java
文章目录1.数组1.1数组介绍1.2数组的定义格式1.2.1第一种格式1.2.2第二种格式1.3数组的动态初始化1.3.1什么是动态初始化1.3.2动态初始化格式1.3.3动态初始化格式详解1.4数组元素访问1.4.1什么是索引1.4.2访问数组元素格式1.4.3示例代码1.5内存分配1.5.1内存概述1.5.2java中的内存分配1.9数组的静态初始化1.9.1什么是静态初始化1.9.2静态初始
【设计模式】Java 设计模式之桥接模式(Bridge)
新手村长
Java 设计模式 设计模式 java 桥接模式
桥接模式(BridgePattern)是结构型设计模式的一种,它主要解决的是抽象部分与实现部分的解耦问题,使得两者可以独立变化。这种类型的设计模式属于结构型模式,因为该模式涉及如何组合接口和它们的实现。将抽象部分与实现部分分离,使它们都可以独立地变化。一、桥接模式概述桥接模式的主要思想是将抽象与实现进行解耦,使得二者可以独立进行变化。在桥接模式中,抽象部分和实现部分被分离出来,抽象部分定义了一个抽
基于SSM+Vue企业销售培训系统 企业人才培训系统 企业课程培训管理系统 企业文化培训班系统Java
计算机程序老哥
作者主页:计算机毕业设计老哥有问题可以主页问我一、开发介绍1.1开发环境开发语言:Java数据库:MySQL系统架构:B/S后端:SSM(Spring+SpringMVC+Mybatis)前端:Vue工具:IDEA或者Eclipse,JDK1.8,Maven二、系统介绍2.1图片展示注册登录页面:登陆.png前端页面功能:首页、培训班、在线学习、企业文化、交流论坛、试卷列表、系统公告、留言反馈、个
java selenium 元素点击不了
马达马达达
selenium 测试工具
最近做了一个页面爬取,很有意思被机缘巧合下解决了。这个元素很奇怪,用xpath可以定位元素,但是就是click()不了。试过了网上搜的一些办法://尝试一WebElementa_tag=driver.findElement(By.xpath("xxx"));a_tag.click();//点击不了,卡住//尝试二WebDriverWaitwait=newWebDriverWait(driver,1
【Java初阶(三)】方法的使用
PU-YUHAN
Java从入门到精通 java 开发语言 递归 方法
❣博主主页:33的博客❣▶文章专栏分类:Java从入门到精通◀我的代码仓库:33的代码仓库目录1.前言2.方法的概念2.1方法定义2.2实参和形参的关系3.方法的重载3.1方法重载的概念4.递归4.1递归的概念4.2递归过程分析4.3递归练习5.总结1.前言在前面的学习中,我们已经学习了Java的部分知识,包括数据类型与变量,运算符,分支与循环以及输入和输出这些基础知识,我们继续对Java的学习进
解析XML文件的几种方式?
人生在勤,不索何获
xml
在Java中解析XML文件可以通过多种方式完成,其中最常用的有DOM(DocumentObjectModel)、SAX(SimpleAPIforXML)和StAX(StreamingAPIforXML)。每种方式有其特点和适用场景。1.DOM解析DOM解析是一种将整个XML文档加载到内存中,构造成一个树形结构,然后你可以很方便地访问任何数据节点的方法。这种方法适用于需要频繁读写操作的场景。impo
javascript实现SM2加密解密
人生在勤,不索何获
javascript 前端 jquery
前提JavaWeb环境前端代码window.sm2=function(t){functioni(e){if(r[e])returnr[e].exports;varn=r[e]={i:e,l:!1,exports:{}};returnt[e].call(n.exports,n,n.exports,i),n.l=!0,n.exports}varr={};returni.m=t,i.c=r,i.d=fu
java封装继承多态等
麦田的设计者
java eclipse jvm c encapsulatopn
最近一段时间看了很多的视频却忘记总结了,现在只能想到什么写什么了,希望能起到一个回忆巩固的作用。
1、final关键字
译为:最终的
&
F5与集群的区别
bijian1013
weblogic 集群 F5
http请求配置不是通过集群,而是F5;集群是weblogic容器的,如果是ejb接口是通过集群。
F5同集群的差别,主要还是会话复制的问题,F5一把是分发http请求用的,因为http都是无状态的服务,无需关注会话问题,类似
LeetCode[Math] - #7 Reverse Integer
Cwind
java 题解 Math LeetCode Algorithm
原题链接:#7 Reverse Integer
要求:
按位反转输入的数字
例1: 输入 x = 123, 返回 321
例2: 输入 x = -123, 返回 -321
难度:简单
分析:
对于一般情况,首先保存输入数字的符号,然后每次取输入的末位(x%10)作为输出的高位(result = result*10 + x%10)即可。但
BufferedOutputStream
周凡杨
首先说一下这个大批量,是指有上千万的数据量。
例子:
有一张短信历史表,其数据有上千万条数据,要进行数据备份到文本文件,就是执行如下SQL然后将结果集写入到文件中!
select t.msisd
linux下模拟按键输入和鼠标
被触发
linux
查看/dev/input/eventX是什么类型的事件, cat /proc/bus/input/devices
设备有着自己特殊的按键键码,我需要将一些标准的按键,比如0-9,X-Z等模拟成标准按键,比如KEY_0,KEY-Z等,所以需要用到按键 模拟,具体方法就是操作/dev/input/event1文件,向它写入个input_event结构体就可以模拟按键的输入了。
linux/in
ContentProvider初体验
肆无忌惮_
ContentProvider
ContentProvider在安卓开发中非常重要。与Activity,Service,BroadcastReceiver并称安卓组件四大天王。
在android中的作用是用来对外共享数据。因为安卓程序的数据库文件存放在data/data/packagename里面,这里面的文件默认都是私有的,别的程序无法访问。
如果QQ游戏想访问手机QQ的帐号信息一键登录,那么就需要使用内容提供者COnte
关于Spring MVC项目(maven)中通过fileupload上传文件
843977358
mybatis spring mvc 修改头像 上传文件 upload
Spring MVC 中通过fileupload上传文件,其中项目使用maven管理。
1.上传文件首先需要的是导入相关支持jar包:commons-fileupload.jar,commons-io.jar
因为我是用的maven管理项目,所以要在pom文件中配置(每个人的jar包位置根据实际情况定)
<!-- 文件上传 start by zhangyd-c --&g
使用svnkit api,纯java操作svn,实现svn提交,更新等操作
aigo
svnkit
原文:http://blog.csdn.net/hardwin/article/details/7963318
import java.io.File;
import org.apache.log4j.Logger;
import org.tmatesoft.svn.core.SVNCommitInfo;
import org.tmateso
对比浏览器,casperjs,httpclient的Header信息
alleni123
爬虫 crawler header
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
{
String type=req.getParameter("type");
Enumeration es=re
java.io操作 DataInputStream和DataOutputStream基本数据流
百合不是茶
java 流
1,java中如果不保存整个对象,只保存类中的属性,那么我们可以使用本篇文章中的方法,如果要保存整个对象 先将类实例化 后面的文章将详细写到
2,DataInputStream 是java.io包中一个数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
车辆保险理赔案例
bijian1013
车险
理赔案例:
一货运车,运输公司为车辆购买了机动车商业险和交强险,也买了安全生产责任险,运输一车烟花爆竹,在行驶途中发生爆炸,出现车毁、货损、司机亡、炸死一路人、炸毁一间民宅等惨剧,针对这几种情况,该如何赔付。
赔付建议和方案:
客户所买交强险在这里不起作用,因为交强险的赔付前提是:“机动车发生道路交通意外事故”;
如果是交通意外事故引发的爆炸,则优先适用交强险条款进行赔付,不足的部分由商业
学习Spring必学的Java基础知识(5)—注解
bijian1013
java spring
文章来源:http://www.iteye.com/topic/1123823,整理在我的博客有两个目的:一个是原文确实很不错,通俗易懂,督促自已将博主的这一系列关于Spring文章都学完;另一个原因是为免原文被博主删除,在此记录,方便以后查找阅读。
有必要对
【Struts2一】Struts2 Hello World
bit1129
Hello world
Struts2 Hello World应用的基本步骤
创建Struts2的Hello World应用,包括如下几步:
1.配置web.xml
2.创建Action
3.创建struts.xml,配置Action
4.启动web server,通过浏览器访问
配置web.xml
<?xml version="1.0" encoding="
【Avro二】Avro RPC框架
bit1129
rpc
1. Avro RPC简介 1.1. RPC
RPC逻辑上分为二层,一是传输层,负责网络通信;二是协议层,将数据按照一定协议格式打包和解包
从序列化方式来看,Apache Thrift 和Google的Protocol Buffers和Avro应该是属于同一个级别的框架,都能跨语言,性能优秀,数据精简,但是Avro的动态模式(不用生成代码,而且性能很好)这个特点让人非常喜欢,比较适合R
lua set get cookie
ronin47
lua cookie
lua:
local access_token = ngx.var.cookie_SGAccessToken
if access_token then
ngx.header["Set-Cookie"] = "SGAccessToken="..access_token.."; path=/;Max-Age=3000"
end
java-打印不大于N的质数
bylijinnan
java
public class PrimeNumber {
/**
* 寻找不大于N的质数
*/
public static void main(String[] args) {
int n=100;
PrimeNumber pn=new PrimeNumber();
pn.printPrimeNumber(n);
System.out.print
Spring源码学习-PropertyPlaceholderHelper
bylijinnan
java spring
今天在看Spring 3.0.0.RELEASE的源码,发现PropertyPlaceholderHelper的一个bug
当时觉得奇怪,上网一搜,果然是个bug,不过早就有人发现了,且已经修复:
详见:
http://forum.spring.io/forum/spring-projects/container/88107-propertyplaceholderhelper-bug
[逻辑与拓扑]布尔逻辑与拓扑结构的结合会产生什么?
comsci
拓扑
如果我们已经在一个工作流的节点中嵌入了可以进行逻辑推理的代码,那么成百上千个这样的节点如果组成一个拓扑网络,而这个网络是可以自动遍历的,非线性的拓扑计算模型和节点内部的布尔逻辑处理的结合,会产生什么样的结果呢?
是否可以形成一种新的模糊语言识别和处理模型呢? 大家有兴趣可以试试,用软件搞这些有个好处,就是花钱比较少,就算不成
ITEYE 都换百度推广了
cuisuqiang
Google AdSense 百度推广 广告 外快
以前ITEYE的广告都是谷歌的Google AdSense,现在都换成百度推广了。
为什么个人博客设置里面还是Google AdSense呢?
都知道Google AdSense不好申请,这在ITEYE上也不是讨论了一两天了,强烈建议ITEYE换掉Google AdSense。至少,用一个好申请的吧。
什么时候能从ITEYE上来点外快,哪怕少点
新浪微博技术架构分析
dalan_123
新浪微博 架构
新浪微博在短短一年时间内从零发展到五千万用户,我们的基层架构也发展了几个版本。第一版就是是非常快的,我们可以非常快的实现我们的模块。我们看一下技术特点,微博这个产品从架构上来分析,它需要解决的是发表和订阅的问题。我们第一版采用的是推的消息模式,假如说我们一个明星用户他有10万个粉丝,那就是说用户发表一条微博的时候,我们把这个微博消息攒成10万份,这样就是很简单了,第一版的架构实际上就是这两行字。第
玩转ARP攻击
dcj3sjt126com
r
我写这片文章只是想让你明白深刻理解某一协议的好处。高手免看。如果有人利用这片文章所做的一切事情,盖不负责。 网上关于ARP的资料已经很多了,就不用我都说了。 用某一位高手的话来说,“我们能做的事情很多,唯一受限制的是我们的创造力和想象力”。 ARP也是如此。 以下讨论的机子有 一个要攻击的机子:10.5.4.178 硬件地址:52:54:4C:98
PHP编码规范
dcj3sjt126com
编码规范
一、文件格式
1. 对于只含有 php 代码的文件,我们将在文件结尾处忽略掉 "?>" 。这是为了防止多余的空格或者其它字符影响到代码。例如:<?php$foo = 'foo';2. 缩进应该能够反映出代码的逻辑结果,尽量使用四个空格,禁止使用制表符TAB,因为这样能够保证有跨客户端编程器软件的灵活性。例
linux 脱机管理(nohup)
eksliang
linux nohup nohup
脱机管理 nohup
转载请出自出处:http://eksliang.iteye.com/blog/2166699
nohup可以让你在脱机或者注销系统后,还能够让工作继续进行。他的语法如下
nohup [命令与参数] --在终端机前台工作
nohup [命令与参数] & --在终端机后台工作
但是这个命令需要注意的是,nohup并不支持bash的内置命令,所
BusinessObjects Enterprise Java SDK
greemranqq
java BO SAP Crystal Reports
最近项目用到oracle_ADF 从SAP/BO 上调用 水晶报表,资料比较少,我做一个简单的分享,给和我一样的新手 提供更多的便利。
首先,我是尝试用JAVA JSP 去访问的。
官方API:http://devlibrary.businessobjects.com/BusinessObjectsxi/en/en/BOE_SDK/boesdk_ja
系统负载剧变下的管控策略
iamzhongyong
高并发
假如目前的系统有100台机器,能够支撑每天1亿的点击量(这个就简单比喻一下),然后系统流量剧变了要,我如何应对,系统有那些策略可以处理,这里总结了一下之前的一些做法。
1、水平扩展
这个最容易理解,加机器,这样的话对于系统刚刚开始的伸缩性设计要求比较高,能够非常灵活的添加机器,来应对流量的变化。
2、系统分组
假如系统服务的业务不同,有优先级高的,有优先级低的,那就让不同的业务调用提前分组
BitTorrent DHT 协议中文翻译
justjavac
bit
前言
做了一个磁力链接和BT种子的搜索引擎 {Magnet & Torrent},因此把 DHT 协议重新看了一遍。
BEP: 5Title: DHT ProtocolVersion: 3dec52cb3ae103ce22358e3894b31cad47a6f22bLast-Modified: Tue Apr 2 16:51:45 2013 -070
Ubuntu下Java环境的搭建
macroli
java 工作 ubuntu
配置命令:
$sudo apt-get install ubuntu-restricted-extras
再运行如下命令:
$sudo apt-get install sun-java6-jdk
待安装完毕后选择默认Java.
$sudo update- alternatives --config java
安装过程提示选择,输入“2”即可,然后按回车键确定。
js字符串转日期(兼容IE所有版本)
qiaolevip
TO Date String IE
/**
* 字符串转时间(yyyy-MM-dd HH:mm:ss)
* result (分钟)
*/
stringToDate : function(fDate){
var fullDate = fDate.split(" ")[0].split("-");
var fullTime = fDate.split("
【数据挖掘学习】关联规则算法Apriori的学习与SQL简单实现购物篮分析
superlxw1234
sql 数据挖掘 关联规则
关联规则挖掘用于寻找给定数据集中项之间的有趣的关联或相关关系。
关联规则揭示了数据项间的未知的依赖关系,根据所挖掘的关联关系,可以从一个数据对象的信息来推断另一个数据对象的信息。
例如购物篮分析。牛奶 ⇒ 面包 [支持度:3%,置信度:40%] 支持度3%:意味3%顾客同时购买牛奶和面包。 置信度40%:意味购买牛奶的顾客40%也购买面包。 规则的支持度和置信度是两个规则兴
Spring 5.0 的系统需求,期待你的反馈
wiselyman
spring
Spring 5.0将在2016年发布。Spring5.0将支持JDK 9。
Spring 5.0的特性计划还在工作中,请保持关注,所以作者希望从使用者得到关于Spring 5.0系统需求方面的反馈。