关于MySQL的几道面试题
关于MySQL的几道面试题
一、介绍
MySQL大家都很熟悉了,最常用的开源数据库,也是面试官高发常问的技术。
简单列出几道MySQL的几道面试题,一起来看看
B树和B+树之间的区别是什么
Innodb中的B+树有什么特点
Innodb中的索引和B+树
B+树可以存储多少的数据
索引类型有哪些
索引失效的场景
二、问题
1)B树和B+树之间的区别是什么
大家都知道,MySQL中使用存储数据的结构是B+树,那么他和B树有什么区别吗?
首先我们得先了解什么是B树,先看看B树的一些概念
排序方式:所有节点储存都是有序的,都遵循左小右大的原则进行排序
子节点数:非叶节点的子节点数>1,且<=M ,且M>=2
M是什么:在B树中,一个的子节点数目的最大值,即为M。这颗树也称为M阶数
关键字数:枝节点(B树中去除掉根节点和叶子节点的剩余节点)内的关键字数>= ceil(M/2),且<M-1
关键字数K:ceil(M/2)<=K<=M-1
ceil函数:天花板,向正方向取整
M:枝节点的子节点数量
叶子节 ...
跨域问题及解决方案
跨域问题及解决方案
一、介绍
在前后端分离项目中,跨域问题是一定会遇到的。跨域问题的出现,会导致css、js或者ajax对后端请求等资源无法访问的情况。
要想解决跨域问题,首先先得了解什么是跨域问题。
问题:什么是跨域
跨越问题是由于浏览器的同源策略,是浏览器强制要求的安全策略,所以想要了解跨域,首先得了解同源。
所谓同源是指,协议、域名、端口均一致,只要以上三者有一个不一致,就会引发跨域问题
前端页面
后端接口
是否跨域
原因
http://banmoon.cn/index.html
http://banmoon.cn/user/get
否
皆一致
http://banmoon.cn/index.html
https://banmoon.cn/user/get
是
协议不一致
http://banmoon.cn/index.html
http://other.com/user/get
是
域名不一致
http://banmoon.cn/index.html
http://banmoon.cn:8080/user/get
是
端口不一致
http:// ...
Redis的持久化策略RDB和AOF
Redis的持久化策略RDB和AOF
一、介绍
众所周知,redis是一个内存数据库,是一个经典的NOSQL类型的数据库。
我们常常拿redis来当成缓存,这得益于它存储数据的位置在内存中,这样在进行取数时,不用再进行磁盘IO,速度也会大大增加。
但是,也正是它存储在内存中,服务器若是断点、宕机,内存中的数据岂不是没有了。所以,redis还有它自己的持久化策略,将自己内存中的数据保存一份在磁盘中,以备不时之需。
二、持久化策略
1)RDB(默认)
rdb持久化策略,每隔一段时间将内存中的数据保存下来。等下次redis启动,就会自动加载这个文件的数据到内存中,进行恢复。
时间间隔、文件名都是可以设置的,修改redis.conf
12345678910111213################################ SNAPSHOTTING ################################# 当900秒内至少有1个键值对发生变动,触发持久化save 900 1# 当300秒内至少有10个键值对发生变动,触发持久化save 300 10# 当60秒内至少有100 ...
关于spring事务你需要知道的知识点
关于spring事务你需要知道的知识点
一、介绍
大家都知道,在SpringBoot中,使用事务只需要添加@Transactional就可以添加事务,很是方便。
那么它到底是怎么工作的呢?
这么说有点晕头晕脑的,那来简单看下
二、事务失效的场景
1)事务需要代理类启动
基本的配置我就贴出来了,就一个连接数据库的配置有啥好看的,数据库表也是一样
那么接下来,先来一个UserDao
12345678910111213141516171819202122232425package com.banmoon.test.dao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Transactional;@Repositorypub ...
关于final关键字的两个面试题
关于final关键字的两个面试题
一、介绍
final关键字常用,但真的了解它吗。我做一下记录,仅供参考
简述final的作用
为什么局部内部类和匿名内部类只能访问局部的final变量
二、简述final的作用
final是一个修饰符,表示最终的,不可被修改
修饰类:表示类不可被继承,所以抽象类不能使用final关键字
修饰方法:表示方法不能被重写,但是可以进行重载
修饰变量:表示赋值后就不能修改该变量的值
修饰变量时,有几种情况
修饰成员变量时
1234567891011121314151617public class Demo { // 声明时直接赋值 final int a = 1; // 在代码块中进行赋值 final int b; { b = 2; } // 在构造函数中进行赋值 final int c; public Demo(int c) { this.c = c; }}
修饰局部变量时
1 ...
windows强制删除被占用的文件
windows强制删除被占用的文件
一、介绍
在windows中,想删除一个文件,往往被进程占用,导致删除不掉改怎么办。
遇到问题不要慌,这里可以给你解决
二、解决
1)使用文件粉碎功能
如360大师、火绒、电脑管家,等
不过我不喜欢用这种方式添加软件,毕竟有几个程序员的电脑上有这些软件呢
2)创建bat脚本
不知道哪个大神写的bat脚本,亲测还是挺好用的
创建新的txt
粘贴复制以下代码
修改后缀为bat
将要删除的文件拖动到此文件上就好
123456789101112131415161718@echo offif not exist \\?\%1 ( echo 将要删除的文件托至本程序即可,不能直接运行本程序 echo BY ma6174 pause exit)echo y|Cacls %* /c /t /p Everyone:fDEL /F /A /Q \\?\%1RD /S /Q \\?\%1DEL /F /A /S /Q %*RD /S /Q \\?\%*DEL /F /A /Q %*RD /S /Q \\?\%*DEL /F /A ...
Java设计模式详解
设计模式详解
一、介绍
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
设计模式,就是为了一套对写代码的写法经验的总结,怎么写效率更高,可读性更强,上手更简单。简单的抽象形容,就是摩天大楼和简易茅草屋的区别,前者使用更大更强的地基,有更加强大的设计蓝图,所以才能高耸入云;而茅草屋,只是简单的材料拼接而成的房子,来一场风可能就塌了。所以程序也是一样,要想做到和摩天大楼一样的程序,设计模式是必不可少的。
大部分人写代码应该都是茅草屋吧,我也是一样。哈哈哈,在写公司的代码时,只想着把功能做出来,常常就忽略的架构上的东西。
本文的绝大部分,都源自于哔哩哔哩尚硅谷学堂,谢谢他们的教程
1)GOF(Gang of Four)
GOF,我们通常叫四人帮。在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出版了一本名为 ...
apply、call、bind函数的区别
apply、call、bind函数的区别
一、前言
大多数人都知道,使用apply、call、bind可以调用函数,并改变函数中this的指向。
做一个简单记录,免得以后忘记了。
二、apply
使用:函数.apply(obj, arg[])
参数:
第一个参数为函数中this指向的对象
第二个参数是函数中原本的参数,由数组进行封装
12345678910111213141516JAVASCRIPTvar user = { username: "半月无霜", showInfo: function(age){ console.log(`名字:${this.username},年龄:${age}`); }}// 普通调用user.showInfo(18);// 定义一个其他对象,使用applyvar other = { username: "九月", age: 19}user["sh ...
疯了!js中this到底指向什么?
疯了!js中this到底指向什么?
一、前言
前段时间,公司让我改一个界面,我心想改个界面还不简单吗?结果呃,我低估了这颗炸弹的威力。
好吧是我太菜,总结一下,这个this的指向问题。
二、测试例子
首先说明一点。在js中,this的指向在定义函数的时候是确定不了的,只有在使用这个函数的时候才能确定this的指向。
一般来说在使用时,谁调用的这个函数,函数中的this就指向它。
2.1)普通函数
1234567891011var username = "BANMOON";let age = 18;function showInfo(){ console.log(username);// BANMOON console.log(this.username);// BANMOON console.log(age);// 18 console.log(this.age);// undefined}showInfo();// window.showInfo();
这里还涉及到var和let的区别,
let的作用域是在当前的代 ...
经典排序算法
经典排序算法
一、介绍
作为入门级基本算法,徒手写出是基本要求,下面列取几种基本的算法实现。
可以查看对应的动画演示,可以更好的理解排序方法
二、实现
2.1)冒泡排序
1234567891011121314151617181920212223242526272829303132333435package com.banmoon.algorithm.order;import java.util.Arrays;import java.util.Random;/** * 冒泡算法 */public class Demo01 { public static void main(String[] args) { int length = 10; int[] arr = new int[length]; Random random = new Random(); for (int i = 0; i < length; i++) arr[i] = random.nextInt(length ...