Yan 项目简介(Instruction)
项目已托管至Github,请前往https://github.com/micyo202/yan查看源码
注:最新基于SpringCloud的完整微服务架构体系已经逐步完成,查看详细内容请前往https://www.jianshu.com/p/a061effe4ae5
该项目是一整套整合 Dubbo+Zookeeper+SpringMVC+Spring+MyBatis 支持分布式 的高效率便捷开发RPC 框架,使开发人员更专注于业务,达到面向业务开发。 项目使用 Maven 构建,便于项目管理,可支持 Oracle、MySql 等主流数据库。 项目模块化分层明确,代码规范,便于后期维护等工作。 前端展示界面采用基于 Boostrap 实现的响应式布局,并集成了一系列的动画效果插件,整体界面简洁、美观大方并可优雅的与后台完成交互操作。 项目目标是为中小型企业打造全方位的J2EE企业级开发解决方案,提高工作效率。 该项目是yan-demo单节点项目的升级版 ,支持分布式 ,持续更新中,敬请期待...
近期更新内容
beta 1.0.0:项目整体改造,升级为RPC架构。(注:若想查看非RPC版请移步至https://gitee.com/micyo202/yan)
beta 0.1.0:模块优化,删除不必要的模块,优化代码(模块详情参考:三、项目结构)
beta 0.0.5:前端添加ECharts,便于图形化展示
beta 0.0.4:添加JMS(ActiveMQ)消息服务(目前仅测试方法,暂无业务流转,后期逐渐完善细化)
beta 0.0.3:添加Solr搜索引擎服务(基本的全文检索功能,可根据实际需求情况进行二次开发,后期本人再逐渐完善)
beta 0.0.2:优化整体代码、添加更多注释,结构更清晰、代码更易懂
beta 0.0.1:将原有yan-demo项目重构,保留原有功能,模块拆分、优化项目结构
项目所需工具及版本 *
zookeeper-3.4.11 http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.11
apache-activemq-5.15.2 http://activemq.apache.org/activemq-5152-release.html
solr-7.1.0 https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/7.1.0
一、项目开发环境&工具(Environment&Tools)
MacOS Sierra / Windows 7
MySql 5.7
JDK 1.8
CentOS 7
IntelliJ IDEA 2017.2.5 / Eclipse 4.6.1
Navicat Premium 11.1.12
Maven 3.3.9
Jetty 9.4.6.v20170531 / Tomcat 9.0.1
二、技术选型(Technology)
1.服务端技术(Server)
名称
版本号
网址
Spring Framework
4.3.13.RELEASE
http://projects.spring.io/spring-framework/
Shiro
1.4.0
http://shiro.apache.org
AspectJ
1.8.13
http://www.eclipse.org/aspectj/
MyBatis
3.4.5
http://www.mybatis.org/mybatis-3/zh/index.html
MyBatis Generator
1.3.5
http://www.mybatis.org/generator/index.html
PageHelper
5.1.2
http://git.oschina.net/free/Mybatis_PageHelper
Dubbo
2.6.0
http://dubbo.io
Solr
7.1.0
https://lucene.apache.org/solr/
ActiveMQ
5.15.2
http://activemq.apache.org
Druid
1.1.5
https://github.com/alibaba/druid
Jackson
2.9.2
https://github.com/FasterXML/jackson
Dom4j
1.6.1
http://www.dom4j.org
Ehcache
2.6.11
http://www.ehcache.org/
Logback
1.2.3
https://logback.qos.ch
Maven
3.3.9
http://maven.apache.org/
Zookeeper
3.4.11
https://www.apache.org/dyn/closer.cgi/zookeeper/
2.前端技术(Web)
名称
版本号
网址
angular
-
https://angularjs.org
awesome-bootstrap-checkbox
-
https://github.com/flatlogic/awesome-bootstrap-checkbox
bootstrap
3.3.7
http://www.bootcss.com
bootstrap-datetimepicker
-
http://www.bootcss.com/p/bootstrap-datetimepicker/
bootstrap-select
1.12.4
http://silviomoreto.github.io/bootstrap-select/
bootstrap-table
1.11.1
http://bootstrap-table.wenzhixin.net.cn/zh-cn/documentation/
bootstrapvalidator
0.5.3
https://github.com/nghuuphuoc/bootstrapvalidator/
ECharts
3.8.4
http://echarts.baidu.com
font-awesome
4.7.0
http://fontawesome.io/icons/
fontIconPicker
2.0.0
https://codeb.it/fonticonpicker/
fullPage
-
https://alvarotrigo.com/fullPage/
jquery-confirm
3.3.0
https://github.com/craftpip/jquery-confirm
malihu-custom-scrollbar-plugin
-
https://github.com/videoMonkey/malihu-custom-scrollbar-plugin
material-design-iconic-font
2.2.0
https://github.com/zavoloklom/material-design-iconic-font
waves
0.7.5
https://github.com/fians/Waves
zTree_v3
3.5.26
http://www.treejs.cn/v3/main.php#_zTreeInfo
BootstrapMenu
-
https://mobirise.com/bootstrap-menu
device
-
https://github.com/matthewhudson/device.js
jquery
3.2.1
http://jquery.com
jquery-cookie
-
https://github.com/carhartl/jquery-cookie
三、项目结构(Construction)
yan -- 根目录
├── yan-api -- 接口模块(提供核心接口方法)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.api -- 核心接口包
| | | | ├── jms -- 消息服务接口
| | | | ├── persistence -- 持久化接口
├── yan-common -- 公共模块
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.common -- 公共类包
| | | | ├── annotation -- 注解类
| | | | ├── aspect -- 切面类
| | | | ├── constant -- 常量定义类
| | | | ├── model -- 通用模型
| | | | ├── service -- 泛型对象服务
| | | | ├── spring -- spring扩展类
| | | | ├── support -- 基础支持类
├── yan-core -- 核心模块(提供核心方法)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.core -- 核心类包
| | | | ├── annotation -- 注解类
| | | | ├── aspect -- 切面类
| | | | ├── controller -- 控制器
| | | | ├── injector -- 注入类
| | | | ├── listener -- 消息消费者监听器
| | | | ├── shiro -- 安全认证类
├── yan-dao -- 数据库访问模块(该模块主要通过 mbg 插件生成相应的模型及接口映射)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.dao -- dao层包
| | | | ├── mapper -- 接口映射类
| | | | ├── model -- 数据库模型类
| | ├── resources -- 资源配置路径
| | | ├── database -- 数据库sql文件
| | | ├── mybatis -- sqlMap映射文件
| | | ├── properties -- 配置文件
├── yan-plugins -- 插件模块(自定义插件)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.plugins -- 插件包
| | | | ├── mybatis.generator -- mbg插件类(包含注释插件、序列化插件)
├── yan-service -- 服务模块(核心接口方法实现)
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.service -- 服务包
| | | | ├── jms -- 消息服务接口实现类
| | | | ├── persistence -- 持久化接口实现类
├── yan-web -- web模块
| ├── main -- 主模块路径
| | ├── java -- java类路径
| | | ├── com.yan.web.controller -- 业务处理控制器包
| | ├── resources -- 资源配置路径
| | | ├── properties -- 项目配置文件
| | | ├── spring -- spring的配置文件
| | ├── webapp -- web应用根路径
| | | ├── common -- 公共路径
| | | ├── resources -- 静态资源路径
| | | ├── views -- 视图路径
四、项目入门(Introduction)
下载项目,并且导入到IDE开发工具中(建议使用:IntelliJ IDEA)
使用 Maven 构建项目
创建数据库并执行 yan-dao 模块中 resources/database 路径下的 yan.sql 文件,创建整个项目必要的表(如:用户表、资源表、日志记录表等...)
分别修改 yan-dao、yan-service、yan-web 模块中 resources/properties 路径下的 *.properties 配置文件(具体修改方法及对应属性解释,详见 - 五、配置说明)
完成以上步骤就可以正常部署启动服务了: a). 启动 zookeeper 服务(必要服务,不启动该服务导致项目无法正常运行) b). 启动 activemq 服务(非必要服务,若不启动该服务,则项目运行中会有jms监听器异常,但不影响整体能) c). 启动 solr 服务(非必要服务,若不启动该服务,则搜索引擎无法使用,但不影响整体功能) [以上服务具体配置及启动命令,这里我不多做阐述了,不知道的可自行百度搜索]
启动完以上基础的服务后,就可以运行项目了 a). 首先启动 yan-service ,直接运行该模块中的 com.yan.service.ServiceApp.main() 方法来启动 b). 其次启动 yan-web ,可(使用 jetty / tomcat 均可)[详细部署过程在这里就不多做阐述了] ,启动成功后即可访问web应用界面。接下来进入开发阶段
根据实际业务需求,在对应的数据库中创建业务表,表命名规范:“模块名_表名” 如:SYS_RESOURCE (系统模块资源表)
修改 yan-dao 模块中 resources 路径下的 generatorConfig.xml 中的 targetPackage 包名及 tableName 表名,使用 MyBatis generator 插件生成对应的持久层模块代码(Maven 执行命令:mvn mybatis-generator:generate ),具体配置请参考MyBatis GeneratorXML Configuration
在 yan-api 模块中 src/main/java 路径下创建对应的接口
在 yan-service 模块中 src/main/java 路径下创建对应的接口服务实现类 ,并在 src/main/resources/META-INF/spring 路径下的 spring-dubbo-provider.xml 配置中添加声明暴露对应服务接口
在 yan-web 模块中 src/main/java 路径下创建对应的 controller 控制器,该控制器类命名规范以 Controller 结尾,继承 BaseController 类,编写 controller 控制器业务处理代码(具体使用参考 - 七、示例代码),并在 src/main/resources/spring/config 路径下的 spring-dubbo-customer.xml 配置中添加声明暴露对应服务接口
在 yan-web 模块中 src/main/webapp/views 路径下创建对应的jsp页面,并编写前端页面展示代码
五、配置说明(Properties)
yan-dao 模块 resources/properties 中配置文件说明
名称(Key值)
描述
mbg.path
mybatis generator 插件生成代码的路径(绝对路径)
mbg.db.username
mybatis generator 插件连接数据库的用户名
mbg.db.password
mybatis generator 插件连接数据库的密码
mbg.db.driverClassName
mybatis generator 插件连接数据库的驱动
mbg.db.url
mybatis generator 插件连接数据库的地址
yan-service 模块 resources/properties 中配置文件说明
名称(Key值)
描述
default.datasource.username
默认数据库用户名
default.datasource.password
默认数据库密码
default.datasource.driverClassName
默认数据库驱动类
default.datasource.url
默认数据库链接地址
dextend.datasource.username
扩展数据库用户名(用于多数据源切换)
dextend.datasource.password
扩展数据库密码(用于多数据源切换)
dextend.datasource.driverClassName
扩展数据库驱动类(用于多数据源切换)
dextend.datasource.url
扩展数据库链接地址(用于多数据源切换)
datasource.initialSize
初始化时建立物理连接的个数
datasource.minIdle
最小连接池数量
datasource.maxActive
最大连接池数量
datasource.maxWait
获取连接时最大等待时间,单位毫秒
datasource.timeBetweenEvictionRunsMillis
配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
datasource.minEvictableIdleTimeMillis
配置一个连接在池中最小生存的时间,单位是毫秒
datasource.validationQuery
用来检测连接是否有效的sql
datasource.testWhileIdle
建议配置为true,不影响性能,并且保证安全性
datasource.testOnBorrow
申请连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能。
datasource.testOnReturn
归还连接时执行validationQuery检测连接是否有效,做了这个配置会降低性能
datasource.poolPreparedStatements
是否缓存preparedStatement,也就是PSCache
datasource.maxPoolPreparedStatementPerConnectionSize
每个连接上PSCache的大小
datasource.filters
属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有:监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall
-
-
dubbo.application.name
dubbo 应用服务提供者名称
dubbo.protocol.port
dubbo 协议暴露服务的端口
dubbo.registry.address
dubbo 使用 zookeeper 注册中心暴露服务的地址
-
-
jms.brokerURL
activeMQ 服务地址
jms.userName
activeMQ 服务管理端用户名
jms.password
activeMQ 服务管理端密码
yan-web 模块 resources/properties 中配置文件说明
名称(Key值)
描述
jms.brokerURL
activeMQ 服务地址
jms.userName
activeMQ 服务管理端用户名
jms.password
activeMQ 服务管理端密码
-
-
logback.name
日志文件前缀名称(一般使用项目名称,便于区分)
logback.path
日志存放路径(绝对路径)
logback.maxHistory
日志最大的历史天数
logback.db.username
日志写入数据库时连接数据库的用户名
logback.db.password
日志写入数据库时连接数据库的密码
logback.db.driverClassName
日志写入数据库时连接数据库的驱动
logback.db.url
日志写入数据库时连接数据库的url
-
-
setting.upload
文件上传路径(绝对路径)
-
-
solr.builder
Solr搜索引擎服务地址
六、常用方法(Methods)
方法均在继承于BaseController的controller类中使用this.metodName或直接使用methodName来进行调用(注:methodName代表需要调用的方法名称,方法名称见下表)
方法名
参数
返回值
描述
getSession
无
HttpSession 服务器会话
获取服务器会话 session 对象
setSession
session 服务器会话
无
设置服务器会话 session 对象
getRequest
无
HttpServletRequest 用户请求
获取用户请求 request 对象
setRequest
request 用户请求
无
设置用户请求 request 对象
getResponse
无
HttpServletResponse 服务器响应结果
获取服务器响应结果 response 对象
setResponse
response 服务器响应结果
无
设置服务器响应结果 response 对象
getSessionUser
无
TbSysUser 用户对象
获取登录成功后 session 中的存储的用户信息
-
-
-
-
getService
无
DelegateService 通用 Service,查看自定义 sqlMap 的代理 service 对象
获取 delegateService 对象
resultPage
list 查询到的分页结果,为 Page 对象
PageModel 自定义的分页模型,T 为查询的对象
分页结果集对象
resultMsg
status 状态值(可根据需求任意设置,无强制标准);msg 消息内容;res 返回的对象
MsgModel 自定义消息模型
消息返回对象
fileUpLoad
request 上传方法中传递的 request 对象,并非父类中的 request 对象
List 上传文件成功后的新文件名称,以集合形式返回
文件上传方法,支持多个文件上传
fileDownLoad
fileName 需要下载的文件名称
ResponseEntity 下载的文件,在浏览器会进行下载
文件下载方法
-
-
-
-
isNull
obj 需要进行判断的对象
boolean 为null或空返回 true,否则返回 false
判断对象是否为null,或空
obj2Str
obj 需要转换的对象
String 对象的值(为null则返回"")
对象转换为 String,通常用于获取 Map 集合中的对象时使用
getUUID
无
String 32位主键字符串
生成 uuid 主键,长度为32位,且为大写模式
base64Encoder
str 需要进行编码的字符串
String 进行编码后的结果字符串
对字符串进行 base64 编码
base64Decoder
str 已进行 base64 编码的编码字符串
String 解码后的原字符串
对字符串进行 base64 解码
md5
str 需要进行 md5 加密的字符串
String 加密后的结果
对字符串进行 md5 加密算法
currentDate
pattern 获取系统时间的格式,如:yyyy-MM-dd HH:mm:ss
String 返回格式化后的当前时间
获取系统当前时间
timeStamp2Date
timestamp 需要进行转换的时间戳;pattern 转换后的格式
String 格式化后的日期
时间戳转换成日期
date2TimeStamp
dateStr 需要进行转换的日期字符串;pattern 日期的格式
String 转换后的时间戳
日期转换为时间戳
readFromFile
filePath 文件路径(绝对路径)
String 读取的文件内容
从指定文件中读取文件内容
writeToFile
content 需要写入文件中的内容
filePath 文件路径(绝对路径)
将内容写入到指定文件中(写入会覆盖文件原有内容,建议先读取,再写入,将读取的内容与需要写入的内容并在一起进行写入)
generatePath
path 文件夹路径(绝对路径)
无
生成指定路径文件夹,先进行判断文件夹是否存在,若不存在则创建对应目录的文件夹,若存在则不进行任何操作
generateFile
path 文件路径(绝对路径)
无
生成指定路径的文件,先进行判断文件是否存在,若不存在则进行创建文件,若存在则不进行任何操作
propertiesValue
key 资源文件中的 key 值
String 读取到的 key 对应的 value 值
读取 properties 文件中的值,读取 classpath 下 /properties/config.properties 配置文件
propertiesValue
resource 资源文件路径(对应 classpath 中的路径);key 资源文件中的 key 值
String 读取到的 key 对应的 value 值
读取指定路径 properties 文件中的值,会从 classpath 路径下进行查找资源文件
七、示例代码(Codes)
创建一个继承与BaseController的控制器
@Controller
public class XxxController extends BaseController {
...
}
获取日志日志记录Logger对象
// 方法一:使用注解获取
@LogInject
private static Logger log;
// 方法二:使用工厂方法获取
private static Logger log = LoggerFactory.getLogger(XxxController.class);
获取service对象
// 获取delegateService对象
@Autowired
private DelegateService delegateService;
// 获取泛型Service对象
@Autowired
private XxxService xxxService;
分页查询后台代码
// 使用对象 service 分页查询数据
@RequestMapping("/list")
@ResponseBody
public PageModel list(int offset, int limit) {
XxxExample example = new XxxExample();
PageModel pageModel = xxxService.selectByExampleForOffsetPage(example, offset, limit);
return pageModel;
}
// 使用 delegateService 自定义 sqlMap 分页查询数据
@RequestMapping("/list")
@ResponseBody
public PageModel list(int offset, int limit) {
String statement = "com.yan.dao.mapper.xxx.XxxCustomMapper.getXxx";
PageModel pageModel = delegateService.selectPagination(statement, offset, limit);
return pageModel;
}
分页查询前台代码
$('#table').bsTable({
url: '${pageContext.request.contextPath}/xxx/list',
idField: 'id',
columns: [
{field: 'state', checkbox: true},
{field: 'id', title: 'id', align: 'center'},
...
]
});
文件上传
@RequestMapping("/upload")
public String upload(HttpServletRequest request) {
// 调用父类的上传方法,在jsp中必须指定form为enctype="multipart/form-data"
List fileNames = this.fileUpLoad(request);
return "success";
}
文件下载(在jsp页面使用通用的下载方法,使用restful风格)
文件下载
自定义文件下载后台方法
@RequestMapping("/download")
public ResponseEntity download(String fileName) {
// 调用父类文件下载方法
return this.fileDownLoad(fileName);
}
常用 delegateService 方法
// 使用自定义sql模板查询单个对象
Xxx xxx = delegateService.selectOne(statement);
Xxx xxx = delegateService.selectOne(statement, parameter);
// 使用自定义sql模板查询对象集合
List list = delegateService.selectList(statement);
List list = delegateService.selectList(statement, parameter);
// 使用自定义sql模板有范围的查询,(每次返回指定的对象条数集合)
List list = delegateService.selectList(statement, parameter, rowBounds);
// 使用自定义sql模板进行分页查询
PageModel pageModel = delegateService.selectPagination(statement, offset, limit);
PageModel pageModel = delegateService.selectPagination(statement, parameter, offset, limit);
// 使用自定义sql模板保存
int res = delegateService.insert(statement);
int res = delegateService.insert(statement, parameter);
// 使用自定义sql模板修改
int res = delegateService.update(statement);
int res = delegateService.update(statement, parameter);
// 使用自定义sql模板删除
int res = delegateService.delete(statement);
int res = delegateService.delete(statement, parameter);
常用对象 service 方法
// 使用对象方法根据主键查询
Xxx xxx = xxxService.selectByPrimaryKey(id);
// 使用对象方法根据 criteria 查询
List list = xxxService.selectByExample(example);
// 方法一:使用对象方法根据 criteria 分页查询(推荐)
PageModel pageModel = xxxService.selectByExampleForOffsetPage(example, offset, limit);
// 方法二:使用对象方法根据criteria分页查询
PageModel pageModel = xxxService.selectByExampleForStartPage(example, pageNum, pageSize);
// 使用对象方法添加
int res = xxxService.insert(record);
int res = xxxService.insertSelective(record);
// 使用对象方法根据主键修改
int res = xxxService.updateByPrimaryKey(record);
int res = xxxService.updateByPrimaryKeySelective(record);
// 使用对象方法根据 criteria 修改
int res = xxxService.updateByExample(record, example);
int res = xxxService.updateByExampleSelective(record, example);
// 使用对象方法根据主键删除
int res = xxxService.deleteByPrimaryKey(productCode);
// 使用对象方法删除根据 criteria 删除
int res = xxxService.deleteByExample(example);
更多方法使用请参考项目中的示例代码
八、效果预览(Preview)
九、许可证(License)
MIT License
你可能感兴趣的:(使用Maven构建 整合Dubbo+Zookeeper+SpringMVC+Spring+MyBatis支持分布式 高效便捷开发框架)
Spring Boot 项目 90% 存在这 15 个致命漏洞,你的代码在裸奔吗?
风象南
原创随笔 java spring boot 后端 web安全 系统安全
文章首发公众号【风象南】SpringBoot作为一款广泛使用的Java开发框架,虽然为开发者提供了诸多便利,但也并非无懈可击,其安全漏洞问题不容忽视。本文将深入探讨SpringBoot常见的安全漏洞类型、产生原因以及相应的解决方案,帮助开发者更好地保障应用程序的安全。1.SQL注入漏洞漏洞描述:当应用程序使用用户输入的数据来构建SQL查询时,如果没有进行适当的过滤或转义,攻击者就可以通过构造恶意的
golang jwt挖坑
qiang527052
golang个人笔记 golang jwt
golangjwt使用golangjwt使用中遇到的一个坑,特此记录。具体描述:因为公司需要,现有架构jwt生成token的代码是java实现的,然后现在在golang中需要对此token进行解析。java用到的jar包:io.jsonwebtoken.jjwt0.9.0golang用到的库:github.com/dgrijalva/jwt-gojava生成token测试代码如下:publicst
「MySQL」日期时间格式化函数 DATE_FORMAT() 的使用详解
m0_74823827
mysql adb android
目录一、DATE_FORMAT()语法二、格式化字符串详解三、常见日期时间格式组合四、业务场景五、总结一、DATE_FORMAT()语法DATE_FORMAT()是MySQL中用于格式化日期时间的函数:语法:DATE_FORMAT(date,format_string)date:需要格式化的日期化时间值,一般是需要被格式化的日期时间类型(datetime类),但也可以是日期时间形式的字符串form
Linux动静态库
遥逖
Linux linux 运维 服务器
Linux动静态库静态库动态库库的链接静态库核心特性:链接时机:在编译时将库代码直接嵌入到可执行文件中。文件格式:.a(Linux)、.lib(Windows)。内存占用:每个使用该库的可执行文件都会包含一份完整的库代码副本。创建静态库(.a文件)编写源代码:首先,编写你需要的库函数的源代码文件,例如mylib.c编译为目标文件:使用gcc/g++编译源码为目标文件(.o文件)g++-cmylib
H743定时器输出PWM波方法(基于STM32CubeMX)
NW嵌入式开发
单片机开发 stm32 定时器 PWM模式
0工具准备1.STM32CubeMX2.《STM32H743参考手册中文版》3.《stm32h743xi数据手册》1前言本文介绍基于STM32CubeMX,使用stm32h743xi,使用TIM15的通道2输出PWM波的方法。2H743定时器输出PWM波方法(基于STM32CubeMX)《STM32H743参考手册中文版》对PWM模式的描述如下:其中,有关PWM模式1和模式2的介绍见TIM15_C
Opencv之计算机视觉一
闭月之泪舞
计算机视觉 计算机视觉 opencv python
一、环境准备使用opencv库来实现简单的计算机视觉。需要安装两个库:opencv-python和opencv-contrib-python,版本可以自行选择,注意不同版本的opencv中的某些函数名和用法可能不同pipinstallopencv-python==3.4.18.65-ihttps://pypi.tuna.tsinghua.edu.cn/simplepipinstallopencv-
大语言模型微调和大语言模型应用的区别?
AI Echoes
人工智能 深度学习 deepseek 机器学习 算法
大语言模型微调和大语言模型应用的区别?关键要点微调大型语言模型(LLM)是调整预训练模型以适应特定任务或领域的过程,研究表明这能显著提升性能。大型语言模型应用是指将LLM用于实际问题解决或任务执行,如聊天机器人或文本生成。微调和应用的不同在于:微调是准备阶段,应用是最终使用;使用微调模型通常在特定领域表现更好,而预训练模型更适合通用任务。什么是微调大型语言模型?微调大型语言模型是指取一个已经预训练
golang slice 切片数组下标的截取方式
用户昵称不能为空
golang 开发语言 后端
需求使用golang截取的下标,按照下标顺序截取代码//Youcaneditthiscode!//Clickhereandstarttyping.packagemainimport"fmt"funcRows(page,pageSizeint)(items[]int){alls:=[
区块链在医疗数据共享中的应用:解锁安全与透明的新维度
Echo_Wish
人工智能 前沿技术 区块链 安全
区块链在医疗数据共享中的应用:解锁安全与透明的新维度近年来,区块链技术在金融领域取得了显著的突破,然而,它的潜力不仅仅局限于数字货币和支付领域。随着医疗数据的数字化和信息化程度不断提升,区块链技术在医疗数据共享中的应用正逐渐成为一个热门话题。区块链以其去中心化、不可篡改、透明且高效的特点,为医疗行业的数据管理提供了全新的解决方案,尤其是在患者隐私保护、数据共享以及医疗服务的透明度方面。那么,区块链
XPipe:一款新型开源终端管理神器
修己xj
工具 开源
最近,一位朋友在使用Docker时遇到了一个问题:他对宿主机与容器之间的文件复制以及在容器内执行命令等操作感到困惑。这让我开始思考,如果有一款远程管理工具能够直接连接到容器内部,操作是否会变得更加便捷?恰巧,今天在浏览GitHub时,我发现了这样一款名为XPipe的工具。工具介绍XPipe是一款创新的Shell连接中心和远程文件管理器,它能够让你从本地机器轻松访问整个服务器基础设施。这款工具运行在
vscode如何找letax模板_VScode如何实时预览LaTeX?
weixin_39789327
好像感觉我要火了,这个必须专业回答下啊,看完别忘了点赞啊!!用户友好型实时预览的定义即不用手动编译,不用手动刷新文档(PDF)的LaTeX写作方式.实现方式与工具目前主要用的是Latexmk这个perl脚本或者支持实时预览的Markdown编辑器.关于TeX集成系统的一个建议个人建议用TeXLive而非MikTeX甚至CTeX套装,相比而言我用TeXLive时碰到的问题最少.后两种你可能发现好好的
【Stata】线宽度lwidth
ronvicki
Stata Stata
在Stata中,lwidth()用于设置线条宽度,支持以下选项(按宽度从细到粗排列):vthin(verythin)-极细线thin-细线medthin-中等偏细线medium-中等宽度线medthick-中等偏粗线thick-粗线vthick(verythick)-极粗线
【C++开源库】tinyxml2解析库使用介绍
小庞在加油
C++知识 c++ 开源 tinyxml2解析库
TinyXML-2是一个在C++中使用的轻量级、简单且高效的XML解析库。它由LeeThomason开发,旨在提供快速解析和生成XML数据的功能,同时保持代码的简洁性和易于使用。TinyXML-2支持多种编译器和平台,包括Windows、Linux和macOS。特点与优势简单易用:TinyXML-2提供了直观的API,使得解析和生成XML文档变得简单。高性能:它经过优化,能够快速解析大型XML文件
C++ 实例(二)
阳光向日葵向阳
c++ 算法 数据结构
交换两个数以下我们使用两种方法来交换两个变量:使用临时变量与不使用临时变量。实例-使用临时变量#includeusingnamespacestd;intmain(){inta=5,b=10,temp;cout#includeusingnamespacestd;intmain(){inta=5,b=10;coutusingnamespacestd;intmain(){intn;cout
【深入理解 SpringBoot3】第一弹:SpringBoot3 快速入门
敖云岚
spring boot 后端 java
一、SpringBoot是什么SpringBoot帮我们简单、快速地创建一个独立的、生产级别的Spring应用大多数SpringBoot应用只需要编写少量配置即可快速整合Spring平台以及第三方技术。特性:直接嵌入Tomcat、Jetty或Undertow(无需部署war包)提供可选的starter(场景启动器)简化应用的整合实现按需的自动配置Spring以及第三方库(约定大于配置):appli
【零基础入门】一篇弄懂nn.Sequential以及ModuleList的使用(呕心沥血版)
十二月的猫
PyTorch深度学习 pytorch 零基础入门
个人主页:十二月的猫-CSDN博客系列专栏:《PyTorch科研加速指南:即插即用式模块开发》CSDN博客十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光目录1.前言2.Sequential类的使用2.1序列容器简单注入2.2序列容器字典注入2.3序列容器函数注入2.4序列容器修改2.5序列容器删除3.nn.ModuleList()的使用3.1定义模型3.2使用模型4.总结1.前言《
MySQL 中 int (1) 和 int (10) 的区别详解
阿贾克斯的黎明
游戏开发 mysql 数据库
目录MySQL中int(1)和int(10)的区别详解在MySQL数据库的使用过程中,我们创建数据表时经常会用到整数类型,比如int。而细心的开发者可能会注意到,int后面可以跟一个数字,像int(1)和int(10),这两者到底有什么区别呢?今天我们就来深入探讨一下。在MySQL中,int类型后面括号里的数字M,代表的是显示宽度,最大取值为255。需要明确的是,这个显示宽度和该类型可以存储的范围
中大型企业绩效考核管理主流系统对比:北森、i人事等
绩效管理软件
本文将深入对比8款适合中大型企业绩效考核系统:1.i人事;2.Moka;3.用友NC;4.金蝶;5.SAPSuccessFactors;6.北森;7.明道绩效考核系统;8.KronosWorkforceReady。在竞争激烈的商业环境中,一套高效的绩效考核系统不仅能激发员工潜力,更是推动中大型企业管理升级的核心引擎。如何在众多产品中找到既精准又具前瞻性的解决方案?本文将深入评测15款经过市场严格检
事务回滚核心技术
KBkongbaiKB
java
一、事务回滚的数学本质与核心挑战1.1事务状态机模型操作执行持久化完成系统故障事务回滚ActivePartiallyCommittedCommittedFailedAborted1.2核心技术挑战矩阵问题维度单机事务分布式事务原子性保证存储引擎WAL日志二阶段提交协议隔离性实现MVCC多版本控制全局锁调度机制可见性管理事务ID版本链向量时钟同步回滚触发条件SQL执行异常/死锁网络分区/节点故障二、
HTML语言的贪心算法
宇瞳月
包罗万象 golang 开发语言 后端
HTML语言的贪心算法:理论与实践引言在编程和算法研究中,贪心算法是一种广泛应用的解决问题的方法。它通过对每一阶段选择最优解的方式来构建整个问题的解决方案。贪心算法不一定能在所有情况下得到最优解,但在许多实际问题中,它能够提供一个足够好的近似解。本文将探讨贪心算法的基本概念、典型应用、优缺点,并结合HTML语言的特点,提出一些具体的实现示例和思考。一、贪心算法的基本概念贪心算法是一种求解最优化问题
Echarts map3D 禁止鼠标滚轮缩放
程序媛小白白
javascript 前端 vue echarts
Echartstype为map3D在使用时发现会存在鼠标滚轮缩放的情况zoomSensitivity属性本质上是是否开启map3D的缩放和平移所以也可以禁止鼠标滚轮缩放的情况zoomSensitivity:false,//是否开启缩放和平移/鼠标滑动缩放禁止禁用这个属性就可以实现map3D禁止鼠标滚轮缩放的需求了
dv-scroll-board 鼠标移入单元格显示单元格所有数据
mengfei-super
计算机外设 前端 vue.js
前言:在使用大屏组件库data-v开发大屏驾驶舱系统,dv-scroll-board实现表格数据滚动的效果,但是某一列数据较多,需求提出:鼠标移上去要显示对应的问题,完全展示出来。奈何以前没有搞过这个问题,随即立马找向百度麻麻!实现效果及方法如下:{{dvTextName}}exportdefault{data(){return{dvText:{keyX:"15px",keyY:"0px",},d
Python 用户账户(让用户拥有自己的数据)
钢铁男儿
Python 从入门到精通 python 数据库 sqlite
Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方。在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目。你还将学习Django如何防范对基于表单的网页发起的常见攻击,这让你无需花太多时间考虑确保应用程序安全的问题。然后,我们将实现一个用户身份验证系统。你将创建一个注册页面,供用户创建账户,并让有些页面只能供已登录的用户访问。接下来,我们将修改一些视图
Python 用户账户(让用户能够输入数据)
钢铁男儿
Python 从入门到精通 python 数据库 sqlite
Web应用程序的核心是让任何用户都能够注册账户并能够使用它,不管用户身处何方。在本章中,你将创建一些表单,让用户能够添加主题和条目,以及编辑既有的条目。你还将学习Django如何防范对基于表单的网页发起的常见攻击,这让你无需花太多时间考虑确保应用程序安全的问题。然后,我们将实现一个用户身份验证系统。你将创建一个注册页面,供用户创建账户,并让有些页面只能供已登录的用户访问。接下来,我们将修改一些视图
安卓编译安装python_一文了解如何在安卓系统上安装Pydroid 3并进行编码
weixin_39916681
安卓编译安装python
由于Pydroid3集成开发环境(IDE),因此可以用Python进行可移植的编码。Pydroid是Python3的极简解释器,可让您执行较小的项目并在Android设备上进行最少的编码。如果您还想在没有PC的任何地方学习Python编程,同时在Android上为Python复制PC平台,那么Pydroid3是一个不错的应用程序。无论您是Python编程的新手还是专家,让我们看看使用Pydroid
python为什么需要文本编辑器-推荐几款高效的Python文本编辑器| 高效的文本编辑器的特点是什么...
weixin_39991305
我们都知道程序员花费大量的时间在编写、阅读和编辑代码上,因此一定要使用高效的文本编辑器才能够提高并很好的完成工作的效率和保证工作的质量。什么是高效的文本编辑器呢?除了自己用的得心应手外,小编认为还应该包含以下几个特点:·突出代码的结构,让你在编写代码时就能够发现常见的bug;·包含自动缩进功能;·显示代码长度的标志;·用于执行常见操作的快捷键;如果你是编程新手小白,小u非常建议你使用具备上述功能而
【MySQL】实战篇—数据库设计与实现:根据需求设计数据库架构
AI人H哥会Java
MySQL sql mysql 数据库
在设计数据库架构时,开发者需要遵循一系列步骤,以确保数据库能够高效、可靠地满足系统需求。以下是设计数据库架构的理论知识和步骤说明。1.需求分析需求分析是数据库设计的第一步,旨在理解系统的功能需求和数据需求。通过与利益相关者(如用户、开发人员和业务分析师)进行沟通,明确系统需要存储和管理的数据类型。步骤说明识别业务需求:确定系统的主要功能,例如用户管理、订单处理、库存管理等。收集数据需求:明确每个功
一文读懂Python列表(5)
跟着杰哥学Python
python
列表让你能够在一个地方存储成组的信息,其中可以只包含几个元素,也可以包含数百万个元素,列表是新手可直接使用的最强大的Python功能之一。一、列表是什么1.列表由按顺序排列的元素组成,用[]表示列表,用逗号分隔元素2.举例:bicycles=['trek','cannondale','redline','specialized']二、列表的索引1.第一个列表元素的索引为0,而不是12.举例:三、访
一文读懂Python异常(16)
跟着杰哥学Python
python
Python程序执行期间发生的错误叫做异常,如果你编写了处理异常的代码,程序将继续执行;如果未编写处理异常的代码,程序将停止,并返回一条traceback,其中包含异常的报告。通常使用try-except代码块来处理异常。一、try-except代码块1、如果try代码块的代码运行起来没问题,则跳过except代码块;如果try代码块的代码导致了错误,则运行except代码块。2、举例二、try-
五个冷门的Adobe系列软件小技巧
reddingtons
adobe
在当今的数字时代,Adobe系列软件在设计、视频编辑和创意制作领域占据着重要地位。许多学校和教育机构为学生提供教育邮箱,允许他们免费使用Adobe全系列软件的教育订阅。这意味着无论是Photoshop、Illustrator还是PremierePro等热门软件,学生都能轻松获取。然而,本文将分享一些冷门的Adobe软件小技巧,这些技巧主要适用于付费用户,可能不适用于某些免费用户。小技巧一:使用Ad
js动画html标签(持续更新中)
843977358
html js 动画 media opacity
1.jQuery 效果 - animate() 方法 改变 "div" 元素的高度: $(".btn1").click(function(){ $("#box").animate({height:"300px
springMVC学习笔记
caoyong
springMVC
1、搭建开发环境
a>、添加jar文件,在ioc所需jar包的基础上添加spring-web.jar,spring-webmvc.jar
b>、在web.xml中配置前端控制器
<servlet>
&nbs
POI中设置Excel单元格格式
107x
poi style 列宽 合并单元格 自动换行
引用:http://apps.hi.baidu.com/share/detail/17249059
POI中可能会用到一些需要设置EXCEL单元格格式的操作小结:
先获取工作薄对象:
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet();
HSSFCellStyle setBorder = wb.
jquery 获取A href 触发js方法的this参数 无效的情况
一炮送你回车库
jquery
html如下:
<td class=\"bord-r-n bord-l-n c-333\">
<a class=\"table-icon edit\" onclick=\"editTrValues(this);\">修改</a>
</td>"
j
md5
3213213333332132
MD5
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class MDFive {
public static void main(String[] args) {
String md5Str = "cq
完全卸载干净Oracle11g
sophia天雪
orale数据库 卸载干净 清理注册表
完全卸载干净Oracle11g
A、存在OUI卸载工具的情况下:
第一步:停用所有Oracle相关的已启动的服务;
第二步:找到OUI卸载工具:在“开始”菜单中找到“oracle_OraDb11g_home”文件夹中
&
apache 的access.log 日志文件太大如何解决
darkranger
apache
CustomLog logs/access.log common 此写法导致日志数据一致自增变大。
直接注释上面的语法
#CustomLog logs/access.log common
增加:
CustomLog "|bin/rotatelogs.exe -l logs/access-%Y-%m-d.log 
Hadoop单机模式环境搭建关键步骤
aijuans
分布式
Hadoop环境需要sshd服务一直开启,故,在服务器上需要按照ssh服务,以Ubuntu Linux为例,按照ssh服务如下:
sudo apt-get install ssh
sudo apt-get install rsync
编辑HADOOP_HOME/conf/hadoop-env.sh文件,将JAVA_HOME设置为Java
PL/SQL DEVELOPER 使用的一些技巧
atongyeye
java sql
1 记住密码
这是个有争议的功能,因为记住密码会给带来数据安全的问题。 但假如是开发用的库,密码甚至可以和用户名相同,每次输入密码实在没什么意义,可以考虑让PLSQL Developer记住密码。 位置:Tools菜单--Preferences--Oracle--Logon HIstory--Store with password
2 特殊Copy
在SQL Window
PHP:在对象上动态添加一个新的方法
bardo
方法 动态添加 闭包
有关在一个对象上动态添加方法,如果你来自Ruby语言或您熟悉这门语言,你已经知道它是什么...... Ruby提供给你一种方式来获得一个instancied对象,并给这个对象添加一个额外的方法。
好!不说Ruby了,让我们来谈谈PHP
PHP未提供一个“标准的方式”做这样的事情,这也是没有核心的一部分...
但无论如何,它并没有说我们不能做这样
ThreadLocal与线程安全
bijian1013
java java多线程 threadLocal
首先来看一下线程安全问题产生的两个前提条件:
1.数据共享,多个线程访问同样的数据。
2.共享数据是可变的,多个线程对访问的共享数据作出了修改。
实例:
定义一个共享数据:
public static int a = 0;
Tomcat 架包冲突解决
征客丶
tomcat Web
环境:
Tomcat 7.0.6
win7 x64
错误表象:【我的冲突的架包是:catalina.jar 与 tomcat-catalina-7.0.61.jar 冲突,不知道其他架包冲突时是不是也报这个错误】
严重: End event threw exception
java.lang.NoSuchMethodException: org.apache.catalina.dep
【Scala三】分析Spark源代码总结的Scala语法一
bit1129
scala
Scala语法 1. classOf运算符
Scala中的classOf[T]是一个class对象,等价于Java的T.class,比如classOf[TextInputFormat]等价于TextInputFormat.class
2. 方法默认值
defaultMinPartitions就是一个默认值,类似C++的方法默认值
java 线程池管理机制
BlueSkator
java线程池 管理机制
编辑
Add
Tools
jdk线程池
一、引言
第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。
关于hql中使用本地sql函数的问题(问-答)
BreakingBad
HQL 存储函数
转自于:http://www.iteye.com/problems/23775
问:
我在开发过程中,使用hql进行查询(mysql5)使用到了mysql自带的函数find_in_set()这个函数作为匹配字符串的来讲效率非常好,但是我直接把它写在hql语句里面(from ForumMemberInfo fm,ForumArea fa where find_in_set(fm.userId,f
读《研磨设计模式》-代码笔记-迭代器模式-Iterator
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
import java.util.Arrays;
import java.util.List;
/**
* Iterator模式提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象内部表示
*
* 个人觉得,为了不暴露该
常用SQL
chenjunt3
oracle sql C++ c C#
--NC建库
CREATE TABLESPACE NNC_DATA01 DATAFILE 'E:\oracle\product\10.2.0\oradata\orcl\nnc_data01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
CREATE TABLESPA
数学是科学技术的语言
comsci
工作 活动 领域模型
从小学到大学都在学习数学,从小学开始了解数字的概念和背诵九九表到大学学习复变函数和离散数学,看起来好像掌握了这些数学知识,但是在工作中却很少真正用到这些知识,为什么?
最近在研究一种开源软件-CARROT2的源代码的时候,又一次感觉到数学在计算机技术中的不可动摇的基础作用,CARROT2是一种用于自动语言分类(聚类)的工具性软件,用JAVA语言编写,它
Linux系统手动安装rzsz 软件包
daizj
linux sz rz
1、下载软件 rzsz-3.34.tar.gz。登录linux,用命令
wget http://freeware.sgi.com/source/rzsz/rzsz-3.48.tar.gz下载。
2、解压 tar zxvf rzsz-3.34.tar.gz
3、安装 cd rzsz-3.34 ; make posix 。注意:这个软件安装与常规的GNU软件不
读源码之:ArrayBlockingQueue
dieslrae
java
ArrayBlockingQueue是concurrent包提供的一个线程安全的队列,由一个数组来保存队列元素.通过
takeIndex和
putIndex来分别记录出队列和入队列的下标,以保证在出队列时
不进行元素移动.
//在出队列或者入队列的时候对takeIndex或者putIndex进行累加,如果已经到了数组末尾就又从0开始,保证数
C语言学习九枚举的定义和应用
dcj3sjt126com
c
枚举的定义
# include <stdio.h>
enum WeekDay
{
MonDay, TuesDay, WednesDay, ThursDay, FriDay, SaturDay, SunDay
};
int main(void)
{
//int day; //day定义成int类型不合适
enum WeekDay day = Wedne
Vagrant 三种网络配置详解
dcj3sjt126com
vagrant
Forwarded port
Private network
Public network
Vagrant 中一共有三种网络配置,下面我们将会详解三种网络配置各自优缺点。
端口映射(Forwarded port),顾名思义是指把宿主计算机的端口映射到虚拟机的某一个端口上,访问宿主计算机端口时,请求实际是被转发到虚拟机上指定端口的。Vagrantfile中设定语法为:
c
16.性能优化-完结
frank1234
性能优化
性能调优是一个宏大的工程,需要从宏观架构(比如拆分,冗余,读写分离,集群,缓存等), 软件设计(比如多线程并行化,选择合适的数据结构), 数据库设计层面(合理的表设计,汇总表,索引,分区,拆分,冗余等) 以及微观(软件的配置,SQL语句的编写,操作系统配置等)根据软件的应用场景做综合的考虑和权衡,并经验实际测试验证才能达到最优。
性能水很深, 笔者经验尚浅 ,赶脚也就了解了点皮毛而已,我觉得
Word Search
hcx2013
search
Given a 2D board and a word, find if the word exists in the grid.
The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or ve
Spring4新特性——Web开发的增强
jinnianshilongnian
spring spring mvc spring4
Spring4新特性——泛型限定式依赖注入
Spring4新特性——核心容器的其他改进
Spring4新特性——Web开发的增强
Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC
Spring4新特性——Groovy Bean定义DSL
Spring4新特性——更好的Java泛型操作API
Spring4新
CentOS安装配置tengine并设置开机启动
liuxingguome
centos
yum install gcc-c++
yum install pcre pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-devel
Ubuntu上可以这样安装
sudo aptitude install libdmalloc-dev libcurl4-opens
第14章 工具函数(上)
onestopweb
函数
index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/
Xelsius 2008 and SAP BW at a glance
blueoxygen
BO Xelsius
Xelsius提供了丰富多样的数据连接方式,其中为SAP BW专属提供的是BICS。那么Xelsius的各种连接的优缺点比较以及Xelsius是如何直接连接到BEx Query的呢? 以下Wiki文章应该提供了全面的概览。
http://wiki.sdn.sap.com/wiki/display/BOBJ/Xcelsius+2008+and+SAP+NetWeaver+BW+Co
oracle表空间相关
tongsh6
oracle
在oracle数据库中,一个用户对应一个表空间,当表空间不足时,可以采用增加表空间的数据文件容量,也可以增加数据文件,方法有如下几种:
1.给表空间增加数据文件
ALTER TABLESPACE "表空间的名字" ADD DATAFILE
'表空间的数据文件路径' SIZE 50M;
&nb
.Net framework4.0安装失败
yangjuanjava
.net windows
上午的.net framework 4.0,各种失败,查了好多答案,各种不靠谱,最后终于找到答案了
和Windows Update有关系,给目录名重命名一下再次安装,即安装成功了!
下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=17113
方法:
1.运行cmd,输入net stop WuAuServ
2.点击开