1. java8 内部提供的函数式接口

    1. java8内置的函数式接口 jdk8中,在java.util.function包中提供了大量的函数式接口,这些接口都是函数式接口,且都使用 @FunctionalInterface 标注。 java8中内置的函数式接口分类: (1)消费型接口 Consumer (2)供给型接口 Supplier (3)函数型接口 Function (4)断言型接口 Predicate 消费型接口 Consumer. 给定T类型的参数,进行逻辑处理,不返回任何值,直接消费。 ```java package java.util.function;

    2021/09/03 JAVA8

  2. java8 函数式接口

    1. 函数式接口 1.1 什么是函数式接口? 函数式接口:有且仅有一个抽象方法的接口。 其意味着,一个接口中有且仅有一个抽象方法,只有方法定义,没有方法体;其他的方法都是已经提供了实现的默认方法或者静态方法。 函数式接口是在java8对接口默认方法和静态方法的基础上提供的新的接口类别。 因为Object类是所有类的父类,因此,如果一个接口中定义了Object类中可以被覆盖的方法,那么即便这个方法在接口中定义是抽象的,也不被认为是一个抽象方法,因为它实际上继承自Object类,已经有明确的方法实现。 (1)函数式接口只能有一个抽象方法; (2)函数式接口其他的方法可以是默认方法或者静态方法; (3)只要是Object类中能够被复写的方法都不被算作接口的抽象方法。

    2021/09/02 JAVA8

  3. java8 接口的重新定义

    1. java8之前的接口定义 我们知道,接口中只能包含2部分内容: (1)公共的静态的全局常量; (2)公共的非静态的抽象方法. 请参考:java中接口和抽象类

    2021/09/01 JAVA8

  4. SQL脚本案例(oracle)

    1. 老核心 1.1 SYS_DATA_DICTIONARY长度修改 oracle,更改指定字段长度,为表增加主键: -- 扩展表SYS_DATA_DICTIONARY的DD_VALUE字段长度为4000,用于维护wps和快图的签名信息SIGNATURE -- 注意,应首先执行该脚本 ALTER TABLE SYS_DATA_DICTIONARY MODIFY DD_VALUE Varchar2(4000); -- 为表 SYS_DATA_DICTIONARY 增加主键,注意表空间可能需要更改 alter table SYS_DATA_DICTIONARY add constraint SYS_DATA_DICTIONARY_KEY primary key (ID) using index tablespace ICMP_TBS pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );

    2021/06/29 SQL

  5. SQL优化

    1. SQL优化的几种方式 在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有需要的可以参考参考。 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20 即使用 union all 来代替 or 子句。 5.in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3 6.下面的查询也将导致全表扫描: select id from t where name like '%abc%' --开头有%号会导致全表扫描 7.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where num/2=100 应改为: select id from t where num=100*2 8.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where substring(name,1,3)='abc'--name以abc开头的id 应改为: select id from t where name like 'abc%' 9.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。 10.在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。 11.不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t(...) 12.很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num) 13.并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。 14.索引并不是越多越好,索引固然可以提高相应的 select 的效率,但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。 一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。 15.尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。 这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 16.尽可能的使用 varchar 代替 char ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。 17.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 18.避免频繁创建和删除临时表,以减少系统表资源的消耗。 19.临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。但是,对于一次性事件,最好使用导出表。 20.在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。 21.如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。 22.尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。 23.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。 24.与临时表一样,游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。 在结果集中包括“合计”的例程通常要比使用游标执行的速度快。如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。 25.尽量避免大事务操作,提高系统并发能力。 26.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。 

    2021/06/28 SQL

  6. SQL执行顺序

    1. 笛卡尔积 sql和mysql执行顺序,发现内部机制是一样的。最大区别是在别名的引用上。

    2021/06/27 SQL

  7. SQL的转义

    1. sql转义字符 sql转义字符(单引号): ' 案例: select * from users where name = '''赵二虎'' or ''1'' = ''1'''; -- '是sql中的转义字符,''''表示一个字符串,其中的内容是',因为是在''中,所以要使用'进行转义,即''表示';

    2021/06/26 SQL

  8. DCL语言

    1. 数据控制概念 sql中的所有操作都可以归为“增删改查”;而结构化查询语言sql提倡面向对象的设计思想,标准sql语法中提供的对象有: 系统管理员对象; 数据库对象; 数据表对象; 视图对象; 数据对象(包括表中数据和视图中数据); 索引对象

    2021/06/25 SQL

  9. 增删改查

    1. 对数据库的增、删、改、查【DDL数据定义语言】 1.1 增加(建立)数据库,标准sql CREATE DATABASE database_name --每次只能创建一个数据库 on ( name=文件的逻辑名称, filename=文件的存储路径, size=文件初始容量大小(默认单位是MB), maxsize=文件的最大容量, filegrowth=文件每次增容的大小 ) log on ( name=日志文件的逻辑名称, filename=日志文件的存储路径, size=日志文件初始容量大小, maxsize=日志文件的最大容量大小, filegrowth=日志文件每次增容的大小 ); 1.2 删除数据库,标准sql drop database 数据库名称1,数据库名称2…….; --删除一个或者多个数据库

    2021/06/24 SQL

  10. 几个SQL概念

    1. 表空间TABLESPACE,oracle扩展sql oracle不像SQLServer,SQLServer安装好后建一个用户,通过该用户建一个数据库,就能直接在库里面开始建表,然后进行数据、索引、视图等的增删改查。 注意:SQLServer和Oracle之间最大的区别就是表空间设计。表空间是Oracle开创性的提出的概念。SQLServer中所属数据直接对应的物理存储文件没有进行管理,而Oracle通过对表空间的管理,能够直接管理物理存储文件。 oracle安装好后,首先必须创建数据库(即创建数据库db实例),然后必须创建表空间; 表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都是存放在指定的表空间中的,例如表、索引、视图等。但主要存放的是表。所以称作表空间。 oracle中至少存在一个表空间,即SYSTEM的表空间。 一个Oracle数据库能够有一个或者多个表空间,每一个表空间都对应着一个* .dbf的物理文件,这个物理文件决定这表空间设计时的一些属性,比如tablespace的空间大小等。 注意:表空间本身是一个逻辑概念,表空间的名称,对应的.dbf文件等映射关系默认存放在dba_data_files这个数据表中。 要对指定的表空间进行修改,除了外在的属性,比如表空间的名称等,对表空间设计层面的修改主要就是修改表空间的设计文件.dbf中配置的各个属性值。 dba_data_files是表空间的设计表。以下是例子: --根据指定表空间名称查询表空间详细信息 select * from dba_data_files where tablespace_name = 'ESBTRANS10'; --修改数据文件的大小 alter database datafile '/home/oracle/app/oradata/esbkf1/esbtrans10.dbf' resize 6144M; -- 将指定的表空间大小修改为6G;

    2021/06/23 SQL