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支持分布式 高效便捷开发框架)
【Redis系列】Redis安装与使用
m0_74825409
面试 学习路线 阿里巴巴 redis 数据库 缓存
???欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。推荐:kwan的首页,持续学习,不断总结,共同进步,活到老学到老导航檀越剑指大厂系列:全面总结java核心技术点,如集合,jvm,并发编程redis,kafka,Spring,微服务,Netty等常用开发工具系列:罗列常用的开发工具,如IDE
zemax光学设计坐标断点怎么使用?
光学设计培训
光学设计 光学 光学工程 计算机视觉 数码相机
在Zemax光学设计中,坐标断点(CoordinateBreaks)的使用涉及多个方面,包括理解坐标系、插入坐标断点、设置参数以及注意事项等。以下是对Zemax光学设计坐标断点使用的详细解释:一、理解Zemax坐标系Zemax使用的是右手坐标系,其中:大拇指方向代表Z轴;四指指向代表Y轴;四指弯曲指向手心方向代表X轴正向。在序列模式下,每个表面都是参考其前面的表面顶点坐标系,每个表面的厚度决定下一
Springboot中添加原生websocket支持
小的~~
spring boot websocket java
1、添加配置@Configuration@EnableWebSocketpublicclassWebSocketConfigimplementsWebSocketConfigurer{@OverridepublicvoidregisterWebSocketHandlers(WebSocketHandlerRegistryregistry){//注册WebSocket处理器,并允许所有来源的连接(在
Aerospike
小的~~
nosql Aerospike
文章来源:拉勾教育Java高薪训练营第3期Aerospike介绍Aerospike(简称AS)是一个分布式,可扩展的键值存储的NoSQL数据库。T级别大数据高并发的结构化数据存储读写操作达微妙级,99%的响应可在1毫秒内实现采用混合架构,索引存储在内存中,而数据可存储在机械硬盘(HDD)或固态硬盘(SSD)上(也可存储在内存)AS内部在访问SSD屏蔽了文件系统层级,直接访问地址,保证了数据的读取速
使用 OpenCV 和 Python 对图像进行卡通化
无水先生
AI原理和python实现 人工智能综合 opencv python 人工智能
关键词:OpenCVlibrarytoconvertimagestocartoons目录一、说明二、OpenCV2.1要求支持库2.2方法2.3实施和执行三、定义卡通化函数3.1添加按钮3.2保存图像四、结论一、说明在本文中,我们将构建一个有趣的应用程序,将提供给它的图像卡通化。为了构建这个卡通化应用程序,我们将使用python和OpenCV。这是机器学习令人兴奋和激动的应用程序之一。在构建此应用
swagger使用指引
MA_Y_
swagger
1.swagger介绍在前后端分离开发中通常由后端程序员设计接口,完成后需要编写接口文档,最后将文档交给前端工程师,前端工程师参考文档进行开发。可以通过一些工具快速生成接口文档,本项目通过Swagger生成接口在线文档。什么是Swagger?OpenAPI规范(OpenAPISpecification简称OAS)是Linux基金会的一个项目,试图通过定义一种用来描述API格式或API定义的语言,来
排序规则utf8_general_ci的作用是什么?
浩哲Zhe
数据库
排序规则utf8_general_ci是指针对使用UTF-8编码存储的数据进行排序和比较的一种规则。在数据库管理系统(如MySQL)中,排序规则决定了在执行查询时如何比较和排序文本数据。具体来说,utf8_general_ci中的几个部分含义如下:UTF-8编码:UTF-8是一种变长字符编码,能够表示世界上几乎所有的字符。它被广泛用于存储和传输文本数据,支持多语言的文字处理。general:表示一
3D机器视觉的类型、应用和未来趋势
视觉人机器视觉
机器视觉3D 3d 人工智能 计算机视觉 c# 前端
3D机器视觉的类型、应用和未来趋势类型3D机器视觉技术主要分为以下几类:立体视觉(StereoVision)通过两个或多个摄像头从不同角度捕捉图像,利用视差计算深度信息,生成3D模型。结构光(StructuredLight)使用投影仪将特定光图案投射到物体表面,通过摄像头捕捉变形图案,计算物体形状和深度。飞行时间(TimeofFlight,ToF)通过测量光脉冲从发射到反射回传感器的时间,计算物体
使用Qt+opencv实现游戏辅助点击工具-以阴阳师为例
虎式坦克我最爱
游戏
注:本文章技术交流使用,不侵犯任何著作权。一.阴阳师辅助软件需要实现哪些功能?1.首先,对于肝绘卷拿角色而言,需要打困难28副本和结界突破循环刷绘卷碎片。这一功能让你每月免费悠闲地拿到最新角色,即使你是较新的玩家!2.有人喜欢打阴阳寮突破,因为结界卡可以合成勾玉,另外寮突破后给的寮勋章可以维持寮正常运转。3.御魂等副本,这款游戏的御魂是核心玩法。而且这只是一个辅助工具,不修改游戏内存,用来解放双手
Flink在指定时间窗口内统计均值,超过阈值后报警
小的~~
flink 均值算法 大数据
1、需求统计物联网设备收集上来的温湿度数据,如果5分钟内的均值超过阈值(30摄氏度)则发出告警消息,要求时间窗口和阈值可在管理后台随时修改,实时生效(完成当前窗口后下一个窗口使用最新配置)。物联网设备的数据从kafka中读取,配置数据从mysql中读取,有个管理后台可以调整窗口和阈值大小。2、思路使用flink的双流join,配置数据使用广播流,设备数据使用普通流。3、实现代码packagecu.
MATLAB中count函数用法
jk_101
Matlab matlab 开发语言
目录语法说明示例对出现次数计数使用模式对数字和字母进行计数多个子字符串的所有出现次数忽略大小写对字符向量中的子字符串进行计数count函数的功能是计算字符串中模式的出现次数。语法A=count(str,pat)A=count(str,pat,'IgnoreCase',true)说明A=count(str,pat)返回pat在str中的出现次数。如果pat是包含多个模式的数组,则count返回pat
SQL复习
浩哲Zhe
Java知识体系构建 sql adb java
SQL复习MySQLMySQLMySQL有什么特点?MySQL不支持全外连接。安装数据类型MySQL中的数据类型分为哪些?MySQL中的数据类型主要分为三大类:数值类型、字符串类型、日期时间类型。其中,数值类型又分为七种:TINYINT、SMALLINT、INT、BIGINT、FLOAT、DOUBLE、DECIMAL。字符串类型分为五种:CHAR、VARCHAR、BLOB、TEXT、LONGTEX
RPC框架Dubbo深入分析
radcb55226
程序员 rpc dubbo 网络协议
《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》,点击传送门,即可获取!依赖于Zookeeper的稳定性Redis支持基于客户端双写的集群方式,性能高要求服务器时间同步,用于检查心跳过期脏数据Multicast去中心化,不需要安装注册中心依赖于网络拓普和路由,跨机房有风险SimpleDogfooding,注册中心本身也是一个标准的RPC服务没有集群支持,可能单点故障cl
Kotlin 2.1.0 入门教程(二十一)数据类
xvch
Kotlin kotlin android
数据类数据类主要用于存储数据。对于每个数据类,编译器会自动生成一些额外的成员函数,这些函数支持将实例打印为易读的输出、比较实例、复制实例等操作。数据类使用data关键字标记:dataclassUser(valname:String,valage:Int)编译器会根据主构造函数中声明的所有属性,自动派生以下成员:equals()/hashCode()对。格式为User(name=John,age=4
08-两数之和(四种解法)
最遥远的瞬间
算法合集 算法 数据结构
两数之和1:给定一个整数数组num,从数组中找出两个数满足相加之和等于目标数target。假设每个输入只对应唯一的答案,而且不可以重塑使用相同的元素。返回两数的下标值,以数组形式返回。importjava.util.Arrays;importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;publicclassdemo01
Nginx 中启用 Gzip 压缩以优化网页加载速度
神秘泣男子
Linux高级管理 # 运维 nginx 优化
作者主页:点击!Nginx-从零开始的服务器之旅专栏:点击!Linux高级管理防护和群集专栏:点击!⏰️创作时间:2025年2月7日17点14分目录1.配置网页压缩目的操作步骤检查gzip模块是否启用测试步骤1.gzipon;2.gzip_types3.gzip_min_length4.gzip_comp_level总结启用Gzip压缩是一种简单高效的优化方法,可以显著减少网页传输的数据量,从而提
机柜机箱制冷风扇在使用过程中突然停止运转的原因
辉盈防爆散热风扇
单片机 嵌入式硬件
在机柜机箱的正常运行中,制冷风扇起着关键的散热作用,可一旦它在使用时突然停止运转,将会对机柜机箱内设备的稳定运行构成严重威胁。而导致这一现象出现的原因较为复杂,主要涵盖以下几个方面。从电源供应角度来看,这是一个常见的导致风扇停转的因素。电源连接松动是很容易出现的问题。机柜机箱在长期使用过程中,可能会因为震动等原因,使得风扇的电源线接口松动甚至脱落,从而切断了风扇的电力供应,使其停止运转。此外,电源
【硬件设计细节】缓冲驱动器使用注意事项
RunningCamel
硬件开发 嵌入式硬件
一、缓冲驱动器核心功能与选型原则信号增强与隔离驱动能力匹配:根据负载电流需求选择缓冲器,例如CMOS缓冲器驱动能力通常为4-8mA,需搭配大电流负载时选用图腾柱输出或专用驱动芯片(如TI的SN74LVC系列)。电压域转换:跨电压域传输时需使用电平转换缓冲器(如TXB0108),避免电平不匹配导致逻辑错误或器件损坏。阻抗匹配与信号完整性高速信号(>100MHz):选用低传播延迟(如SN74LVC1G
Kotlin 2.1.0 入门教程(二十)扩展
xvch
Kotlin kotlin android
扩展Kotlin提供了一种能力,无需继承类或使用像装饰器这样的设计模式,就能为类或接口扩展新的功能。这是通过一种名为扩展的特殊声明来实现的。例如,你可以为无法修改的第三方库中的类或接口编写新的函数。这些函数可以像原类的方法一样以常规方式调用。这种机制被称为扩展函数。此外,还有扩展属性,它允许你为现有类定义新的属性。扩展函数要声明一个扩展函数,需要在函数名前加上接收者类型,该接收者类型指的是要被扩展
运维脚本——3.自动化部署
F——
运维 运维 物联网 人工智能 学习 web安全 自动化 边缘计算
自动化部署是现代IT运维和开发中的关键实践,能够显著提升效率、减少错误并加速交付流程。必要性提高效率:自动化部署能够快速、一致地完成部署任务,减少手动操作的时间和精力。减少人为错误:自动化流程减少了人为干预,降低了因手动操作导致的错误风险。加速交付:通过自动化部署,可以更快地将新功能和修复推送到生产环境,缩短交付周期。增强一致性:自动化部署确保每次部署的环境和配置一致,避免了“在我机器上能运行”的
如何运用边缘计算控制器提升智能工厂的竞争力?
钡铼技术物联网关
人工智能 arm开发 linux 自动化
制造业正经历一场深刻的变革。其中,边缘计算作为一项关键技术,在提升生产效率、降低成本以及实现智能制造方面发挥着至关重要的作用。本文将探讨边缘计算在智能工厂中的应用场景及其带来的价值。边缘计算简介边缘计算是一种分布式计算范式,它使计算和数据存储更接近数据源,而不是依赖于远程数据中心或云服务。这不仅减少了延迟,提高了响应速度,还能有效减少网络带宽使用,增强系统的安全性和隐私保护能力。在工业环境中,边缘
微信小程序canvas2D全新API介绍
前端彭于晏Eddie
小程序 小程序 canvas 前端
文章目录微信小程序canvas2D介绍前言简介获取canvas节点绘制图片绘制文字绘制换行文字保存canvas踩坑canvas尺寸问题绘制图片层级问题微信小程序canvas2D介绍前言微信小程序官方在2.9.0开始支持了一个canvas2D的新API,之前的API不再进行维护,因此之后使用canvas的项目,都建议使用canvas2D来绘制。那么新的canvas2DAPI有啥好处呢?全面支持源生H
微信小程序画布canvas(新版)实现签名功能
阿成℡
小程序 微信小程序 小程序 前端
wxml文件:新版使用id获取canvas组件即可,旧版需要使用canvas-id。wxss文件:/*pages/signature/signature.wxss*/.container{padding:20rpx;height:100vh;width:100vw;overflow:hidden;display:flex;align-items:center;/*background:radial
mysql 原理_mysql底层原理
高傲的大白杨
mysql 原理
一:MySql架构1.一条sql语句如何执行的:mysql5.7查询缓存默认关闭,mysql8缓存已被移除。存储引擎对比:MySIAM:表级锁定,不支持事务,已读为主InnoDB:支持事务,支持外键,支持行级别和表级别的锁定,B+索引,效率高Memory:内存存储。Archive:用于存储和检索大量很少引用的历史、存档、安全审计信息,不支持事务。mysql架构局部性原理:读取磁盘的数据,它附近的数
Lua简易入门
阳光下的
Lua脚本语法说明(修订)Lua脚本语法说明(增加lua5.1部份特性)Lua的语法比较简单,学习起来也比较省力,但功能却并不弱。所以,我只简单的归纳一下Lua的一些语法规则,使用起来方便好查就可以了。估计看完了,就懂得怎么写Lua程序了。在Lua中,一切都是变量,除了关键字。I.首先是注释写一个程序,总是少不了注释的。在Lua中,你可以使用单行注释和多行注释。单行注释中,连续两个减号"--"表示
prompt技术结合大模型 生成测试用例
小赖同学啊
自动化测试(app pc API) python prompt 测试用例
要利用prompt技术结合大模型对目标B/S架构软件系统进行测试,以下以使用Python调用OpenAI的GPT模型进行功能测试用例生成,再借助Selenium库执行测试为例,给出一个完整的实现示例。前提条件安装依赖库:你需要安装openai和selenium库,可以使用以下命令进行安装:pipinstallopenaiselenium获取OpenAIAPI密钥:你需要在OpenAI平台上注册并获
CSS动画与变形
玲玲酱
# CSS3 前端 html5 css3
CSS动画-Animations由于该技术的规范还没有稳定,在使用前要先确保浏览器对其兼容性。Animations是css3的一个模块,使用keyframes定义如何随着时间的移动改变CSS的属性值,可以通过指定它们的持续时间,重复次数,如何重复来控制关键帧的行为。Animations由两部分组成:css动画的配置,以及一系列的keyframes(用来描述动画的开始、过程、结束状态)。不需要了解任
DeepSeek 助力 Vue 开发:打造丝滑的日期选择器(Date Picker),未使用第三方插件
宝码香车
# DeepSeek # Vue vue.js 前端 javascript ecmascript DeepSeek
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦目录DeepSeek助力Vue开发:打造丝滑的日期选择器(DatePicker),未使用第三方插件前言进入安装好的DeepSeek页面效果指令输入**属性(Props)****事件(Events)**组件代码,src\components\Dat
用 Python 实现基于特质波动率的量化投资策略
机器懒得学习
人工智能 大数据
在量化投资中,如何构建有效的投资组合是一个关键问题。特质波动率(IdiosyncraticVolatility,简称IV)作为衡量股票独特风险的指标,受到了越来越多的关注。基于特质波动率的投资策略,通过剔除市场风险,专注于每只股票独立的风险特征,有助于构建更精确的投资组合。本篇博客将介绍如何使用Python实现基于特质波动率的量化投资策略,包括数据获取、因子计算、投资组合构建以及绩效分析等重要环节
Docker 与持续集成 / 持续部署(CI/CD)的集成(二)
计算机毕设定制辅导-无忧学长
# Docker docker ci/cd 容器
五、代码示例与解释(一)Dockerfile示例以下是一个简单的基于PythonFlask应用的Dockerfile示例:#使用Python3.10-slim作为基础镜像FROMpython:3.10-slim#设置工作目录WORKDIR/app#复制项目文件到容器内的工作目录COPY./app#安装项目依赖RUNpipinstall-rrequirements.txt#暴露应用运行的端口EXPO
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.点击开