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,)
javaweb文件上传:@MultipartConfig注解与Apache Commons FileUpload对比
yuren_xia
后端技术 apache java tomcat
在JavaWeb应用中处理文件上传时,可以选择使用@MultipartConfig注解或第三方库如ApacheCommonsFileUpload(通常简称为fileupload)。以下是两者的比较和建议:使用@MultipartConfig注解简介:@MultipartConfig是JavaServlet规范中用于处理multipart/form-data请求(通常是文件上传)的注解。它简化了在S
pytorch基础-比较矩阵是否相等
yuweififi
pytorch 人工智能
1、使用NumPy库NumPy是Python中用于科学计算的常用库,它提供了array_equal和allclose函数来判断矩阵是否相等。array_equal用于精确比较,allclose用于考虑一定误差范围的近似比较,适合浮点数矩阵。importnumpyasnp#创建示例矩阵matrix_a=np.array([[1,2,3],[4,5,6]])matrix_b=np.array([[1,
一学就会:A*算法详细介绍(Python)
不去幼儿园
人工智能(AI) # 启发式算法 算法 python 人工智能 机器学习 开发语言
本篇文章是博主人工智能学习以及算法研究时,用于个人学习、研究或者欣赏使用,并基于博主对相关等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在启发式算法专栏:【人工智能】-【启发式算法】(6)---《一学就会:A*算法详细介绍(Python)》一学就会:A*算法详细介绍(Python)目录A*算法介绍A*算法的核心概念A*算法的特点A*算法示例:迷宫
C++游戏开发系列教程之第二篇:面向对象编程与游戏架构设计
放氮气的蜗牛
深度博客 游戏
大家好,欢迎回到C++游戏开发系列教程!在第一篇中,我们介绍了C++游戏开发的基本概念和如何搭建一个简单的游戏循环,为新手打开了C++游戏开发的大门。本篇博客将深入讲解面向对象编程(OOP)在游戏开发中的重要性,以及如何设计一个简单而有效的游戏架构。通过本篇文章,你将学到如何利用C++的类与继承构建游戏中的各个对象(如玩家、敌人等),并结合游戏循环实现一个基础的游戏状态管理系统。所有代码均附有详细
硬盘数据恢复操作全攻略
AR新视野
本文还有配套的精品资源,点击获取简介:硬盘数据恢复是一项需要精确操作的技术活动,主要针对丢失、误删或损坏的文件进行恢复。本教程通过深入探讨数据恢复的基础知识和步骤,指导用户如何安全有效地执行数据恢复。教程强调了在硬盘故障发生时的正确处理方式,包括避免在受损硬盘上直接操作、使用保护卡或克隆技术复制数据,以及选择合适的数据恢复软件等。教程还提供了数据恢复的基本步骤,并告诫用户在数据非常关键或硬件问题复
编程基础-算法研究-算法题
周陽讀書
算法基础 个人经验可供分享 算法
没想到工作几年后还要考算法题目遂研究记录目录0.简介1.丑数1.1题目1.2要点1.2.1丑数如何判别1.2.2后续丑数如何找到1.2.3结尾th,nd,st规律1.2.4完整可参考代码2大斐波那契数2.1题目2.2要点2.2.1范围超界2.3完整参考代码2.4延伸:C语言计算100的阶乘2.5其他细节点3迷宫问题3.1迷宫问题13.2迷宫问题20.简介一些技巧:~scanf#include{in
网络安全加密python代码
黑客Ash
web安全 安全
点击文末小卡片,免费获取网络安全全套资料,资料在手,涨薪更快网络信息安全中遇到的各种攻击是防不胜防的,采取适当的防护措施就能有效地保护网络信息的安全,包括防火墙、入侵检测系统、漏洞扫描技术以及加密技术等多种防护措施。而信息安全的本质就是要保护信息本身和信息系统在存储、传输中的完整性和保密性,保障不被攻击和篡改,上述的主动攻击、被动攻击和病毒袭击都会造成信息的破坏和泄密,我们以信息安全中的基础理论出
222222222222222
智能与优化
开发语言
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas是基于Nu
Zookeeper(78)Zookeeper的性能优化有哪些方法?
辞暮尔尔-烟火年年
微服务 zookeeper 性能优化 分布式
Zookeeper的性能优化涉及多个方面,包括硬件配置、Zookeeper本身的配置、客户端的使用方式以及网络环境。以下是一些常见的性能优化方法及详细的代码示例。1.硬件配置磁盘:使用高性能的SSD磁盘,确保低延迟和高I/O吞吐量。内存:确保有足够的内存以避免频繁的垃圾回收(GC)。CPU:使用多核CPU,以便更好地处理并发请求。2.Zookeeper配置优化配置参数优化以下是一些关键的Zooke
【四】3D Object Model之测量Features——area_object_model_3d()/distance_object_model_3d()算子
cqy阳
# 【四】3D Object Model 3d
欢迎来到本博客Halcon算子太多,学习查找都没有系统的学习查找路径,本专栏主要分享Halcon各类算子含义及用法,有时间会更新具体案例。具体食用方式:可以点击本专栏【Halcon算子快速查找】–>搜索你要查询的算子名称;或者点击Halcon算子汇总博客,即可食用。支持:如果觉得博主的文章还不错或者您用得到的话,可以悄悄关注一下博主哈,如果三连收藏支持就更好啦!这就是给予我最大的支持!文章目录学习
【四】3D Object Model之测量Features——get_object_model_3d_params()算子
cqy阳
# 【四】3D Object Model 3d 图像处理 计算机视觉 halcon
欢迎来到本博客Halcon算子太多,学习查找都没有系统的学习查找路径,本专栏主要分享Halcon各类算子含义及用法,有时间会更新具体案例。具体食用方式:可以点击本专栏【Halcon算子快速查找】–>搜索你要查询的算子名称;或者点击Halcon算子汇总博客,即可食用。支持:如果觉得博主的文章还不错或者您用得到的话,可以悄悄关注一下博主哈,如果三连收藏支持就更好啦!这就是给予我最大的支持!文章目录学习
Failed to retrieve application JMX service URL
乘风破浪的刘能
先是在eventlog里面提示了红字的这个信息。然后项目就无法启动。会报一些配置文件无法找到的问题。顺着去找对应的配置文件也都存在。这个问题搜到的都是复制粘贴的解决办法。我照着他们说的弄啊弄也没好。然后clean一下重新打个包就好了。(狗头)
网站内容更新后百度排名下降怎么办?有效策略有哪些?
qiufeng_xinqing
SEO
转自网站内容更新后百度排名下降怎么办?有效策略有哪些?网站内容更新是促进网站优化的关键环节,但是频繁修改网站内容会对网站的搜索引擎排名造成很大的影响。为了保持网站排名,我们需要采取一些措施来最小化对百度排名的影响。网站内容更新后百度排名下降怎么办?有效策略有哪些?一:了解百度算法对网站内容修改的影响百度的搜索引擎算法将网站的历史数据纳入排名考量因素之一。频繁的修改网站内容会降低网站历史数据的稳定性
坚持学习100天:MFC多线程开发
smile- sunshine
编程语言 C++ 笔记 mfc 学习 c++
前言Hello,我是修齊。学习C++的第一百零二十六天,5.18的今天,520快到了,要去花店买两朵玫瑰,用心学习。在这里记录一些学习的东西和学习的心情,内容主要是一些自己学习整理的小笔记。一、类CWinThread1.MFC,用类CWinThread的对象来表示一个线程,每个MFC程序的主线程都有一个继承自CWinApp的应用程序类,而CWinApp继承自CWinThread。2.类CWinTh
探索React的深度应用:React Survey——构建问卷神器
傅尉艺Maggie
探索React的深度应用:ReactSurvey——构建问卷神器去发现同类优质开源项目:https://gitcode.com/在浩瀚的前端开发世界里,React与Redux已成为构建复杂Web应用的得力助手,但它们的强大往往隐藏在基础教程之后。今天,让我们一同探索【ReactSurvey】,一个将React与Redux之力发挥至极致的开源项目,教你如何轻松打造专业的在线问卷系统。项目介绍Reac
白帽黑客系列教程之Windows驱动开发(64位环境)入门教程(七)
黑客影儿
技术分享 原创文章 系统安全 驱动开发 c语言 windows 系统安全 程序人生 学习方法 visual studio
为什么要写这篇文章呢?作为一名白帽黑客,如果想要学习ROOTKIT攻防技术,就必须要有能力进行驱动开发!本文章仅提供学习,切勿将其用于不法手段!在Windows操作系统的64位环境中,进行ROOTKIT攻防,就必须要学会Windows驱动开发!Windows驱动开发,是掌握Rootkit技术的硬性基础之一!不会Windows环境下的驱动开发,你就难以透彻理解ROOTKIT攻防技术的真相!接上一篇文
React vs Vue3深度对比与使用场景分析
匹马夕阳
VUE技术集锦 react.js 前端 前端框架
在前端开发领域,React和Vue3是两个备受瞩目的框架。它们都提供了强大的功能和灵活的开发方式,但各自的设计理念、使用方式和适用场景有所不同。本文将深入探讨React和Vue3的区别,通过代码示例和具体的使用场景,帮助开发者更好地理解并选择适合自己的框架。一、核心概念与设计理念1.ReactReact是由Facebook开发的一个JavaScript库,主要用于构建用户界面。它的核心理念是组件化
Houdini:Houdini程序化建模与VEX脚本_2024-07-16_01-51-39.Tex
chenjj4003
游戏开发 houdini php 开发语言 cinema4d 材质 贴图 blender
Houdini:Houdini程序化建模与VEX脚本Houdini基础Houdini界面介绍Houdini是一款由SideEffectsSoftware开发的高级3D动画软件,以其强大的程序化建模和视觉特效能力而闻名。Houdini的界面主要由以下几个部分组成:菜单栏:位于窗口顶部,提供文件操作、编辑、视图控制、渲染设置等命令。工具架:包含常用的工具按钮,如创建、编辑、选择工具等。视图区:主要的3
MFC的用户界面线程
CodingLife99
java android c++ 多线程 spring
一.简单认识MFC中将线程分为用户界面线程和工作线程,两者最大的区别是前者是和界面相关联的,而后者是进行后台的一些操作.二.如何创建MFC中的线程大多继承自CWinThread,而相关联的界面可以继承自CFrameWnd,也可以继承自对话框之类的(感觉只要是界面类,就可以吧).它的创建过程大概是这样的:1.在主线程中建立用户界面线程,比如这里是CMyThread类型的.2.在CMyThread::
【3D格式转换SDK】HOOPS Exchange技术概览(一):3D 数据处理高效能与定制化
工业3D_大熊
3D CAD开发工具 3d 3D建模 3D模型轻量化 3D模型Web可视化 3D数据格式转换 3D格式转换 CAD格式转换
HOOPSExchange是一款专为3D工程应用开发而设计的SDK,旨在助力开发者便捷地访问和重用由CAD与BIM设计应用所生成的3D数据,为3D产品运营提供了强大的数据基础。借助单一且集成化的界面,HOOPSExchange能够高效地导入、转换以及导出超过30种原生及标准格式的3D数据,具体涵盖以下格式:机械计算机辅助设计(MCAD)领域:CATIA、NX、Creo、SOLIDWORKS、Inv
一个基于 React + SpringBoot 的在线多功能问卷系统(附源码)
程序员-李旭亮
Java项目源码 react.js spring boot 前端
简介:一个基于React+SpringBoot的在线多功能问卷系统前端技术栈:React、React-Router、Webpack、Antd、Zustand、Echarts、DnDKit后端技术栈:SpringBoot、MySQL、MyBatisPlus、Redis项目源码下载链接:https://pan.quark.cn/s/2e32786e0c61部分页面静态预览:主要前端业务需求与技术突破:
带你探索CA和SSL证书
白开水~不加糖
服务器 运维
目录一、什么是CA?二、什么是SSL证书?三、SSL证书分类和文件种类?3.1证书的分类:3.2证书格式:四、SSL和TSL五、PSK介绍六、nginx配置介绍一、什么是CA?CA是证书的签发机构,它是公钥基础设施(PublicKeyInfrastructure,PKI)的核心。CA是负责签发证书、认证证书、管理已颁发证书的机关。CA拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证CA的签字
Day5 --- Flask-RESTful请求响应与SQLAlchemy基础
laufing
问题 flask restful python
文章目录昨日回顾今日内容1.请求解析1.1RequestParser处理请求1.2参数详解1.3处理请求案例2.返回响应2.1序列化数据:2.2返回JSON格式3.ORM与Flask-SQLAlchemy3.1ORM介绍ORM框架3.2Flask-SQLAlchemy扩展3.3定义模型类3.4数据库迁移操作4.数据增删改查4.1新增数据4.2简单查询4.3更新数据4.4删除数据5.数据操作案例昨日
基于STM32的无人机自主导航与避障系统
STM32发烧友
stm32 无人机 嵌入式硬件
目录引言环境准备2.1硬件准备2.2软件准备无人机自主导航与避障系统基础3.1控制系统架构3.2功能描述代码实现:实现无人机自主导航与避障系统4.1数据采集模块4.2数据处理与控制算法4.3通信与远程监控实现4.4用户界面与数据可视化应用场景:无人机智能化与任务执行问题解决方案与优化收尾与总结1.引言无人机自主导航与避障技术是无人机系统实现智能化和高效任务执行的核心功能。基于STM32微控制器,该
C#:强大编程语言的多面魅力
热爱技术。
C# c# 开发语言
C#:强大编程语言的多面魅力一、C#语言的特点与优势(一)简洁的语法与精心设计C#在继承C和C++的强大功能的同时,去掉了一些复杂特性,如宏和多重继承,使得语言更加简洁易懂。C#是一种面向对象的语言,使用类、对象和继承来组织代码,使得代码结构清晰,易于维护。例如,属性初始化器可以为属性设置默认值,字符串插入可以直接将变量插入到字符串中,无需使用字符串连接符,空合并运算符可以在变量为null时提供默
指定的服务已标记为删除
勤不了一点
windows windows
同时也适合xampp下的apache、mysql等各个服务转发:https://www.iteye.com/blog/inexus-1608761想重新在windows里部署svn服务,所以第一步删除svn服务:管理员权限下运行cmd:“scdeletesvnserver”之后再部署svn的服务:“sccreatesvnserverbinpath="C:\ProgramFiles\Tortoise
记一次从mysql数据迁移到oralce (基于python和pandas)
qq_36532060
mysql oracle pandas python
记一次从mysql数据迁移到oralce(基于python)前景提要具体实现创建数据库链接读取mysql数据写入orcale结语前景提要公司最近有个从mysql迁移数据到oracle的需求,于是进行了一下方案调研和分析,但作为一个之前从没接触过Oracle的人真的感到好难,但再难也难上,这篇文章主要是记录一下做这件事时遇到的坑以及分享一下最终的方案及代码。具体实现创建数据库链接其实我觉得这个算是最
MySQL表转移数据的三种方式
m0_74823471
面试 学习路线 阿里巴巴 mysql 数据库
说明:在一些情况,像大表修改表结构,重新建立分区(对已有表建立分区,对历史数据是不生效的),或者表备份,我们需要将表的数据,从一张表转移到另外一张表里。本文介绍,MySQL表转移表数据的三种方式;方式一使用下面两行命令,将数据导出为一个sql,再导入到目标表里;#导出mysqldump-uroot-p--no-create-info--skip-extended-insert-tpartition
server.servlet.session.timeout: 12h(HTTP 会话的超时时间为 12 小时)
小丁学Java
产品资质管理系统 servlet http firefox
从你提供的配置文件(应该是SpringBoot的application.yml或application.properties文件)来看,以下部分与会话超时时间相关:server:servlet:session:timeout:12h#timeout:30cookie:name:VENDER_SID会话超时时间的设置server.servlet.session.timeout:12h:这行配置明确指
utf8mb4_general_ci 和 utf8mb4_unicode_ci 是 MySQL 中用于 utf8mb4 字符集的两种常见的排序规则(Collation)
小丁学Java
产品资质管理系统 ci/cd mysql android
utf8mb4_general_ci和utf8mb4_unicode_ci是MySQL中用于utf8mb4字符集的两种常见的排序规则(Collation)。它们在字符排序、比较和性能上有一些区别。以下是用表格列出它们的区别:特性utf8mb4_general_ciutf8mb4_unicode_ci字符集支持支持utf8mb4字符集(4字节UTF-8,支持所有Unicode字符,包括表情符号)支持
安装数据库首次应用
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 {