学习问题及解决

between …and 的使用方法

一个是数值范围
第一种情况:数值范围 between A and B
A和B都是数值,同等于>=A and <=B
一个是时间范围
第二种情况:时间范围,即查询时间段
使用时间段时要注意下结束时间的格式,2022-01-09 和2022-01-09 10:50:59 是不同的

行转列是怎样转的

1、decode实现
select name,
       min(decode(course, '语文', score)) 语文,
       min(decode(course, '数学', score)) 数学,
       min(decode(course, '英语', score)) 英语
  from tb_student
 group by name;
2、case when实现

SELECT t_year,
MAX(CASE t_month WHEN ‘1月’ THEN t_value END) AS 一月,
MAX(CASE t_month WHEN ‘2月’ THEN t_value END) AS 二月,
MAX(CASE t_month WHEN ‘3月’ THEN t_value END) AS 三月,
MAX(CASE t_month WHEN ‘4月’ THEN t_value END) AS 四月
FROM a_testtable WHERE t_month IN(‘1月’,‘2月’,‘3月’,‘4月’)
GROUP BY t_year;

3.oracle获取当前系统时间

select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual

4.截断数据与删除数据区别 truncate 与delete 区别

1、truncate -->ddl ,不涉及事务,就不能回滚
delete -->dml ,涉及事务,可以回滚
2、truncate 截断所有的数据 delete 可以删除全部 或者部分记录
3、truncate从结构上检查是否存在主外键,如果存在,不让删除
delete 从记录上检查是否存在主外键,如果存在,按参考外键约束进行删除。

