if(ckecks[i].cheacked==true)
string+=checks[i].value+”,”;
}
隐藏表单域提交到后台
document.getElementById(“string”).value=string;
后端通过String的slit(regex)以regex表示的符号切割长字符串为字符串数组
长整数分位显示;long最长为19位
转为字符串以后,StringBuffer的reverse()先反序
POI组件将数据导出到Excel表
response.setContentType(“application/vnd.ms-excel”);
ServletOutputStream out=response.getOutputStream();
HSSFWorkbook wb=new HSSFWorkbook();//创建excel表格
HSSFSheet sheet=wb.createSheet(“数据”);//创建工作簿
sheet.setColumnWidth(4,5000);//设置列宽
HSSFRow titileRow=sheet.createRow(0);//标题行
HSSFCell titleCell=titleRow.createCell(0);//标题行的第一个单元格
titileCell.setCellValue(“用户名”);
…n个单元格
HSSFRow valueRow=sheet.createRow(1);//创建第二行
…对应n个单元格且设值
wb.write(out);out.flush();out.close();
过滤器:防盗链,日志记录,字符替换,异常捕获,用户及权限验证,字符编码,弹出对话框形式的公告信息,文件上传
项目安全性:
攻击性安全:input框JS验证,java代替重复校验,避免非法字符和空格和SQL注入;特殊模块如登录时生成验证码,支付时产生随机码,都有时间限制
访问安全:页面静态化,使用缓存,减小服务器压力
数据安全:数据库敏感数据加密后存储;数据库读写分离;备份
JDBC
Driver:加载数据库驱动 (jar包);Class.forName(“”)
DiverManager:管理JDBC驱动服务类,获得数据库连接 :DiverManager.getConnection(url,user,password)
Connection:数据库连接对象,创建Statement对象
Statement createStaetment();
PrepareStatement prepareStatement(sql);
CallableStatement prepareCall(sql);
Savepoint setSavepoint([name]);//创建保存点
void setTransactionIsolation(level);// 设置事务隔离级别
void rollback([savepoint]);//回滚(到保存点)
void setAutoCommit(boolean);//关闭自动提交,打开事务;因为Connection默认会自动提交,即关闭事务
void commit();//提交事务
Statement(执行SQL语句 ,涉及批量更新方法)-PreparedStatement(安全,防SQL注入 (如永真表达式),in参数,占位符,预编译SQL语句 即下面的方法不传入sql参数,新增void setXxx(parameterIndex,value))-CallableStatement(out参数,调用存储过程):
ResultSet excuteQuery(sql);操作结果集
操作指针指向数据:absolute(row)row行;beforeFirst()初始状态,首行之前;first()首;previous()上一行;next()下一行;last()尾行;afterLast()尾行之后
然后通过索引或列名(推荐)获得列数据:getXxx(index/string)
boolean excute(sql);
int excuteUpdate(sql);//受影响行数为0或没有结果,返回false
结果集从1开始;可回滚;
回收和关闭资源
SQLException:应用无法连接数据库;查询语法错误;查询目标表或列不存在;插入或更新的数据违反数据库约束
处理Blob(二进制长对象如图片,声音文件)类型数据:PrepareStatement的setBinaryStream(parameterIndex,inputStream)保存Blob数据到数据库;ResultSet的getBlob(columnIndex)取出得到Blob对象,对象的getBytes()获取数据,或getBinaryStream()获取数据的输入流
最佳实践:批量操作;使用PreparedStatement避免SQL异常;使用数据库连接池;通过列名获取结果集而不是下标;
模板:消除冗长的JDBC编码
JdbcTemplate(推荐):基于索引参数的查询;NamedParameterJdbcTemplate:值以命名参数形式绑定到SQL;SimpleJdbcTemplate(废弃):自动装箱、泛型和可变参数
构建以dataSource为参数且返回模板对象的模板bean
tx:annotation-driven:事务驱动(spring通过AOP实现事务的根本原因);配合AOP配置相关事务操作
实现DataSource的bean(使用配置中的参数)的Connection,Statament以及CURD,ResultSet @Repository(标注参与数据库操作的bean)的bean中引入模板类,在@Inject处自动注入;执行CURD方法(提供参数即可,模板类自动获取连接、创建语句和执行SQL)
MySql
数据库三范式
1NF
列的原子性(列不可再分)
2NF
先满足1NF,然后表必有主键,其他列必完全依赖主键
3NF
先满足2NF,然后非主键列直接依赖主键,消除传递依赖
事务propagation管理insert,update,delete,ACID特性
原子性
不可分割,即事务是应用的最小执行单位要么都执行,要么都不执行(回滚后数据状态与事务执行之前一致)
一致性
事务从一种一致的状态到另一种一致的状态
隔离性 :并发的各个事务的执行互不干扰;5个隔离性
默认default
读未提交read_uncommitted
事务1可以操作还未提交的事务2 ;隔离性最低(不能避免脏读等所有问题),并发性高
读已提交read_committed
事务1不可以操作未提交的事务2;防止脏读 (指修改但未提交的数据,之后事务2回滚了,事务1读到脏数据)
读可重复 repeatable_read(默认)
防止脏读、不可重复读 (指事务1读取数据后,事务2修改数据并提交,事务1再次读取而数据不一致)
串行化serializable
严格的事务隔离,事务串行执行;级别最高,避免脏读,不可重复读,幻/虚读 (指事务2增加了数据并提交,事务1会感觉貌似多了些数据)
持久性
提交后永久存储(数据库操作完成后都应该commit(),失败后rollback())
事务控制(begin/start transaction,commit,rollback…);自动提交或手动提交(begin-rollback-commit)
传播行为
PROPAGATION_REQUIRED(默认)
支持当前事务(如果没有则新建)
PROPAGATION_SUPPORTS
支持当前事务(如果没有则以非事务方式执行)
PROPAGATION_MANDATORY
支持当前事务(如果没有则抛出异常)
PROPAGATION_REQUIRES_NEW
总是开启新事务(如果存在则当前事务挂起)
PROPAGATION_NOT_SUPPORTED
总以非事务方式执行(如果存在挂起)
PROPAGATION_NEVER
以非事务方式执行(如果存在则抛出异常)
默认值为0-5;(java类TransactionDefinition新添了中自定义的初始值为6)PROPAGATION_NESTED—事务存在,则嵌套事务执行
只读:
事务超时:
mysql有存储引擎如MyISAM(默认),InnoDM,MEMOORY,MERGE,它们各有支持如存储限制、事务安全、锁机制、各种索引类型、数据缓存、数据压缩、内存使用、外键等
基本关系(表):实际表,对实际存储数据的逻辑表示
查询表:查询结果
视图表:由基本表或视图表导出的虚表
关系操作:查query,插insert,删delete,改update
完整性约束:实体完整性(主键不为空)+参照完整性(外键为空或另一个表的主键)+用户定义完整性(SQL约束列表)
标准语言SQL(structured query language):
select [*/all/distinct] 目标列表达式列表 from 表名/视图名列表/(selcte子句) [as..]
[ where 条件表达式 ](根据where条件从from指定集中选出元组并按照select的要求形成结果)
[ group by 列名 [having 条件表达式]](按列名的值分组,值等为一组;分组后having限制(聚集函数作用于每一组)满足条件的组才输出)
[ order by 列名 [asc/desc]]
条件表达式:=,>...,!=,between.and,in,like,is null,and,or以及not配合
like字符匹配,字符模糊%(任意长度字符)和_(任意单个字符)
函数
(聚集只能用于select后或having后面)数值函数
count(),sum(),avg(),max(),min()
abs(),cell(),floor(),mod()
rand()0-1随机数
round(n,count)四舍五入保留指定位数
truncate(n,count)截取为指定位数
字符串函数
concat(str1…strn),lower/upper(str)
left/right(str,count);//返回字符串左/右边的指定个字符
insert(str,fromIndex,count,newstr);//替换
lpad/rpad(str,count,fillstr);//从左/右填充指定个字符
ltrim/rtrim/trim(str);//去空格
repeat(str,count);//重复指定次
replace(str,oldChar,newChar);//替换所有oldChar
strcmp(str1,str1);//比较
substring(str,fromIndex,count);//截取
日期函数
curdate()/curtime()/now()://当前日期、时间、日期时间
year/monthname/week(date)://年、月、年的第几周
hour/minute(time)://时、分
date_format(date,fmt)
date_add(date,intervalExpressionType)
datediff(date1,date2);//天数差
流程函数
if(value,t,f);//如果value真,返回t,否则返回f
ifnull(value1,value2);//如果value1不null则返回,否则返回value2
case [expression] when [value1/expression] then [result1]…else [default] end;//如果[表达式结果等于]value1真,返回result1,否则default;可以多个when…then
其他函数
datebase()数据库名,version()版本,user()用户名,inet_ation(ip)ip地址的数字表示,inet_ntop(num)数字表示的IP地址,password(str)加密,MD5()
几种查询
连接查询
等值/非等值连接:选出满足条件的元组数据并拼接成在一起
from 表列表 where 表1.字段=(等连接词)表2;可自连接(别名区分)
外连接:选出左表/右表所有元组并拼接右表/左表满足条件的元组数据,不满足的元组显示数据为null
嵌套查询
在where或having中嵌套查询块(select..from..where)
嵌套条件:=(等比较运算符,要求内存查询返回的一定是单个值),in(结果集),any/some/all(多值),exists
集合查询
对查询结果的并union,交intersect,差except
基于派生表(中间表)的查询
子查询位于from后
数据操作manipulation:DML
增
inser into 表名 [列名列表] values(值列表)
删
delete from 表名 [where ...]
每次删一行数据;删除操作被作为事务保存在日志,日后可回滚;没有条件则删除表中所有数据,等同于truncate table 表名;//一次性永久性删除表中所有行而不记录单个行删除操作;不会激活触发器;速度快;不回滚
drop
删除数据和表格;隐式提交,不回滚;同truncate属于DDL语言;速度最快
改
update 表名 set 列名=值(列表) where ...
模式=表+视图+索引;
约束:primary key,unique,not null,foreign key..references..,;
建:
create schema 名...,数据库的命名空间
create table 名(列名 数据类型 列级完整性约束条件,...)
数据类型
数值
严格数值
integer/int(4字节),smallint(2),decimal/dec,numeric
近似数值
float(4),real,double(8)
不同长度
tinyint(1),mediumint(3),bigint(8)
位bit
区别SQL中int(数字),表示数字宽度,默认int(11)
日期时间
1000年以后:日期date(4),日期时间datetime(8)
1970年以后:当前系统日期时间且格式化timestamp(4),时间time(3)
1901以后:year(1)
字符串
char(0-255定长即删除尾部空格),varchar(0-65535变长即保存尾部空格),tinblob(0-255),mediumblob,blob(0-65535),longblob,text同理
二进制字符串binary(n定长),varcharninary(n变长)
enum,set
create view 名;当定义主键/唯一/外键约束时会自动创建对应索引
create [unique索引值对应唯一数据记录] [cluster聚簇索引] index 名 on tableName(列名[(字节数)])(列名列表且asc/desc)
索引 :为经常需要查询的列建立索引;单列索引和组合索引(一个索引包含多列);出现在where子句而不是select后的列适合建索引;列基数越大的适合(如性别列基数太小);列值为字符串的,使用短索引即前缀遍历;索引增加额外存储空间,降低写操作性能,修改表时更新或重构费时
索引类型:
顺序文件上的索引:针对记录值按升序或降序存储的记录创建的顺序索引文件
B+树索引:动态平衡
散列索引:查找快
位图索引
或者分为唯一索引 (列或列组合建立的索引,值不重复,可为空),非唯一索引,主键索引 (建立索引的列为主键,唯一),聚(集)簇索引 (表中数据物理顺序和索引的排列顺序一致,唯一)
优点:加速查询;缺点:增加开销(维护索引尤其在记录的CURD时)和增加空间(来存储索引信息 )
drop schema/index/view 名 [on tableName;mysql要求一个表中索引不能同名]
drop table 名 [restrict默认有限制即若有依赖对象则表不能删除/cascade无限制,即依赖对象全被删除]
限制表示表存在依赖对象如被其他表约束引用,存在索引、视图、触发器、存储过程、函数等
视图、存储过程、函数不被删除但失效
添加列:alter table student add [column] 新列名 数据类型;(数据默认空值填充)
修改数据类型:alter table student alter column Sage INT
添加约束:alter table student add unique(Sage)
改索引名:alter index 名 rename to 新名
触发器:特殊的定义在关系表上的一类由事件驱动的存储过程;保存在数据库服务器,自动激活调用;是更灵活,可实施更复杂的检查和操作,更精细和强大的数据控制能力的约束;预编译;
create trigger 名
befor/after 触发事件insert/update/delete on 表名
referencing new/old row as 变量名
for each row/statement //类型:行级触发和语句级触发
[when 触发条件] 触发动作insert/update/delete
数据库连接池:服务器启动---建立一定数量的池连接,并一直维持不少于此数目的池连接---客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙;如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定;当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接;
DBCP稳定,C3P0性能高
数据库设计步骤:需求分析,概念结构设计,逻辑结构设计,物理结构设计,数据库实施,数据库运行与维护
SQL优化:
少使用*而具体写出需要返回的字段即不要全表扫描,减少语句解析;
外键使用索引,避免在where子句中有索引的字段进行运算而导致索引失效;
在where及order by设计的列建立索引;
表中字段避免null而应设默认值;避免在where子句中对字段进行null值判断和表达式操作,这导致引擎放弃索引而全表扫描;
>=代替>(后者查询后比较,前者直接查询);
尽量多commit()即分段批量提交;
批量sql操作如删除id in(1,2,3)而不是三条删除语句;
存储过程减少数据库访问次数;特殊时候truncate替换delete;
in中的常量存储在一个数组且排好了序,in中包含的数值不应过多;对连续的数字,尽量用between;
当只需要一条数据时,使用limit 1;
排序的字段没用到索引,则少排序;
union all 代替union;
in适合外表大而内表小的情况(in先执行子查询,即以内表为驱动);exists反之(以外表为驱动表,先访问);推荐not exists而不是not in,not in可能存在逻辑问题;
left join以左表为驱动表,所以左表应小;同理right join;inner join会自动以数据少的表为驱动表,推荐;
分段查询:查询范围过大时,分段查询后,结果合并;
不推荐前置“%”的模糊查询,这导致索引失效而全表扫描;可使用全文索引;
联合索引遵循最左前缀法则:常用的查询字段放在最前;从左到右出现的子集索引可以如同联合索引,否则不行,如联合索引(1,2,3)可以等同(1,2)但(2,3)无法使用此索引;
常见数据错报错:
参数max_connections默认151;报错too many connections;
从库与主库数据冲突:
4.学生-课程数据库
学生表:Student(Sno,Sname,Ssex,Sage,Sdept系);
课程表:Course(Cno,Cname,Cpno,Ccredit学分);
成绩/学生选课表:SC(Sno,Cno,Grade);
建表:
CREATE TABLE Student (Sno char(9) PRIMARY KEY ,Sname varchar(20) union,Ssex char(2),Sage SMALLINT,Sdept char(20));
Create table Course(Cno char(4) PRIMARY KEY ,Cname char(40) not null,Cpno char(4),Ccredit smallint,FOREIGN KEY(Cno) references Course(Cno) );
Create table SC(Sno char(9),Cno char(4),Grade smallint,primary key(Sno,Cno),foreign key(Cno) references Course(Cno));
查询:
出生年份:
当前年份-Sage;
查询既不是CS系,MA系,IS系的学生:
select Sname form student where Sdept not in(“CS”,”MA”,”IS”);
查询选了3门以上课程的学生学号
select Sno from SC group by Sno having count(*)>3;
查询平均成绩>=90分的学生学号和平均成绩
select Sno,avg(Grade) from SC group by Sno having avg(Grade>=90);//只涉及SC表
查询选修课程2且该课程成绩大于90分的学生学号和姓名
select Student.Sno,Sname from Student,SC where Student.Sno=SC.Sno and SC.Cno=’2’ and SC.Grade>90;//涉及Student表和SC表,等值连接
查询选修课程语文的学生学号和姓名
select Sno,Sname from Student where Sno in(select Sno from SC where Cno in(select Cno from Course where Cname=’语文’));//课程名属于Course,学号和姓名属于Student,两表没有直接联系,需通过SC表连接;先查课程为语文的课程号Cno,再查选了Cno的学生号Sno,最后取出Sno和Sname;
它的等值连接查询(推荐):select Student.Sno,Sname from Student,SC,Course where Student.Sno=SC.Sno and SC.Cno=Course.Cno and Course.Cname=’语文’;
查询选了课程1号的学生姓名
select Sname from Student where exists (select * from SC where Sno=Student.Sno and Cno=’1’);
查询选了所有课程的学生姓名
select Sname from Student where not exists (select * from Course where not exists(select * from SC where Sno=Student.Sno and Cno=Course.Cno));
查询所有学生的学号,姓名,选课数,总成绩
select Student.Sno,Student.Sname,count(Cno),sum(Grade) from Student join SC on Student.Sno=SC.Sno group by Student.Sno,Sname;
查询所有课程成绩都<60分的学生学号和姓名
select Sno,Sname from Student where Sno not in(select Student.Sno from Student,SC where Student.Sno=SC.Sno and SC.Grade>60);
查询‘001’课程分数比‘002’课程高的学生学号
select a.Sno from (select sno, score from sc where cno=’001’ ) a,(select sno,score from sc where cno=’002’ ) b
where a.score>b.score and a.sno=b.sno;
查询姓李老师的人数
select count(distinct(tname)) from teacher where tname like ‘李%’;
用一个SQL语句查询N种数据:
select sum(case when table.salary>9999 and table.age>35 then 1 else 0 end) as “salary>9999 and age>35”,sum(case when table.salary……),… from table;
连接字符串(与null连接的都为null)
select concat(“str1”,”str2”,”str3”),concat(“str”,null)
查询工资,大于2000的显示”high”,否则显示”low”
select if(salary>2000,’high’,’low’) from …
select case when salary>2000 then ‘high’ else ‘low’ end from…
建索引
create index citys on city(cityName(10));
修改名为‘张’的薪水为5000,性别为‘男’
update tableName set salary=5000,sex=’男’ where name=’张’;
统计学生总分
select name,(chinese+math+english) as total from student;
工资多于张员工的员工信息
select * from employee where salary>(select salary form employee where name=’张’);
查询员工姓名及他的上司姓名
select 员工.name ,上司.name from employee 员工 left jion employee 上司 on 员工.上司编号id=上司.id;
查询雇佣时间小于其上司的员工姓名和上司姓名
select 员工.name,上司.name from employee 员工,employee上司 where 员工.上司id=上司.id and 员工.hireDate<上司.hireDate;
返回从事‘a’工作的员工姓名和所在部门
select 员工.name,dname from employee 员工,dept where 员工.job=’a’ and 员工.deptno=dept.deptno;
返回所有部门及部门最低工资
select deptno,min(salary) from employee group by deptno;
查询销售部的所有员工姓名
select ename from employee 员工,dept 部门 where 部门.dname=’销售部’ and 员工.deptno=(select deptno from dept where dname=’销售部’);
查询薪资水平多于平均薪资的员工
select * from employee where salary>(select avg(salary) from employee);//注意聚合函数(group function)不能放在where里即不能where salary>avg(salary)
查询与张从事相同工作的员工
selct * from employee where job=(select job from employee where ename=’张’) and ename!=’张’;//同一部门:where edeptno=(select edeptno from employee where ename=’张’) and ename!=’张’;
返回工资高于a部门所有员工的员工
select * from employee where salary> all(select salary from employee where edeptno=’a’);
借书系统
CARD 借书卡:CNO 卡号,NAME 姓名,CLASS 班级
BOOKS图书: BNO 书号,BNAME 书名,AUTHOR 作者,PRICE 单价,QUANTITY 库存册数
BORROW借书记录: CNO 借书卡号,BNO 书号,RDATE 还书日期
16.查询借书超过5本的读者的借书卡号和册数
select cno,count(*) from borrow group by cno having count(*)>5;
查询借了水浒的读者的姓名和班级
select * from card c where exists(select * from borrow bo,books b where bo.bno=b.bno and b.bname=’水浒’ and bo.cno=c.cno);
查询过期未还图书的借书卡号,书号及归还日期
select * from borrow where rdate
查询借了a但没有借b的读者的借书卡号并降序
select bo.cno from borrow bo,books b
where bo.bno=b.bno and b.bname=’a’
and not exists(select * from borrow bo2,books b2 where bo2.bno=b2.bno and b2.bname=’b’ and bo2.cno=bo.cno)
grop by bo.cno desc
将001班同学的归还日期延长一周
update borrow set rdate=dateAdd(day,7,borrow.rdate) from card,borrow where card.cno=borrow.cno and card.class=’001’;
20. 删除无人借阅的图书记录
delete from books where not exists(select * from borrow where bno=books.bno);
21.建立视图显示001班借书信息
create view v as
select * from borrow bo,card c,books b where bo.cno=c.cno and bo.bno=b.bno and c.class=’001’
分页查询select * from table limit (start-1)*limit,limit;
去重:Mysql不能删除查询出来的记录的,而是通过一张临时表且保留一条记录:
delete from table where id in (select id from (select id from table where expect in (select expect from table group by expect having count(expect)>1) and id not in(select min(id) from table group by expect having count(expect)>1)) as tmpresult)
你可能感兴趣的:(javaWeb之一些基础:JavaScript,jQuery,Ajax,JSP,Servlet,MySQL,)
JVM内存监控及调优分析
闲着无聊整些资料
JVM jvm java linux
一、内存监控背景在做JVM内存分析前,需要堆JVM内存及垃圾回收算法和垃圾回收器有一定了解,具体可以参考我之前的一篇文章:常见的垃圾回收器及垃圾回收算法1.1、为什么要做内存监控我们在做开发的时候不可避免的会遇到一些问题,诸如下面这些问题:生产环境发生了内存溢出该如何处理?生产环境应该给服务器分配多少内存合适?如何对垃圾回收器的性能进行调优?生产环境CPU负载飙高该如何处理?生产环境出现死锁该如何
SQLite学习(十一)使用JDBC读写SQLite数据,基于Java实现
Designer 小郑
SQLite从入门到实战 sqlite 数据库 sql java jdbc
1.前言2.基础工作2.1创建Java项目2.2依赖Jar包3.连接SQLite4.查询SQLite数据5.新增SQLite数据6.总结1.前言在上一篇《SQLite学习(十)SQLite的注入问题的防范、数据库文件导入和导出》中,讲解了SQLite的SQL注入问题和应对措施,在本篇博客中,将继续讲解如何使用JDBC读写SQLite数据。同学们将学习到:JDBC是什么使用JDBC读写SQLite请
JVM 调优
百里自来卷
jvm
在生产环境中,JVM调优是确保Java应用程序性能和稳定性的重要步骤。调优的目标通常是减少垃圾回收的时间、降低内存使用和提高应用程序的吞吐量。以下是一些常见的JVM调优策略和方法。选择合适的垃圾收集器-XX:+UseG1GC调整堆内存大小,通过调整堆内存的大小,可以控制应用程序的性能设置初始堆大小:-Xms512m设置最大堆大小:-Xmx2048m设置年轻代大小:-Xmn256m一般推荐将初始堆和
【测试语言篇四】Python进阶篇之json模块
m0_37135615
编程语言 python php 开发语言
一、json模块介绍JSON(JavaScript对象表示法)是一种轻量级数据格式,用于数据交换。在Python中具有用于编码和解码JSON数据的内置json模块。只需导入它,就可以使用JSON数据了:importjsonJSON的一些优点:JSON作为“字节序列”存在,在我们需要通过网络传输(流)数据的情况下非常有用。与XML相比,JSON小得多,可转化为更快的数据传输和更好的体验。JSON非常
垃圾回收机制是什么 ?JVM 核心结构?
胡图蛋.
jvm
垃圾回收机制是什么jvm的垃圾回收机制是GC(GarbageCollection),也叫垃圾收集器。GC基本原理:将内存中不再被使用的对象进行回收;GC中用于回收的方法称为收集器,由于GC需要消耗一些资源和时间,Java在对对象的生命周期特征进行分析后,按照新生代、老年代的方式来对对象进行收集,以尽可能的缩短GC对应用造成的暂停。不同的对象引用类型,GC会采用不同的方法进行回收,JVM对象的引用分
Web三要素:HTML之ARIA可访问性(3)
双囍菜菜
前端随记 前端 html 服务器 ARIA
ARIA:为Web构建数字盲道的技术革命文章目录ARIA:为Web构建数字盲道的技术革命一、屏幕背后的黑暗世界:一个被忽视的用户群体1.1触目惊心的现实案例1.2法律合规的达摩克利斯之剑二、ARIA技术体系的三重维度2.1角色(Roles):定义元素身份常用角色分类2.2属性(Properties):描述元素特征关键属性矩阵2.3状态(States):反映动态变化状态同步机制三、ARIA实战:构建
非对称加密:SSL/TLS握手的数学基石
安全
1.密钥交换的密码学困局在未加密的HTTP通信中,攻击者可通过中间人攻击(MITM)窃听或篡改数据。SSL/TLS协议的核心挑战在于:如何在不安全的信道上建立安全通信?这本质上是一个“密钥分发问题”——若使用对称加密(如AES),双方需要共享同一密钥,但密钥本身如何安全传递?非对称加密的突破性在于公钥与私钥的分离。以RSA算法为例,其数学基础是大质数分解难题:选择两个大质数p和q(通常≥2048位
JVM性能监控与调优
小码快撩
jvm
导语JVM性能监控与调优是一个涵盖多个层面的复杂任务,涉及对JVM内部工作原理的理解、性能指标的监控、问题定位与优化策略的实施。以下是学习JVM性能监控与调优时应关注的主要技术点1.JVM基础知识JVM性能监控与调优之JVM基础知识在进行JVM性能监控与调优之前,深入理解JVM的基本知识是至关重要的。以下概述了JVM性能监控与调优所需掌握的核心基础知识:1.JVM内存区域划分堆内存(Heap):存
数据标注质量对AI模型质量的影响分析
自由鬼
行业发展 IT应用探讨 人工智能 机器学习 深度学习 AI
上、数据标注质量与AI模型的质量关系数据标注是AI最基础的工作,数据标注的质量决定了AI质量,影响数据标注质量的是数据标注的规则。1、数据标注是AI最基础的工作:数据标注是构建高质量AI模型的基石:数据标注尤其是在监督学习范式下,是AI领域最基础、最关键的工作之一。没有高质量的标注数据,就如同建造高楼大厦没有坚实的地基,AI模型就无法有效地学习和训练,最终的AI质量也就无从谈起。训练数据是AI模型
基于k3s部署Nginx、MySQL、SpringBoot和Redis的详细教程
1.安装k3s集群1.1单节点快速部署#使用root或sudo权限执行curl-sfLhttps://get.k3s.io|sh-#验证安装sudokubectlgetnodes#输出应为Ready状态sudosystemctlstatusk3s1.2配置kubectl权限(可选)mkdir-p~/.kubesudocp/etc/rancher/k3s/k3s.yaml~/.kube/config
HarmonyNext实战:基于ArkTS的高性能区块链应用开发
harmonyos-next
HarmonyNext实战:基于ArkTS的高性能区块链应用开发引言区块链技术作为一种去中心化、安全可信的分布式账本技术,正在各个领域得到广泛应用。本文将深入探讨如何利用ArkTS语言在HarmonyNext平台上开发一个高性能的区块链应用,涵盖从区块链基础概念到智能合约开发的完整流程。我们将通过一个实际的案例——去中心化投票系统,来展示如何在HarmonyNext上实现区块链技术的落地应用。1.
HarmonyNext实战:基于ArkTS的高性能音视频处理应用开发
harmonyos-next
HarmonyNext实战:基于ArkTS的高性能音视频处理应用开发引言在音视频处理领域,实时性和性能是关键。随着HarmonyNext生态系统的不断发展,开发者可以利用ArkTS语言构建高性能的音视频处理应用。本文将深入探讨如何利用ArkTS开发一个音视频处理应用,重点介绍音频处理、视频编解码以及实时流媒体传输的实现。我们将从理论基础出发,逐步构建一个完整的应用,并通过优化技巧提升性能。1.音视
HarmonyNext实战:基于ArkTS的高性能图像处理应用开发
harmonyos-next
HarmonyNext实战:基于ArkTS的高性能图像处理应用开发引言在HarmonyNext生态系统中,图像处理是一个重要且具有挑战性的领域。本文将深入探讨如何利用ArkTS语言开发一个高性能的图像处理应用,重点介绍图像卷积、边缘检测等核心算法的实现。我们将从理论基础出发,逐步构建一个完整的图像处理应用,并通过优化技巧提升性能。1.图像处理基础1.1图像表示在数字图像处理中,图像通常被表示为一个
python手写kmeans算法
菜鸟懿
机器学习 聚类 算法 python
kmean聚类是最基础和常见的算法,工程上使用比较常见,spark,sklearn都有实现,本文手写实现kmeans#!/usr/bin/pythonimportsysimportrandomimportmathdefcreate_rand_points(max_x,max_y,count):"""Createcountpoints(0-x),(0-y)."""points=[]foriinran
redis操作zset类型的基本命令
JavaWeb学起来
redis redis 数据结构
zset是有序存储的数据结构,它和set一样,不允许重复的值,下面我们总结一些常用的命令。zaddkey排序的数值值(这里为了zset可以有序的存储,需要设定数值)127.0.0.1:6379>zaddz15java3redis1mysql2nginx4oracle(integer)5zcardkey(返回key中的成员数)127.0.0.1:6379>zcardz1(integer)5zrang
Qt常用控件之Layout总篇
laimaxgg
qt 开发语言 c++ qt5 qt6.3
Layout总篇1.Layout介绍Layout是一类布局管理器,它能够将Layout内部的控件都按照某种方式布局,简单高效地使代码更美观。在Qt中内置的layout有四种:QVBoxLayout(垂直布局)、QHBoxLayout(水平布局)、QGridLayout(网格布局)、QFormLayout(表单布局)。在代码中创建的layout,本质上就只创建了一个layout。但在ui中创建的la
手写一些常见算法
林tong学
算法 排序算法 java 数据结构
手写一些常见算法快速排序归并排序Dijkstra自定义排序交替打印0和1冒泡排序插入排序堆排序快速排序publicclassMain{publicstaticvoidmain(String[]args){intnums[]={1,3,2,5,4,6,8,7,9};quickSort(nums,0,nums.length-1);}privatestaticvoidquickSort(int[]num
MySQL的双主互备
zhz5214
数据同步 mysql 数据库
参考:Windows下mysql双主搭建https://www.cnblogs.com/chenyixun/p/13810156.htmlMySQL的双机互备(又称为MySQL高可用)是一种数据库系统部署策略,可以实现在两台服务器之间实现高可用性和容错能力。具体而言,MySQL的双机互备将MySQL数据库部署在两台服务器上,其中一台作为主服务器(Master),另一台作为备用服务器(Slave)。
kettle数据同步
zhz5214
数据同步 java etl big data 数据仓库 运维开发
Kettle是一个强大的数据集成工具,可以用来实现各种数据同步的需求。以下是一些常见的Kettle数据同步的实现方法:数据库之间的同步:使用Kettle中的数据库连接组件,可以连接多个不同的数据库,并通过数据抽取、转换和加载步骤实现数据同步。文件之间的同步:Kettle可以读取和写入各种类型的文件,包括CSV、Excel、JSON和XML等格式。因此,可以通过读取源文件、转换数据格式,并将其写入目
基于纯视觉的 GUI 代理的屏幕解析工具(OmniParser)
deepdata_cn
应用软件 GUI
OmniParser是一款开源工具,可通过解析用户界面截图生成结构化数据,助力打造视觉驱动的GUI自动化代理,赋能跨平台交互。一、技术原理1.数据集构建:从流行网页和应用中提取数据,构建可交互图标检测数据集和图标描述数据集,为模型训练提供基础。2.检测模型:使用YOLOv8模型在可交互图标检测数据集上进行微调,能够识别和定位用户界面中的可交互区域,如按钮、图标等。3.描述模型:利用BLIP-v2模
python start函数_Python中10个常用的内置函数
半残大叔霁天
python start函数
大家好,我是小张在3.8版本中,Python解释器有近69个内置函数可供使用,有了它们能极大地提高编码效率,数量虽然不少,但在日常搬砖中只用到其中一部分,根据使用频率和用法,这里列出来几个本人认为不错的内置函数,结合一些例子介绍给大家complex()返回一个形如a+bj的复数,传入参数分为三种情况:参数为空时,返回0j参数为字符串时,将字符串表达式解释为复数形式并返回参数为两个整数(a,b)时,
cv君独家视角 | AI内幕系列七:EfficientViT模型:基于多尺度线性注意力模块,实现高效的高分辨率密集预测
cv君
cv君独家视角 AI内幕系列 原创项目级实战项目 深度学习与计算机视觉精品 1024程序员节 EfficientViT 高分辨率密集预测任务 高分辨率视觉模型 Transformer 人工智能 计算机视觉
专题概况cv君独家视角|AI内幕系列是一个专注于人工智能领域的深度专题,旨在为读者揭开AI所有领域技术的神秘面纱,展示其背后的科学原理和实际应用。通过一系列精心策划的文章,我们将带您深入了解AI的各个领域,从计算机视觉到文本语音等多模态领域,从基础理论到前沿技术,从行业应用到未来趋势。无论您是AI领域的工程师或者专家,还是对这一领域充满好奇的读者,这个系列都将为您提供高价值的见解和启发,为您带来横
探索JavaWeb之旅:Tomcat 9.0.62一站式解决方案
富展尤
探索JavaWeb之旅:Tomcat9.0.62一站式解决方案【下载地址】Tomcat9.0.62资源文件下载本仓库提供了一个用于运行JavaWeb项目的资源文件下载,具体为`tocmcat-9.0.62`版本的Tomcat9原始最新版的压缩包。该资源文件是Tomcat9.0.62的完整压缩包,适用于需要使用Tomcat9来部署和运行JavaWeb项目的开发者项目地址:https://gitcod
前端请求全面解析:AJAX、Axios 与 Fetch 的使用详解与代码示例
软件工匠师
前端 ajax javascript
前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例前端请求全面解析:AJAX、Axios与Fetch的使用详解与代码示例1.AJAX——传统的异步请求1.1基本用法示例1.2AJAX特点2.FetchAPI——现代化请求方案2.1基本用法示例2.2Fetch特点3.Axios——第三方HTTP请求库3.1安装Axios3.2基本用法示例3.3Axios特点4.总结前端请求全面解
MySQL常用函数详解及SQL代码示例
星河浪人
mysql sql android
MySQL常用函数详解及SQL代码示例引言当前日期和时间函数字符串函数数学函数聚合函数结论引言MySQL作为一种广泛使用的关系型数据库管理系统,提供了丰富的内置函数来简化数据查询、处理和转换。掌握这些函数可以大大提高数据库操作的效率和准确性。本文将详细介绍MySQL中一些常用的函数,并配以SQL代码示例,帮助读者更好地理解和应用这些函数。当前日期和时间函数在当前时间(中国北京时间2025年03月1
数学建模之数学模型-3:动态规划
^ω^宇博
数学模型 数学建模 动态规划 算法
文章目录动态规划基本概念阶段状态决策策略状态转移方程指标函数最优指标函数动态规划的求解前向算法后向算法二者比较应用案例一种中文分词的动态规划模型摘要引言动态规划的分词模型问题的数学描述消除状态的后效性选择优化条件算法描述和计算实例算法的效率分析和评价结束语参考文献动态规划基本概念一个多阶段决策过程最优化问题的动态规划模型包括以下666个要素:以下是对动态规划中阶段、状态、决策、策略、状态转移方程、
深入理解 OTSU 算法(大津法——最大类间方差法)
ZHauLee
机器学习 算法 计算机视觉 人工智能
一、算法概述OTSU算法是一种用于图像分割的自动阈值选择算法,广泛应用于图像处理领域,特别是在二值化过程中。它是由日本学者大津展之(NobuyukiOtsu)在1979年提出,因此得名“OTSU算法”。二、算法原理OTSU算法的核心思想是通过遍历所有可能的阈值,将图像分割为前景(目标)和背景两部分,使得这两部分之间的类内方差(intra-classvariance)最小,或者说使得这两部分之间的类
Vue动态组件完全指南:原理、使用场景与最佳实践
北辰alk
前端 vue vue.js javascript 前端
文章目录一、什么是动态组件?核心特性:二、基本使用方式1.基础语法2.组件注册方式3.动态组件生命周期三、六大典型应用场景1.标签页切换系统2.多步骤表单流程3.动态仪表盘4.权限驱动视图5.插件系统集成6.服务端驱动界面四、高级使用技巧1.状态保持方案2.动态Props传递3.异步组件加载4.过渡动画支持五、性能优化策略1.缓存策略对比2.代码分割配置3.内存管理示例六、常见问题解决方案1.组件
【CMake指南】第3篇:编写可维护的构建脚本(变量与作用域管理)
JuicyActiveGilbert
CMake指南 开发语言 c++ CMake 教程
源码及CMakeLists.txt沿用第1篇或第2篇的均可,本文沿用第2篇的相关文件1.CMake变量的基础操作1.1定义与修改变量在CMakeLists.txt后面加入如下代码:#定义普通变量set(MY_VAR"HelloWorld")#修改变量值set(MY_VAR"NewValue")#列表变量(分号分隔)set(MY_LISTa.cppb.cppc.cpp)#或显式列表set(MY_LI
【MyBatis-Plus 进阶功能】开发中常用场景剖析
Yan.love
mybatis 后端 java 数据库
MyBatis-Plus(MP)除了封装常见的CRUD操作,还提供了一些高级功能,进一步简化复杂场景下的开发工作。本文将逐一讲解逻辑删除、自动填充、多表关联查询的原理与使用方式,让你快速掌握这些技巧!一、逻辑删除逻辑删除是指在数据库中不直接删除记录,而是通过标记(如is_deleted字段)表示数据是否有效。1.原理与配置逻辑删除是指在数据库中不直接删除记录,而是通过标记(如is_deleted字
安装数据库首次应用
Array_06
java oracle sql
可是为什么再一次失败之后就变成直接跳过那个要求
enter full pathname of java.exe的界面
这个java.exe是你的Oracle 11g安装目录中例如:【F:\app\chen\product\11.2.0\dbhome_1\jdk\jre\bin】下的java.exe 。不是你的电脑安装的java jdk下的java.exe!
注意第一次,使用SQL D
Weblogic Server Console密码修改和遗忘解决方法
bijian1013
Welogic
在工作中一同事将Weblogic的console的密码忘记了,通过网上查询资料解决,实践整理了一下。
一.修改Console密码
打开weblogic控制台,安全领域 --> myrealm -->&n
IllegalStateException: Cannot forward a response that is already committed
Cwind
java Servlets
对于初学者来说,一个常见的误解是:当调用 forward() 或者 sendRedirect() 时控制流将会自动跳出原函数。标题所示错误通常是基于此误解而引起的。 示例代码:
protected void doPost() {
if (someCondition) {
sendRedirect();
}
forward(); // Thi
基于流的装饰设计模式
木zi_鸣
设计模式
当想要对已有类的对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能。
自定义的类成为装饰类
模仿BufferedReader,对Reader进行包装,体现装饰设计模式
装饰类通常会通过构造方法接受被装饰的对象,并基于被装饰的对象功能,提供更强的功能。
装饰模式比继承灵活,避免继承臃肿,降低了类与类之间的关系
装饰类因为增强已有对象,具备的功能该
Linux中的uniq命令
被触发
linux
Linux命令uniq的作用是过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行。在正常情 况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如 果输入文件用“- ”表示,则从标准输入读取。
AD:
uniq [选项] 文件
说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个
正则表达式Pattern
肆无忌惮_
Pattern
正则表达式是符合一定规则的表达式,用来专门操作字符串,对字符创进行匹配,切割,替换,获取。
例如,我们需要对QQ号码格式进行检验
规则是长度6~12位 不能0开头 只能是数字,我们可以一位一位进行比较,利用parseLong进行判断,或者是用正则表达式来匹配[1-9][0-9]{4,14} 或者 [1-9]\d{4,14}
&nbs
Oracle高级查询之OVER (PARTITION BY ..)
知了ing
oracle sql
一、rank()/dense_rank() over(partition by ...order by ...)
现在客户有这样一个需求,查询每个部门工资最高的雇员的信息,相信有一定oracle应用知识的同学都能写出下面的SQL语句:
select e.ename, e.job, e.sal, e.deptno
from scott.emp e,
(se
Python调试
矮蛋蛋
python pdb
原文地址:
http://blog.csdn.net/xuyuefei1988/article/details/19399137
1、下面网上收罗的资料初学者应该够用了,但对比IBM的Python 代码调试技巧:
IBM:包括 pdb 模块、利用 PyDev 和 Eclipse 集成进行调试、PyCharm 以及 Debug 日志进行调试:
http://www.ibm.com/d
webservice传递自定义对象时函数为空,以及boolean不对应的问题
alleni123
webservice
今天在客户端调用方法
NodeStatus status=iservice.getNodeStatus().
结果NodeStatus的属性都是null。
进行debug之后,发现服务器端返回的确实是有值的对象。
后来发现原来是因为在客户端,NodeStatus的setter全部被我删除了。
本来是因为逻辑上不需要在客户端使用setter, 结果改了之后竟然不能获取带属性值的
java如何干掉指针,又如何巧妙的通过引用来操作指针————>说的就是java指针
百合不是茶
C语言的强大在于可以直接操作指针的地址,通过改变指针的地址指向来达到更改地址的目的,又是由于c语言的指针过于强大,初学者很难掌握, java的出现解决了c,c++中指针的问题 java将指针封装在底层,开发人员是不能够去操作指针的地址,但是可以通过引用来间接的操作:
定义一个指针p来指向a的地址(&是地址符号):
Eclipse打不开,提示“An error has occurred.See the log file ***/.log”
bijian1013
eclipse
打开eclipse工作目录的\.metadata\.log文件,发现如下错误:
!ENTRY org.eclipse.osgi 4 0 2012-09-10 09:28:57.139
!MESSAGE Application error
!STACK 1
java.lang.NoClassDefFoundError: org/eclipse/core/resources/IContai
spring aop实例annotation方法实现
bijian1013
java spring AOP annotation
在spring aop实例中我们通过配置xml文件来实现AOP,这里学习使用annotation来实现,使用annotation其实就是指明具体的aspect,pointcut和advice。1.申明一个切面(用一个类来实现)在这个切面里,包括了advice和pointcut
AdviceMethods.jav
[Velocity一]Velocity语法基础入门
bit1129
velocity
用户和开发人员参考文档
http://velocity.apache.org/engine/releases/velocity-1.7/developer-guide.html
注释
1.行级注释##
2.多行注释#* *#
变量定义
使用$开头的字符串是变量定义,例如$var1, $var2,
赋值
使用#set为变量赋值,例
【Kafka十一】关于Kafka的副本管理
bit1129
kafka
1. 关于request.required.acks
request.required.acks控制者Producer写请求的什么时候可以确认写成功,默认是0,
0表示即不进行确认即返回。
1表示Leader写成功即返回,此时还没有进行写数据同步到其它Follower Partition中
-1表示根据指定的最少Partition确认后才返回,这个在
Th
lua统计nginx内部变量数据
ronin47
lua nginx 统计
server {
listen 80;
server_name photo.domain.com;
location /{set $str $uri;
content_by_lua '
local url = ngx.var.uri
local res = ngx.location.capture(
java-11.二叉树中节点的最大距离
bylijinnan
java
import java.util.ArrayList;
import java.util.List;
public class MaxLenInBinTree {
/*
a. 1
/ \
2 3
/ \ / \
4 5 6 7
max=4 pass "root"
Netty源码学习-ReadTimeoutHandler
bylijinnan
java netty
ReadTimeoutHandler的实现思路:
开启一个定时任务,如果在指定时间内没有接收到消息,则抛出ReadTimeoutException
这个异常的捕获,在开发中,交给跟在ReadTimeoutHandler后面的ChannelHandler,例如
private final ChannelHandler timeoutHandler =
new ReadTim
jquery验证上传文件样式及大小(好用)
cngolon
文件上传 jquery验证
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="jquery1.8/jquery-1.8.0.
浏览器兼容【转】
cuishikuan
css 浏览器 IE
浏览器兼容问题一:不同浏览器的标签默认的外补丁和内补丁不同
问题症状:随便写几个标签,不加样式控制的情况下,各自的margin 和padding差异较大。
碰到频率:100%
解决方案:CSS里 *{margin:0;padding:0;}
备注:这个是最常见的也是最易解决的一个浏览器兼容性问题,几乎所有的CSS文件开头都会用通配符*来设
Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
daizj
shell $# $? 特殊变量
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:
$echo $$
运行结果
29949
特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个
程序设计KISS 原则-------KEEP IT SIMPLE, STUPID!
dcj3sjt126com
unix
翻到一本书,讲到编程一般原则是kiss:Keep It Simple, Stupid.对这个原则深有体会,其实不仅编程如此,而且系统架构也是如此。
KEEP IT SIMPLE, STUPID! 编写只做一件事情,并且要做好的程序;编写可以在一起工作的程序,编写处理文本流的程序,因为这是通用的接口。这就是UNIX哲学.所有的哲学真 正的浓缩为一个铁一样的定律,高明的工程师的神圣的“KISS 原
android Activity间List传值
dcj3sjt126com
Activity
第一个Activity:
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import a
tomcat 设置java虚拟机内存
eksliang
tomcat 内存设置
转载请出自出处:http://eksliang.iteye.com/blog/2117772
http://eksliang.iteye.com/
常见的内存溢出有以下两种:
java.lang.OutOfMemoryError: PermGen space
java.lang.OutOfMemoryError: Java heap space
------------
Android 数据库事务处理
gqdy365
android
使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。事
Java 打开浏览器
hw1287789687
打开网址 open浏览器 open browser 打开url 打开浏览器
使用java 语言如何打开浏览器呢?
我们先研究下在cmd窗口中,如何打开网址
使用IE 打开
D:\software\bin>cmd /c start iexplore http://hw1287789687.iteye.com/blog/2153709
使用火狐打开
D:\software\bin>cmd /c start firefox http://hw1287789
ReplaceGoogleCDN:将 Google CDN 替换为国内的 Chrome 插件
justjavac
chrome Google google api chrome插件
Chrome Web Store 安装地址: https://chrome.google.com/webstore/detail/replace-google-cdn/kpampjmfiopfpkkepbllemkibefkiice
由于众所周知的原因,只需替换一个域名就可以继续使用Google提供的前端公共库了。 同样,通过script标记引用这些资源,让网站访问速度瞬间提速吧
进程VS.线程
m635674608
线程
资料来源:
http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001397567993007df355a3394da48f0bf14960f0c78753f000 1、Apache最早就是采用多进程模式 2、IIS服务器默认采用多线程模式 3、多进程优缺点 优点:
多进程模式最大
Linux下安装MemCached
字符串
memcached
前提准备:1. MemCached目前最新版本为:1.4.22,可以从官网下载到。2. MemCached依赖libevent,因此在安装MemCached之前需要先安装libevent。2.1 运行下面命令,查看系统是否已安装libevent。[root@SecurityCheck ~]# rpm -qa|grep libevent libevent-headers-1.4.13-4.el6.n
java设计模式之--jdk动态代理(实现aop编程)
Supanccy2013
java DAO 设计模式 AOP
与静态代理类对照的是动态代理类,动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码。动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类。java.lang.reflect 包中的Proxy类和InvocationHandler 接口提供了生成动态代理类的能力。
&
Spring 4.2新特性-对java8默认方法(default method)定义Bean的支持
wiselyman
spring 4
2.1 默认方法(default method)
java8引入了一个default medthod;
用来扩展已有的接口,在对已有接口的使用不产生任何影响的情况下,添加扩展
使用default关键字
Spring 4.2支持加载在默认方法里声明的bean
2.2
将要被声明成bean的类
public class DemoService {