最近重新学习了一遍Hibernate框架,感觉收益颇多。学到最后不得不说下Hibernate的检索,为了提高检索速度,Hibernate提供了立即检索策略 、延迟检索策略 和左外连接检索策略 三种策略。为了满足用户不同习惯和多样化搜索需求,Hibernate提供了五中检索数据的方式,这其中我主要记录了HQL检索方式 。
说到检索,为了实现高效的检索,我们先来说下Hibernate的检索策略。
一、Hibernate的检索策略
Hibernate的session在加载对象是可以将其关联的对象也加载到缓存中来,以便调用,但在有些情况下,我们不太需要加载太多无用的对象到缓存中来,一是浪费内存,二是消耗无谓的查询。所以为了合理使用缓存,Hibernate提供了立即检索策略 、延迟检索策略 和左外连接检索策略 。
1. 立即检索策略和延迟检索策略
立即检索策略 就是立即将查询对象查询出来加进缓存,并且将其关联对象也加载出来,这样做能够及时加载自身数据和关联对象数据,但是比较占内存和执行过多的select语句。
延时检索策略 在不涉及到连级操作单张表时,只适用 session
的 load
方法,只有在用到对象除 id
以外的属性时才会去加载对象。在涉及到关联类操作时,只有在用到关联对象的时候才会去加载。优点: 由程序决定加载哪些内容,避免了大量无用的查询语句。缺点: 在session关闭后,就不能访问关联类的对象了,强行访问会发生懒加载异常
下面我们来通过例子说明下立即检索策略 和延时检索策略 的区别。下面举例用到的是 Grade
类和 Student
类,分别对应数据库里面 hbm_one2many_grade
和 hbm_one2many_student
两张表,两者是一对多关系。
① 当不涉及到关联操作,只有一张表时 get
和 load
的区别
session.get(Grade.class, 1);
会立即发送SQL查询语句,将查询对象加进缓存
session.load(Grade.class, 1);
load
执行后并不发送SQL查询语句,只有在访问到该对象的除id外的其他属性时才会发送SQL查询语句。
② 在
集合标签里面设置 lazy
属性,值分别是 true
/ false
/ extra
。
当 ...
时 ,使用懒加载
Grade grade = session.get(Grade.class, 1);
这个时候只会查询 Grade
对象,其关联的对象(set集合关联的对象)不会去查询,只有在用到关联对象的时候才会发送数据查询SQL语句。
当 ...
时 ,不使用懒加载
Grade grade = session.get(Grade.class, 1);
不采用懒加载的方式, 查询 Grade
的时候会将其关联的对象(set集合关联的对象)全部查询出来。
当 ...
时 ,Hibernate又对懒加载方式做了些优化
Grade grade = session.get(Grade.class, 1);
这个时候不会去查询set集合关联的对象
grade.getStudents().size();
这个时候也不会去查询set集合关联的对象, 而是发送条聚合查询 select count(id) from ... where grade_id =?
for (Student student : grade.getStudents()) {
//System.out.println(student.toString());
}
这个时候才会发送SQL语句查询set集合关联的对象。
③ 在
标签里面设置 lazy 属性,值分别是 false
/ proxy
/ no-proxy
。
当
时,也是其默认
session.get(Student.class, 1);
这个查询会将会 many-to-one 关联的对象也给查询出来
当
和
时,对于many-to-one关联的对象查询使用懒加载的方式,用到是才会发送SQL语句查询。
注意: 当大环境是懒加载时,可以调用 initialize(...)
方法立即加载懒加载对象。
Grade grade = session.get(Grade.class, 1);
grade.getStudents(); //这时懒加载没有被查询
Hibernate.initialize(grade.getStudents()); //即使是懒加载, 也会被查询出来
3. 左外连接检索策略
采用左外连接检索,能够使用SQL的外连接查询将关联对象加进缓存中。 优点: 使用了外连接,select语句数目少。 缺点: 可能会加载应用程序不需要的对象进缓存,白白浪费内存,同时复杂的数据库表连接也会影响检索性能。
对应 fetch
属性,可设置在
标签和
标签中,对应三种值分别是 join
/ select
/ subselect
下面拿
标签使用 fetch
属性举例
当
时进行查询操作
session.get(Grade.class, 1);
执行上面代码发送查询的SQL语句
select
...
from
hbm_one2many_grade grade0_
left outer join
hbm_one2many_student students1_
on grade0_.id=students1_.grade_id
where
grade0_.id=?
通过左外连接的方式将其
集合标签关联的对象也都全部查询出来,这时
标签里面的 lazy
属性无效。
当
时进行查询操作
这时会按照 lazy
设置方式加载关联对象,发送普通的 select SQL语句进行相关查询。
二、Hibernate的检索方式
Hibernate检索数据分为 5 中方式,分别是 OID检索、导航对象图检索、HQL检索、QBC检索、和本地SQL检索 。
1. OID检索方式
这种检索方式使我们最常用的,根据对象 id 查询对象,涉及到的方法 session.get("xx", id)
和 session.load("xx", id)
。
2. 导航对象图检索方式
通过已加载的对象导航到其他关联对象,一般用在关系数据表对象查询中。
Student student = session.get(Student.class, 1);
Grade grade = student.getGrade();
后面根据 student
对象查询里面关联的 grade
对象
3. QBC检索方式
Hibenate的QBC查询个人认为是Hibernate的很大一个亮点,提供个丰富的查询API,但是QBC据我了解几乎没有程序员使用,跟使用起来麻烦有很大关系。下面我们通过例子了解下。
以前用QBC我们都用session.createCriteria()
来开始查询,不过这种方式已经被废弃 @deprecated (since 5.2) for Session, use the JPA Criteria
,很明显作者认为以前创建QBC查询方式不够好,现在改成用 JAP Criteria,通过下面的一个查询简单看下。
@Test
public void testQBCQuery() {
//1. 创建CriteriaBuilder对象
CriteriaBuilder builder = session.getCriteriaBuilder();
//2. 获取 CriteriaQuery
CriteriaQuery criteriaQuery = builder.createQuery(Grade.class);
//3. 构建搜索语句 select * from grade
Root root = criteriaQuery.from(Grade.class);
//3.1 构建条件 + where id > 2
criteriaQuery.where(builder.gt(root.get("id"), 2));
//3.2 构建排列顺序 + order by id desc
criteriaQuery.orderBy(builder.desc(root.get("id")));
//4. 执行查询, 返回结果集
List list = session.createQuery(criteriaQuery).getResultList();
for (Grade student : list) {
System.out.println(student);
}
}
4. 本地SQL检索方式
一般我们都用Hibernate提供的 HQL检索方式,但是有时可能需要根据底层数据库的SQL方言,来生成一些特殊的查询语句,在这种情况下就需要用到Hibernate提供的原生SQL检索方式。 先前执行原生SQL语句都用 session.createSQLQuery()
,不过这个方法已经过时了 @deprecated (since 5.2) use {@link #createNativeQuery(String)} instead
,那么下面我们将用 createNativeQuery()
来展示用原生SQL语句进行查询和更新。
当我们没有指定查询结果集类型时,Hibernate将为我们返回字段值组成的数组
@Test
public void testSQLQuery() {
NativeQuery nativeQuery = session.createNativeQuery("select * from contact where id>?");
nativeQuery.setParameter(1, 2);
List list = nativeQuery.getResultList();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
}
}
当我们指定查询结果集类型时,Hibernate会帮我们把查询结果封装成对象
@Test
public void testSQLQuery2() {
String sql = "select * from contact where id>? and id nativeQuery = session.createNativeQuery(sql, Contact.class);
nativeQuery.setParameter(1, 1);
nativeQuery.setParameter(2, 3);
List list = nativeQuery.getResultList();
for (Contact contact : list) {
System.out.println(contact.toString());
}
}
测试用Hibernate执行原生SQL更新语句,用到 executeUpdate()
方法,更新、删除和插入都用这个方法
@Test
public void testSQLUpdate() {
String sql = "update contact set name=? where id=?";
NativeQuery nativeQuery = session.createNativeQuery(sql);
nativeQuery.setParameter(1, "修改后的名字");
nativeQuery.setParameter(2, 2);
int num = nativeQuery.executeUpdate();
System.out.println("影响行数 " + num);
}
5. HQL检索方式
下面我们重点来说下HQL检索方式
三、HQL检索方式详叙
HQL (Hibernate Query Language) 是面向对象的查询语言,他和SQL查询语言有些相似,在Hibernate提供的各种检索方式中,HQL是使用最广泛的一中检索方式,他可以将自行的HQL语句翻译成对应数据库的SQL语句,更换数据库十分方便。
1. HQL简单查询列表
String hql = "from Contact";
List list = session.createQuery(hql).getResultList();
for (Object object : list) { System.out.println(object); }
注意:HQL语句中关键字不区分大小写,但是实体类和对象属性要区分大小写。没有指定列查询Hibernate内部会将返回数据封装成查询类的对象。
2. HQL 语句占位符
String hql = "from Contact where id>?";
List list = session.createQuery(hql).setParameter(0, 2).getResultList();
for (Object object : list) { System.out.println(object); }
注意:占位符的索引位置跟JDBC里面参数索引有些区别,Hibernate索引位置是从 0 开始的。
3. HQL 语句中使用形参充当占位符
String hql = "from Contact where id>:id";
List list = session.createQuery(hql)
.setParameter("id", 3)
.getResultList();
System.out.println(list);
这种用 :id
来代替 ?
当占位符要更常用,因为后面可以直接根据参数名字赋值,直接明了。
4. HQL 查询单条记录
String hql = "from Contact where id=?";
Object object = session.createQuery(hql)
.setParameter(0, 2)
.getResultList()
.get(0);
System.out.println(object);
注意:这样查询出来的是单条记录,但是一般不推荐使用 .getResultList().get(0)
,因为当如果id=0的 Contact 对象不存在时,使用get(0)会抛出异常,我们通常使用下面这种方式
String hql = "from Contact where id=?";
Object object = session.createQuery(hql)
.setParameter(0, 2)
.uniqueResult();
System.out.println(object);
通过 uniqueResult()
方法返回一个Object对象,如果对象不存在则返回null,如果返回值不唯一,则抛出异常。
5. HQL 聚合查询
String hql = "select count(id) from Contact";
Object uniqueResult = session.createQuery(hql).uniqueResult();
System.out.println(uniqueResult);
同时还支持 avg()
、min()
、max()
...聚合函数的查询。
6. HQL 查询单列字段
String hql = "select c.name from Contact c";
List list = session.createQuery(hql).getResultList();
for (Object object : list) { System.out.println(object); }
7. HQL 查询多列字段,以数组盛装单行查询字段结果集,然后将各行的结果集放进List数组里
String hql = "select c.name, c.birthday from Contact c";
List list = session.createQuery(hql).getResultList();
for (Object[] objects : list) { System.out.println(Arrays.toString(objects)); }
8. HQL 查询多列字段,以对象盛装单行查询字段结果集,然后将各行的结果集放进List数组里
String hql = "select new Contact(c.name, c.birthday) from Contact c";
List list = session.createQuery(hql).getResultList();
for (Object object : list) { System.out.println(object); }
注意:要求实体类必须有对应的构造方法
9. HQL 查询结果排序
String hql = "from Contact where id>? order by id desc";
List list = session.createQuery(hql).setParameter(0, 2).getResultList();
System.out.println(list);
按照查询结果 id 进行降序排序
10. HQL 分页查询
String hql = "from Contact";
List list = session.createQuery(hql)
.setFirstResult(1)
.setMaxResults(2)
.getResultList();
System.out.println(list);
注意:Hibernate会将语句翻译成SQL语句 limit 1, 2
,setFirstResult()
指记录开始的index(index从0开始表示第一条),setMaxResults()
设置从第 index+1 条开始往后取多少条。
你可能感兴趣的:(Hibernate(三) 检索方式和策略)
Kubernetes控制平面组件:APIServer 基于 Webhook Toeken令牌 的认证机制详解
grahamzhu
云原生学习专栏 kubernetes apiserver 企业认证系统 webhook令牌 token TokenReview 系统集成
云原生学习路线导航页(持续更新中)kubernetes学习系列快捷链接Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes架构原则和对象设计(三)Kubernetes控制平面组件:etcd(一)Kubernetes控制平面组件:etcd(二)Kubernetes控制平面组件:etcd常用配置参数Kubernetes控制平面组件:etcd高可用
内外网文件传输 安全、可控、便捷的跨网数据传输方案
SoftTechAI
安全 人工智能 后端
内外网文件安全交换解决方案——深度融合钉钉生态,构建零信任跨网协作新范式一、背景与痛点:当内外网隔离遇上钉钉协作,如何破局?在内外网严格隔离的企业网络中,员工与钉钉外部伙伴的文件交互面临三重挑战:安全防线脆弱:直连传输易引发病毒入侵、数据泄露,威胁内网核心资产;操作效率低下:频繁切换网络、重复上传下载,协作流程冗长;合规审计盲区:文件流向不透明,缺乏全链路追踪,难以满足《数据安全法》等监管要求。我
Flask个人网站博客系统(全)
Jagua
flask python 后端
朋友圈已死,为了方便随时随地的记录心情、想法。我用Flask做了一个网站,功能很多,今天主要讲博客系统,“微博”和长博。主要内容1,环境准备Flask+文件系统,小站没用数据库,直接读写文件。2,“微博”页面设计输入框支持文字加粗、颜色、分段,插入链接、图片、视频。3,长博页面模板写长文章的模板,页面设计4,文件锁参考数据库锁,防止文件同时被多个进程写入,修改文件流程:拿锁、锁定、释放5,点赞收藏
flex: 1 和 flex: auto 的区别
B.-
前端 css3 css html5 html javascript
在CSS中,flex:1和flex:auto是用于设置弹性容器中的项目的弹性增长属性的值。flex属性是flex-grow,flex-shrink和flex-basis的简写,默认值为01auto:flex-grow:项目的放大比例,默认为0,即如果存在剩余空间,不放大flex-shrink:项目的缩小比例,默认为1,即如果空间不足,会适当缩小flex-basis:在分配空间之前,项目的主轴空间,
Flutter CupertinoNavigationBar iOS 风格导航栏的组件
早起的年轻人
Flutter项目开发全套教程 flutter ios
CupertinoNavigationBar是Flutter中用于创建具有iOS风格导航栏的组件,它提供了类似iOS应用中导航栏的外观和交互效果。下面将详细介绍它的相关信息和具体用法。特点iOS风格:具有iOS系统原生导航栏的外观和动画效果,包括标题样式、按钮交互等。简单易用:可以方便地设置标题、左右两侧的操作按钮等。构造函数及常用参数CupertinoNavigationBar({Key?key
Spring基础知识——笔记整理(一)
豆萌萌 网课大咖
笔记整理 spring java
Spring简介Spring是一个轻量级Java开发框架,由RodJohnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个JavaSE/JavaEE分层的full-stack(一站式)轻量级开源框架,为开发Java应用程序提供全面的基础架构支持。Spring负责基础架构,因此Java开发者可以专注于应用程序的开发。Spring的优点方便解耦,简化开发:Spring
平均数1(acwing)c/c++/java/python
xinghuitunan
c++ c语言 java python
读取两个浮点数AA和BB的值,对应于两个学生的成绩。请你计算学生的平均分,其中AA的成绩的权重为3.53.5,BB的成绩的权重为7.57.5。成绩的取值范围在00到1010之间,且均保留一位小数。输入格式输入占两行,每行包含一个浮点数,第一行表示AA,第二行表示BB。输出格式输出格式为MEDIA=X,其中XX为平均分,结果保留五位小数。数据范围0≤A,B≤10.00≤A,B≤10.0输入样例:5.
设计一个高并发的系统,如何保证数据一致性?
weixin_49526058
面试 后端 高并发
设计高并发系统时,保证数据一致性是一个非常重要的挑战,尤其是在分布式环境中。以下是一些常见的策略和方法来保证数据一致性:1.CAP定理CAP定理表明,在一个分布式系统中,不能同时满足以下三个要求:Consistency(数据一致性):所有节点在同一时间看到相同的数据。Availability(可用性):每个请求都会得到响应,无论请求是否成功。PartitionTolerance(分区容忍性):即使
利用Redis发布订阅模式、SSE实现分布式实时站内信系统
weixin_38515820
Java redis redis 分布式 java
文章目录前言一、SSE是什么?二、单机与集群的站内信实现方式有何区别?三、Redis发布、订阅模式有何特点?四、代码演示1.数据模型小结2.引入依赖3.配置RedissonClient4.编写RestController用于测试5.编写用户消息订阅逻辑6.实现消息的发布7.实现广播消息的订阅8.个人与团队消息的订阅8.效果演示总结前言站内信功能在各大系统中被广泛应用,本文结合工作的实际场景,使用j
开源项目-图书管理系统
代码先觉
开源项目 java 图书管理系统
哈喽,大家好,今天给大家带来一个图书管理系统系统主要分为图书管理,读者管理,借还管理等模块,可以下载源码了解详情项目简介本图书管理系统基于spring,springmvc,数据库为mysql。前端使用了Bootstrap。系统功能该系统实现读者和管理员登陆,图书的增删改查,读者的增删改查,借还图书,密码修改,卡号挂失,超期提醒等功能。系统登录图书管理读者管理
RocketMQ(3)-SpringBoot集成简单测试
gzh-程序员灿灿
中间件 消息队列
测试RocketMQ服务可用性我这里把provider和consumer放到同一个项目中,进行简单测试。后续写个RocketMQ的包装包。文章目录测试RocketMQ服务可用性providerconsumerconsumer监听消费testRocketMQ组的概念RocketMQ分组使用场景rocketmq的重试注意:项目中引用的rocketmq客户端,其版本需要和服务端安装的mq的版本保持一致,
PHP实现站内搜索的开源利器——WindSearch
rock365337
WindSearch php 开源 搜索引擎
WindSearch是一个基于中文分词,由纯PHP开发全文检索引擎,可快速搭建PHP站点的站内搜索,他没有任何繁琐的安装配置、不需要维护调优、不占用服务器内存、可与PHP项目完美融合在一起。github地址:https://github.com/rock365/windsearch必须极速安装~使用composer安装:composerrequirerock365/windsearch或使用Git
矩阵-矩阵置零
Vacant Seat
矩阵 二维数组 java
矩阵置零给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。在计算机科学中,一个原地算法(in-placealgorithm)是一种使用小的,固定数量的额外之空间来转换资料的算法。当算法执行时,输入的资料通常会被要输出的部分覆盖掉。不是原地算法有时候称为非原地(not-in-place)或不得其所(out-of-place)。输入:二维数组输出:二维数组思路
线代好学吗?
Vacant Seat
快期末考了,这两天的学期效率比在家高了几倍,这一周都在学习线代,在宿舍,自习室,图书馆都拿着一本太原理工大学线性代数第二版在那里翻,感觉线性代数这个东西挺有意思,挺灵活的,在这里,我总结一下一点关于线性代数的知识,也有一些是我之前入的坑吧,感觉有用的就点个赞吧!!!求四阶行列式说到这里我感觉还挺搞笑的,我之前一直以为行列式的计算都是按照二阶,三阶行列式那样对角线上的元素相乘,然后判断符号相加,就是
前端性能优化:页面加载速度慢怎么办?
好运连连女士
面试题 性能优化 前端
文章目录前端性能优化如何识别页面加载速度慢的原因性能优化的方式提高资源的请求速度http缓存--提升二次访问的响应速度CDN缓存静态资源缓存webpack的hash策略-文件资源缓存减少资源请求量图片懒加载代码构建优化webpack资源压缩treesharking-js代码的精简分包按需加载浏览器渲染优化webworkerGPU加速前端性能优化如何识别页面加载速度慢的原因方式1:lighthous
Python数据分析实战案例
master_chenchengg
python python Python python开发 IT
Python数据分析实战案例数据分析的魅力:Python与Pandas的完美结合初识Pandas:数据处理的瑞士军刀环境搭建:如何在本地安装Pandas第一步:加载和查看你的第一个数据集数据清洗的艺术:让数据更干净缺失值处理:填补或删除缺失数据异常值检测:找出数据中的“怪兽”重复数据处理:告别冗余数据探索与可视化:揭开数据的神秘面纱基本统计分析:了解数据的基本特征数据可视化:用图表讲述数据的故事相
分析React和Vue的区别与优势
Neo Evolution
前端框架
React和Vue是目前两种非常流行的前端框架/库,它们各自有独特的设计理念和特点。下面是它们在各个方面的比较,包括架构、学习曲线、性能等。1.架构与理念React:开发类型:React是一个UI库,专注于视图层的构建。它本身没有集成像Vue或Angular那样的完整框架,所以需要与其他库或工具结合使用(如ReactRouter、Redux、ContextAPI等)。设计理念:React强调组件化
error Command failed with exit code 1
泡泡Java
前端 html 后端 asp.net javascript
从传统JQuery转变到Node.js最烦的就是一接手新项目就得npminstall,浪费大量时间不说还总会报莫明其妙的错误,这次又遇到了一个errorCommandfailedwithexitcode1。因为它的相关处报的问题可能和npm本身有关,我就用yarninstall规避,并且也确实能yarnstart跑通项目。但就在我想把它打包成dist的时候,yarnbuild就又抛出了这么一个问题
Web of Science如何导出参考文献(EndNote)
泡泡Java
前端 html WebofScience EndNote 论文管理 引用格式 学术资源
打开WebofScience网站,找到要下载的论文,选中,然后导出到EndNote导出后用EndNote打开下载的CIW文件,选中,然后用Word打开,如图所示,插入引文,样式处可点击下拉三角,选择需要的引文格式。
2025vue4.x全栈学习关键技术分析线路图
mabanbang
web前端 学习 vue4 vue4.x
关键升级点说明:编译优化:Vue4.x采用WASM编译提速300%智能工具链:Vite插件市场新增AI代码审查模块跨平台能力:Uni-App支持原生ARCore/ARKit调用安全增强:默认启用WebAuthn生物认证集成建议配合Vue官方推出的「2025开发者成长计划」分阶段学习,重点关注AI工程化和元宇宙场景开发能力培养。TypeScript6.x深度集成类型推断速度提升
AI工具——将文字转变为流程图
j_inglin
人工智能 流程图
文章参考:《NapkinAI:轻松将文字变成视觉,一键生成信息图、流程图和图表》《如何使用AI辅助快速生成概念示意图》《最强配图生成工具NapkinAI现已支持中文》文章来源:csdn
PostgreSQL:更新字段慢
喝醉酒的小白
PG postgresql 数据库
目录标题PostgreSQL慢查询优化与`pg_stat_statements`使用1.启用慢查询日志2.使用`pg_stat_statements`扩展收集查询统计信息3.查找执行时间较长的查询4.分析慢查询的执行计划5.优化查询6.检查并发连接和系统资源7.进一步优化8.查看某条SQL1.**如何生成`query_id`**2.**`query_id`是否会变化?**3.**是否会变动?**4
第一个问题:AI会威胁人类吗?
释迦呼呼
AI一千问 人工智能
第一个问题:AI会威胁人类吗?对于这个问题,我的回答是:AI本身并不会威胁人类,但其是否构成威胁取决于人类如何设计、使用和监管它。下面我将从几个角度详细分析。AI的本质:人类的工具AI(人工智能)是由人类创造的工具,它的行为和决策完全基于人类设计的算法和输入的数据。换句话说,AI没有自己的意识、意图或独立的目标,因此它本身并不具备威胁人类的动机或能力。它的作用是由开发者、使用者和管理者决定的。AI
CSS垂直居中终极方案:告别复杂计算,拥抱现代布局
engchina
LINUX css 前端
CSS垂直居中终极方案:告别复杂计算,拥抱现代布局前言:为什么垂直居中如此重要?一、2024年最推荐的3种方案1.Flexbox布局(首推方案)2.Grid布局(未来趋势)3.Transform方案(传统场景备用)二、方案对比与选型指南三、实战技巧与避坑指南常见问题排查企业级项目实践四、延伸学习:现代布局新趋势1.Subgrid布局2.逻辑属性支持3.容器查询(实验性)五、升级建议与工具链总结前言
贪心算法-力扣-122. 买卖股票的最佳时机 II
dailinqing1984
Python 算法 leetcode 贪心算法 算法
题目链接给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。返回你能获得的最大利润。示例1:输入:prices=[7,1,5,3,6,4]输出:7解释:在第2天(股票价格=1)的时候买入,在第3天(股票价格=5)的时候卖出,这笔交易所能获得利润=5-1=4。随后
Java数据结构与算法(买卖股票的最佳时机二贪心算法)
盘门
java数据结构与算法实战 java 开发语言
前言买卖股票最佳时机二,此时不限次数的买卖的要求获得的利益最大化。暴力算法依旧可行,可以参考之前的练习。.-力扣(LeetCode)贪心算法原理参考:Java数据结构与算法(盛水的容器贪心算法)-CSDN博客实现原理1.定义最大利润res和下标前值pre。2.下标移动比较当前股票值prices[i]与前值大小,前值小于当前值则加入利润res。3.随着下标移动前值更新。具体代码实现classSolu
webpack和vite区别
雅望天堂i
javascript 前端
1.工作原理WebpackWebpack是一个静态模块打包工具。它会从入口文件开始,递归地分析项目中的所有依赖,构建出一个依赖图。然后,它会根据配置中的规则,使用不同的loader对各种类型的文件(如JS、CSS、图片等)进行处理和转换,最后将所有模块打包成一个或多个静态资源文件。例如,当项目中有一个JavaScript文件引入了CSS文件和图片,Webpack会先使用CSSloader处理CSS
树莓派部署syncthing实现私有云 | 树莓派小无相系列
TuTuTu_
树莓派 树莓派
手机上存着不少照片,自己又时常折腾手机,总有数据丢失的问题,又对市面上的云盘不怎么放心,所以打算在家里利用树莓派搭建一个私有云。一番查找之后,发现了syncthing。Syncthing是一个跨平台,开源且免费的基于P2P的文件同步解决方案,支持Windows,Mac,Linux,Android,syncthing官方暂不支持iOS平台,但在AppStore有可用的第三方客户端。安装syncthi
第五章:工程化实践 - 第三节 - Tailwind CSS 大型项目最佳实践
qianmoQ
Tailwind CSS:现代化开发实战指南 css 前端
在大型项目中使用TailwindCSS需要考虑更多的架构设计、性能优化和团队协作等方面的问题。本节将分享在大型项目中使用TailwindCSS的最佳实践和解决方案。项目架构设计目录结构src/├──components/│├──common/││├──Button/││├──Input/││└──Select/│├──features/││├──Auth/││├──Dashboard/││└──S
嵌入式LINUX驱动开发(三)-设备树驱动led
Lllongroad
linux 驱动开发 运维
1)添加pinctrl节点使用开发板自带的LED灯进行操作,打开dts文件,在iomuxc_snvs下创建一个“pinctrl_led的子节点”```pinctrl_leds:ledgrp{fsl,pins=;};```2)添加LED设备节点在根节点"/"创建LED灯节点,节点名称为**"gpioled"**,节点内容如下:```gpioled{#address-cells=;#size-cell
基本数据类型和引用类型的初始值
3213213333332132
java基础
package com.array;
/**
* @Description 测试初始值
* @author FuJianyong
* 2015-1-22上午10:31:53
*/
public class ArrayTest {
ArrayTest at;
String str;
byte bt;
short s;
int i;
long
摘抄笔记--《编写高质量代码:改善Java程序的151个建议》
白糖_
高质量代码
记得3年前刚到公司,同桌同事见我无事可做就借我看《编写高质量代码:改善Java程序的151个建议》这本书,当时看了几页没上心就没研究了。到上个月在公司偶然看到,于是乎又找来看看,我的天,真是非常多的干货,对于我这种静不下心的人真是帮助莫大呀。
看完整本书,也记了不少笔记
【备忘】Django 常用命令及最佳实践
dongwei_6688
django
注意:本文基于 Django 1.8.2 版本
生成数据库迁移脚本(python 脚本)
python manage.py makemigrations polls
说明:polls 是你的应用名字,运行该命令时需要根据你的应用名字进行调整
查看该次迁移需要执行的 SQL 语句(只查看语句,并不应用到数据库上):
python manage.p
阶乘算法之一N! 末尾有多少个零
周凡杨
java 算法 阶乘 面试 效率
&n
spring注入servlet
g21121
Spring注入
传统的配置方法是无法将bean或属性直接注入到servlet中的,配置代理servlet亦比较麻烦,这里其实有比较简单的方法,其实就是在servlet的init()方法中加入要注入的内容:
ServletContext application = getServletContext();
WebApplicationContext wac = WebApplicationContextUtil
Jenkins 命令行操作说明文档
510888780
centos
假设Jenkins的URL为http://22.11.140.38:9080/jenkins/
基本的格式为
java
基本的格式为
java -jar jenkins-cli.jar [-s JENKINS_URL] command [options][args]
下面具体介绍各个命令的作用及基本使用方法
1. &nb
UnicodeBlock检测中文用法
布衣凌宇
UnicodeBlock
/** * 判断输入的是汉字 */ public static boolean isChinese(char c) { Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);
java下实现调用oracle的存储过程和函数
aijuans
java orale
1.创建表:STOCK_PRICES
2.插入测试数据:
3.建立一个返回游标:
PKG_PUB_UTILS
4.创建和存储过程:P_GET_PRICE
5.创建函数:
6.JAVA调用存储过程返回结果集
JDBCoracle10G_INVO
Velocity Toolbox
antlove
模板 tool box velocity
velocity.VelocityUtil
package velocity;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.c
JAVA正则表达式匹配基础
百合不是茶
java 正则表达式的匹配
正则表达式;提高程序的性能,简化代码,提高代码的可读性,简化对字符串的操作
正则表达式的用途;
字符串的匹配
字符串的分割
字符串的查找
字符串的替换
正则表达式的验证语法
[a] //[]表示这个字符只出现一次 ,[a] 表示a只出现一
是否使用EL表达式的配置
bijian1013
jsp web.xml EL EasyTemplate
今天在开发过程中发现一个细节问题,由于前端采用EasyTemplate模板方法实现数据展示,但老是不能正常显示出来。后来发现竟是EL将我的EasyTemplate的${...}解释执行了,导致我的模板不能正常展示后台数据。
网
精通Oracle10编程SQL(1-3)PLSQL基础
bijian1013
oracle 数据库 plsql
--只包含执行部分的PL/SQL块
--set serveroutput off
begin
dbms_output.put_line('Hello,everyone!');
end;
select * from emp;
--包含定义部分和执行部分的PL/SQL块
declare
v_ename varchar2(5);
begin
select
【Nginx三】Nginx作为反向代理服务器
bit1129
nginx
Nginx一个常用的功能是作为代理服务器。代理服务器通常完成如下的功能:
接受客户端请求
将请求转发给被代理的服务器
从被代理的服务器获得响应结果
把响应结果返回给客户端
实例
本文把Nginx配置成一个简单的代理服务器
对于静态的html和图片,直接从Nginx获取
对于动态的页面,例如JSP或者Servlet,Nginx则将请求转发给Res
Plugin execution not covered by lifecycle configuration: org.apache.maven.plugin
blackproof
maven 报错
转:http://stackoverflow.com/questions/6352208/how-to-solve-plugin-execution-not-covered-by-lifecycle-configuration-for-sprin
maven报错:
Plugin execution not covered by lifecycle configuration:
发布docker程序到marathon
ronin47
docker 发布应用
1 发布docker程序到marathon 1.1 搭建私有docker registry 1.1.1 安装docker regisry
docker pull docker-registry
docker run -t -p 5000:5000 docker-registry
下载docker镜像并发布到私有registry
docker pull consol/tomcat-8.0
java-57-用两个栈实现队列&&用两个队列实现一个栈
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
/*
* Q 57 用两个栈实现队列
*/
public class QueueImplementByTwoStacks {
private Stack<Integer> stack1;
pr
Nginx配置性能优化
cfyme
nginx
转载地址:http://blog.csdn.net/xifeijian/article/details/20956605
大多数的Nginx安装指南告诉你如下基础知识——通过apt-get安装,修改这里或那里的几行配置,好了,你已经有了一个Web服务器了。而且,在大多数情况下,一个常规安装的nginx对你的网站来说已经能很好地工作了。然而,如果你真的想挤压出Nginx的性能,你必
[JAVA图形图像]JAVA体系需要稳扎稳打,逐步推进图像图形处理技术
comsci
java
对图形图像进行精确处理,需要大量的数学工具,即使是从底层硬件模拟层开始设计,也离不开大量的数学工具包,因为我认为,JAVA语言体系在图形图像处理模块上面的研发工作,需要从开发一些基础的,类似实时数学函数构造器和解析器的软件包入手,而不是急于利用第三方代码工具来实现一个不严格的图形图像处理软件......
&nb
MonkeyRunner的使用
dai_lm
android MonkeyRunner
要使用MonkeyRunner,就要学习使用Python,哎
先抄一段官方doc里的代码
作用是启动一个程序(应该是启动程序默认的Activity),然后按MENU键,并截屏
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRun
Hadoop-- 海量文件的分布式计算处理方案
datamachine
mapreduce hadoop 分布式计算
csdn的一个关于hadoop的分布式处理方案,存档。
原帖:http://blog.csdn.net/calvinxiu/article/details/1506112。
Hadoop 是Google MapReduce的一个Java实现。MapReduce是一种简化的分布式编程模式,让程序自动分布到一个由普通机器组成的超大集群上并发执行。就如同ja
以資料庫驗證登入
dcj3sjt126com
yii
以資料庫驗證登入
由於 Yii 內定的原始框架程式, 採用綁定在UserIdentity.php 的 demo 與 admin 帳號密碼: public function authenticate() { $users=array( &nbs
github做webhooks:[2]php版本自动触发更新
dcj3sjt126com
github git webhooks
上次已经说过了如何在github控制面板做查看url的返回信息了。这次就到了直接贴钩子代码的时候了。
工具/原料
git
github
方法/步骤
在github的setting里面的webhooks里把我们的url地址填进去。
钩子更新的代码如下: error_reportin
Eos开发常用表达式
蕃薯耀
Eos开发 Eos入门 Eos开发常用表达式
Eos开发常用表达式
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
蕃薯耀 2014年8月18日 15:03:35 星期一
&
SpringSecurity3.X--SpEL 表达式
hanqunfeng
SpringSecurity
使用 Spring 表达式语言配置访问控制,要实现这一功能的直接方式是在<http>配置元素上添加 use-expressions 属性:
<http auto-config="true" use-expressions="true">
这样就会在投票器中自动增加一个投票器:org.springframework
Redis vs Memcache
IXHONG
redis
1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别。
2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构的存储。
3. Redis支持数据的备份,即master-slave模式的数据备份。
4. Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。
Red
Python - 装饰器使用过程中的误区解读
kvhur
JavaScript jquery html5 css
大家都知道装饰器是一个很著名的设计模式,经常被用于AOP(面向切面编程)的场景,较为经典的有插入日志,性能测试,事务处理,Web权限校验, Cache等。
原文链接:http://www.gbtags.com/gb/share/5563.htm
Python语言本身提供了装饰器语法(@),典型的装饰器实现如下:
@function_wrapper
de
架构师之mybatis-----update 带case when 针对多种情况更新
nannan408
case when
1.前言.
如题.
2. 代码.
<update id="batchUpdate" parameterType="java.util.List">
<foreach collection="list" item="list" index=&
Algorithm算法视频教程
栏目记者
Algorithm 算法
课程:Algorithm算法视频教程
百度网盘下载地址: http://pan.baidu.com/s/1qWFjjQW 密码: 2mji
程序写的好不好,还得看算法屌不屌!Algorithm算法博大精深。
一、课程内容:
课时1、算法的基本概念 + Sequential search
课时2、Binary search
课时3、Hash table
课时4、Algor
C语言算法之冒泡排序
qiufeihu
c 算法
任意输入10个数字由小到大进行排序。
代码:
#include <stdio.h>
int main()
{
int i,j,t,a[11]; /*定义变量及数组为基本类型*/
for(i = 1;i < 11;i++){
scanf("%d",&a[i]); /*从键盘中输入10个数*/
}
for
JSP异常处理
wyzuomumu
Web jsp
1.在可能发生异常的网页中通过指令将HTTP请求转发给另一个专门处理异常的网页中:
<%@ page errorPage="errors.jsp"%>
2.在处理异常的网页中做如下声明:
errors.jsp:
<%@ page isErrorPage="true"%>,这样设置完后就可以在网页中直接访问exc