普通Java项目的逆向工程
public class GeneratorSqlmap {
    public void generator() throws Exception{
        List<String> warnings = new ArrayList<String>();
        boolean overwrite = true;
        //指定 逆向工程配置文件
        File configFile = new File("generatorConfig.xml");
        ConfigurationParser cp = new ConfigurationParser(warnings);
       Configuration config = cp.parseConfiguration(configFile);
        DefaultShellCallback callback = new DefaultShellCallback(overwrite);
        MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,
                callback, warnings);
        myBatisGenerator.generate(null);
    }
    public static void main(String[] args) throws Exception {
        try {
            GeneratorSqlmap generatorSqlmap = new GeneratorSqlmap();
            generatorSqlmap.generator();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

数据库系统(DBS)包括

数据库(DB)
数据库管理系统(DBMS)
数据库管理员 (DBA)
硬件平台
软件平台

通常一个Xml 映射文件,都会写一个Dao 接口与之对应,请问,这个Dao 接口的工作原理是什么?Dao 接口里的方法,参数不同时,方法能重载吗?

不能重载,因为通过 Dao 寻找 Xml 对应的 sql 的时候全限名+方法名的保存和寻找策略。接口工作原理为
jdk动态代理原理,运行时会为 dao 生成 proxy,代理对象会拦截接口方法,去执行对应的 sql 返回数据。
1.xml文件名与接口名保持一致;
2.namespace属性值与接口权限定名一致;
3.ID属性值与抽象方法名保持一致;
4.返回值类型和参数类型与方法返回值和参数保持一致;

SQL语句的执行顺序

from	>	on	>	join   >	where	>	group by	>	having	 >	select	 >	distinct	 >	order by	 > 	limit   

get和post的区别

 GET请求参数是通过URL进行传递的,POST请求的参数包含在请求体当中。

GET请求比POST请求更不安全,因为参数直接暴露在URL中,所以,GET请求不能用来传递敏感信息。

GET请求在url中传递的参数是有长度限制的(在HTTP协议中并没有对URL的长度进行限制,
	限制是特定的浏览器以及服务器对他的限制,不同浏览器限制的长度不同。),POST对长度没有限制。

GET请求参数会完整的保留在浏览器的历史记录中,POST请求的参数不会保留。

GET请求进行url编码(百分号编码),POST请求支持多种编码方式。

GET请求产生的URL地址是可以被bookmark(添加书签)的,POST请求不可以。

GET请求在浏览器回退的时候是无害的,POST请求会.再次提交数据。

GET请求在浏览器中可以被主动cache(缓存),而POST请求不会,可以手动设置。

请求转发与重定向的区别

请求转发重定向
一次请求,数据在request域中共享两次请求,request域中数据不共享
服务器行为客户端行为
地址栏不发生改变地址栏发生改变
绝对地址定位到站点后绝对地址可写到http://

cookie和session的区别

cookiesession
cookie保存在浏览器端session保存在服务端
cookie只保管ASCII字符串可以存储任意类型的数据
cookie在浏览器中,对客户可见的session存放在服务器上对客户端是透明的,不存在敏感信息泄露的风险session的安全性比cookie高
cookie可以存放4K大小的内容session没有限制
cookie可以用来保存用户的登陆信息,如果删除cookie则下一次用户仍需要重新登录session就类似于我们拿到钥匙去开锁,拿到的就是我们个人的信息,一般我们可以在session中存放个人的信息或者购物车的信息

Cookie和Session都是用来在Web应用中跟踪用户状态、保存用户信息的机制,但它们有以下区别:

  1. 存储位置不同:Cookie以文本文件的形式存储在用户的浏览器中,而Session则以服务器端的方式保存在服务器上。

  2. 存储内容不同:Cookie只能存储限定大小的文本信息,而Session可以存储任意类型的服务器端对象。

  3. 安全性不同:Cookie存储在浏览器中,容易被攻击者获取和篡改;而Session存储在服务器上,安全性相对较高。

  4. 生命周期不同:Cookie可以指定一个过期时间,可以在多个浏览器之间共享,即使关闭浏览器也会被保存下来;而Session会在关闭浏览器或过期时间到达之后被删除。

  5. 使用方式不同:Cookie可以直接在浏览器端访问,并且没有访问限制;而Session需要通过服务器端程序来访问。

总之,Cookie和Session都有它们各自的应用场景和优缺点,开发人员需要根据实际应用场景来选择合适的机制。

@Rsource和@Autowired注解的区别

@Resource@Autowired
是Java自带的注解是spring框架中的注解
默认按名称自动注入默认按类型自动注入
只能标记在字段或者setter方法上可标记在字段上也可标记在settter方法上,还可标记在构造方法上

@Conponent注解

@Component 标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的 < bean id=“” class=“”/>。)
@Service 用来表示Service层(服务层)
@Controller 用来表示Controlle层(控制层)
@Repository 实现数据访问层(dao层)

代理模式实现三要素

  1. 接⼝定义
  2. ⽬标对象与代理对象必须实现统⼀接⼝
  3. 代理对象持有⽬标对象的引⽤ 增强⽬标对象⾏为

代理模式实现分类以及对应区别

  1. 静态代理:⼿动为⽬标对象制作代理对象,即在程序编译阶段完成代理对象的创建
  2. 动态代理:在程序运⾏期动态创建⽬标对象对应代理对象。
  3. jdk动态代理:被代理⽬标对象必须实现某⼀或某⼀组接⼝ 实现⽅式 通过回调创建代理对象。
  4. cglib 动态代理:被代理⽬标对象可以不必实现接⼝,继承的⽅式实现。 动态代理相⽐较静态代理,提⾼开发效率,可以批量化创建代理,提⾼代码复⽤率。
    @GetMapping: 是一个组合注解, 通常用来处理get请求,常用于执行查询操作。

@GetMapping、@PostMapping、@PutMapping、@DeleteMapping注解

@GetMapping: 是一个组合注解, 通常用来处理get请求,常用于执行查询操作。

是@RequestMapping(value=“这里写的是请求的路径”,method = RequestMethod.GET)的缩写。

@PostMapping:是一个组合注解, 通常用来处理post请求,常用于执行添加操作。

是@RequestMapping(value=“这里写的是请求的路径”,method =
RequestMethod.POST)的缩写。写请求路径

@PutMapping:是一个组合注解,通常用来处理put请求,常用于执行更新操作。

是@RequestMapping(value=“这里写的是请求的路径”,method =
RequestMethod.PUT)的缩写。写请求路径

@DeleteMapping:是一个组合注解。通常用来处理delete请求,常用于执行删除操作。

是@RequestMapping(value=“这里写的是请求的路径”,method =
RequestMethod.DELETE)的缩写。写请求路径

hashmap和hashtable的区别

他们都实现了map接口
hashmap可以接收为null的key和value,key为null的键值对放在下标为零的头结点的链表中,而hashtable不行
hashmap是非线程安全的,hashtable是线程安全的,jdk1.5提供了concurrenthashmap,他是hashtable的替代
hashtable很多方法是同步方法,在单线程环境下他比hashmap要慢
哈希值的使用不同,hashtable直接使用对象的hashcode,而hashmap需要重新计算hash值

hsahmap的结构

JDK7与JDK8及以后得hashmap结构域储存原理有所不同 jdk1.7:数组加链表(当数组下表相同,则会在该下标下使用链表)
jdk1.8:数组加链表加红黑树(与之为8 如果链表长度>=8则会吧链表变成红黑树)
jdk1.7:中链表新元素添加到链表的头节点,在一道数组下标位置

list 、map、set三个接口存取元素时,哥有什么特点?

list是以索引来存取元素,可以有重复的元素 set
不能存放重复的元素(用对象的equals()方法区分元素是否重复 )无序的,只允许一个null map
保存键值对映射,映射关系是一对一,也可以是多对一

list底层实现有数组、链表两种方式;
set、map容器有基于hash存储和红黑树两种实现方式
set基于map实现set里的元素值就是map的键值;

四大内置函数式接口

只有一个被重写的的抽象方法的接口
@Functionalinterface主接强制检测式否为函数式接口

cunsumer:消费型 有参数 无返回值
function: 函数型 有参数 有返回值
supplior: 供给型 无参数 定义返回值
predicate: 段言型 定义参数 返回布尔类型

arraylist和linklist的区别

实现方式:ArrayList是通过数组实现的,而LinkedList是通过链表实现的。

插入和删除操作的效率:ArrayList的插入和删除操作效率比较低,因为当插入或删除一个元素时,ArrayList需要移动后面的所有元素;而LinkedList的插入和删除操作效率比较高,因为只需要修改前后元素的指针即可。

随机访问的效率:ArrayList通过索引来随机访问元素,效率比较高;而LinkedList需要遍历整个链表才能访问元素,效率比较低。

空间占用:ArrayList在创建时会分配固定大小的内存空间,如果存储的元素数量超过了它的容量,需要重新分配内存空间,并将原来的元素复制到新的空间中;而LinkedList不需要预先分配内存空间,每个元素都有指针来存储下一个元素的位置,所以空间占用比较大。

数组和集合的区别

数组和集合都是Java中常见的数据容器,它们之间的主要区别如下:

长度的固定性:数组在创建时需要指定长度,之后不能再修改数组的长度;而集合可以动态添加和删除元素,并且不需要指定初始容量。

存储的数据类型:数组只能存储同一种数据类型的元素;而集合可以存储不同类型的元素,甚至可以存储自定义对象。

对内存的占用:数组在创建时需要分配固定的内存大小,如果存储的元素数量超过了数组的容量,需要创建一个新数组并复制旧数组中的元素到新数组中,这可能会导致内存浪费;而集合可以根据需要动态调整容量,从而更加灵活地管理内存。

对数据的操作:数组提供了丰富的操作方法,如快速访问元素、排序等;而集合提供了更加丰富的操作方法,如添加、删除、查询、遍历等。

综上所述,如果需要存储固定长度且类型相同的数据,可以使用数组;如果需要动态地添加、删除、查询数据,可以使用集合。但需要注意的是,在性能方面,数组的访问速度要比集合快,因为它是通过索引来快速访问的。

sql优化

SQL优化是指通过改进SQL查询的性能和效率来提升数据库系统的整体性能。以下是一些常见的SQL优化技巧:

索引优化:

确保表中的列被正确地索引。根据查询的频率和特征,选择合适的列进行索引,以加快查询速度。 避免在索引列上进行函数操作,因为这会阻止索引的使用。
定期对索引进行优化和维护,删除不再使用的索引,避免过多的索引对性能造成负面影响。

查询优化:

编写简洁有效的SQL查询,只检索所需的列,避免使用SELECT *。 使用合适的JOIN语句,根据表之间的关系选择合适的连接方式。
避免嵌套子查询,尽量使用连接(JOIN)来实现相同的查询逻辑。 合理使用WHERE子句和条件,以减少查询返回的结果集大小。

表设计优化:

合理规范化数据库模式,避免数据冗余和不一致性。 避免使用过多的触发器和约束,因为它们可能导致额外的性能开销。 考虑使用分区表来优化大型表的查询性能。

数据库配置和统计信息:

根据实际需求,优化数据库服务器的配置参数,如缓冲池大小、并发连接数等。 定期收集统计信息并更新数据库的查询优化器,以便它可以根据最新的数据分布和索引选择最优的查询计划。

缓存和查询结果复用:

使用缓存来存储频繁访问的查询结果,减少对数据库的访问频率。 对于需要重复执行的查询,考虑使用存储过程或函数,以避免重复编译和优化查询语句。

避免全表扫描:

确保适当的索引存在,以避免对整个表进行全表扫描。 对大型表的查询,考虑分批检索或分页查询,以减少单次查询返回的数据量。

避免过度连接

: 避免在一个查询中使用过多的JOIN操作,以减少连接操作的开销。 考虑使用视图或临时表来简化复杂的查询,减少连接操作的复杂性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值