自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 SpringBoot整合MyBatis遇到的问题(一)

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xust.mapper.UserMapper.queryUserList我找了好久没找到问题在哪里,如果大家有知道的还请帮帮忙看一下,我也会继续找的在这里我也不知道为什么无法识别别名我也找不出问题出在哪...

2020-03-02 12:38:44 403

原创 笔试题

第一题1000枚硬币中有10枚金币,现取n枚硬币,求含有金币的概率。要求保留小数点后6位。没写出来,分析不出来,数学太渣了,先把题记下来,后面去看。第二题兔子繁殖问题,第5个月其才可以开始生,不考虑死亡,求第n个月的数量f(n) = f(n-1) + f(n - 4) 只通过了70%,应该是越界了,要用long...

2020-02-28 20:14:09 1687 25

原创 【数据库】索引失效

1.对于组合索引,不是使用的第一部分,则不会使用索引2.or语句前后没有同时使用索引。要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引。3.如果列类型是字符串,那一定要在条件中使用引号引起来,否则不会使用索引4.如果mysql估计使用全表描述比使用索引快,则不使用索引。5.在索引列上做运算或者使用函数6.以%开头的LIKE查询,模糊匹配。...

2019-10-29 15:00:12 245

原创 【数据库】涉及命令的问题

一、truncate与delete的区别是什么TRUNCATE TABLE:删除内容、不删除定义、释放空间DELETE TABLE:删除内容、不删除定义、不释放空间DROP TABLE:删除内容和定义,释放空间1.truncate table表名,只能删除表中全部数据delete from 表名 where...,可以删除表中全部数据,也可以删除部分数据2.delete f...

2019-10-29 14:55:39 326

原创 【多线程与并发】网站的并发,大流量访问怎解决?

一、HTML页面静态化访问频率较高但内容变动较小,使用网站HTML静态化方案来优化访问速度。将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略 。优势:减轻服务器负担; 加快页面打开速度,静态页面无需访问数据库,打开速度较动态页面有明显提高; 很多搜索引擎都会优先收录静态页面,不仅被收录的快,还收录的全,容易被搜索引擎找到; HTML静态页面不会受程...

2019-10-28 13:15:38 421

原创 【虚拟机JVM】垃圾收集器(部分)

前段时间面试一家公司面试官:JDK8中默认的垃圾回收机制是什么?答:分代收集(分代不就是针对老年代和新生代有不同的回收方法吗?)面试官:哼(冷笑了一下,还在看我)答:。。。(无言以对,难道不是吗?)以上是背景,刚刚又看了一遍垃圾回收机制和垃圾收集器,我才知道我没有错!!!那他为什么对我冷笑———————————————————————————————————————————...

2019-10-26 21:19:41 321

原创 【虚拟机JVM】常见的启动参数和常用的内存调试工具

JVM常见的启动参数-Xms:设置堆的最小值-Xmx:设置堆的最大值-Xmn:设置新生代的大小-Xss:设置每个线程的栈大小-XX:NewSize:设置新生代的初始值-XX:MaxNewSize:设置新生代的最大值-XX:PermSize:设置永久代的初始值-XX:MaxPermSize:设置永久代的最大值-XX:SurvivorRatio:年轻代中Eden区...

2019-10-26 15:40:17 348

原创 【虚拟机JVM】堆里面的分区和各自的特点

新生代新生代又可以进一步划分为一个Eden区和两个Survivor区,Eden是进行内存分配的地方,是一块连续的空闲内存区域,在里面进行内存分配速度非常快,因为不需要进行可用内存块的查找。新对象总是在Eden区中生成,只有经受住了一定的考验后才能顺利的进入到Survivor区中。把Survivor区划分为2块,也是也是为了满足垃圾回收的需要,因为在新生代中经历了回收未必就能进入老年代中。系统总...

2019-10-26 13:58:57 803

原创 【虚拟机JVM】内存泄露和内存溢出。

内存泄露一般来讲:内存泄露主要有两种情况:一是在堆中申请的空间没有被释放;二是对象已不再被使用,但仍然还在内存中保留着。垃圾回收机制的引入可以有效的解决第一种情况;而对于第二种情况,垃圾回收机制则无法保证不再使用的对象会被释放。因此,Java语言中的内存泄露主要指的是第二种情况。内存泄露的典型案例是一个没有重写hashCode和equals方法的key类在HashMap中保存的情况,最后会...

2019-10-26 12:58:35 388

原创 【JavaSE】final、finally、finalize的区别

final的用法final可以用来修饰类或者变量或者方法1)当一个类被final修饰的时候,表示该类不能被继承。类中的方法也默认为final;2)当final修饰基本数据类型的变量时,表示该值在被初始化后不能更改;当final修饰引用类型的变量时,表示该引用在初始化之后不能再指向其他的对象。注意:final修饰的变量必须被初始化。可以在定义的时候初始化,也可以在构造函数中进行初始...

2019-10-25 14:16:53 254

原创 【JavaSE】反射

定义:反射机制是在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。在Java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。功能:在运行时判断任意一个对象所属的类;在运行时创建对象;在运行时判定了任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。Where?JDBC中有一行代码...

2019-10-25 13:46:06 262

原创 【JavaSE基础】内部类?

内部类都有哪些?四种:静态内部类、非静态内部类、局部内部类、匿名内部类。静态内部类和非静态内部类的区别直接代码演示class OuterClass{ private static String msg = "GeeksForGeeks"; //静态内部类 public static class NestedStaticClass{ ...

2019-10-24 22:46:20 164

原创 【JavaSE】Java面向对象的三个特征与含义。

封装、继承、多态封装:属性的封装和方法的封装。把属性定义为私有的,get()、set()方法。好处是信息隐藏和模块化,提高安全性。封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性。继承:子类可以继承父类的成员变量和成员方法。继承可以提高代码的复用性。继承的特性:1)单一继承2)子类只能继承父类的非私有成员变量和方法。3)成员变量的隐藏和方法的覆盖。...

2019-10-24 21:58:56 304 1

原创 【JavaSE】基础问题

什么是不可变类不可变类:当创建了一个类的实例之后,就不允许修改它的值了。特别注意:String和包装类(Integer、Long、Float。。。)都是不可变类。String采用了享元设计模式。Java中基本数据类型各占几个字节?在Java中占1个字节:byte、boolean占2个字节:char、short占4个字节:int、float占8个字节:long、...

2019-10-24 13:48:12 245

原创 【JavaSE基础】抽象类和接口的区别

一、语法层面上的区别1)抽象类可以提供成员方法的实现细节(注:可以只包含非抽象方法),而接口中只能存在public abstract方法,方法默认是public abstract的,但是,Java8中接口可以有default方法;2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的;3)抽象类可以有静态代码块和静态方法和构造方法;...

2019-10-22 15:00:24 250

原创 【多线程和并发】生产者/消费者问题的多种实现方式

一、用阻塞队列实现import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingDeque;/** * @Author: Soldier49Zed * @Date: 2019/10/22 13:35 * @Description: *///Producer Class ...

2019-10-22 14:09:48 202

转载 【设计模式】适配器模式

首先,先来先讲讲适配器。适配就是由“源”到“目标”的适配,而当中链接两者的关系就是适配器。它负责把“源”过度到“目标”。举个简单的例子,比如有一个“源”是一个对象人,他拥有2种技能分别是说日语和说英语,而某个岗位(目标)需要你同时回说日语、英语、和法语,好了,现在我们的任务就是要将人这个“源”适配的这个岗位中,如何适配呢?显而易见地我们需要为人添加一个说法语的方法,这样才能满足目标的需要。...

2019-10-22 12:55:00 168

原创 【多线程和并发】的相关问题

实现线程之间的通信当线程间是可以共享资源时,线程间的通信是协调它们的重要的手段。1)Object类中wait() \ notify() \ notifyAll()方法。2)用Condition接口。Condition是被绑定到Lock上的,要创建一个Lock的Condition对象必须用newCondition()方法。在一个Lock对象里面可以创建多个Condition对象,线...

2019-10-21 17:35:36 233

原创 【多线程和并发】阻塞队列

阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。1.ArrayBlockingQueueArra...

2019-10-21 15:31:47 219

原创 【多线程和并发】并发包的问题

并发包(Concurrent包)中含有的类有哪些?ConcurrentHashMap / CopyOnWriteArrayList阻塞队列同步辅助类线程池相关的类Lock接口原子类同步辅助类1)CountDownLatch:闭锁它就相当于一个计数器。用一个给定的数值初始化CountDownLatch,之后计数器就从这个值开始倒计数,知道计数值达到0。CountD...

2019-10-20 15:02:27 250

原创 【多线程和并发】CopyOnWriteArrayList的实现原理

CopyOnWrite容器即写时复制的容器,也就是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器(改变引用的指向)。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思...

2019-10-20 12:13:23 252

原创 【多线程和并发】缓存一致性问题?如何解决?

当程序在运行过程中,会将运算需要的数据从主从复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从他的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中。举个简单的例子,比如:i = i + 1;当线程执行这个语句的时候,会先从主存中读取i的值,然后复制一份到高速缓存中,然后CPU执行指令对i进行+1操作,然后将数据写入高速缓存,最后将高速缓存中...

2019-10-20 11:27:15 1367

原创 【数据库】解决幻读的方法

一、幻读幻读就是从同一事务中,不同的查询得到的记录数不一样。二、为什么要解决幻读因为在高并发的情况下,我们要保证数据的一致性和事务与事务之间的隔离性。三、MySQL如何解决幻读1)多版本控制(MVCC)2)Next-Key锁(当前读)四、多版本控制(MVCC)的原理InnoDB的MVCC,是通过在每行记录后面保存两个隐藏的列来实现的,这两个列分别保存了这个行的创建时...

2019-10-18 10:55:48 1579 1

原创 【面试】Java和C++/C的区别

1)运行过程的不同,Java源程序经过编译器编译成字节码文件,然后由JVM解释执行。而C++/C经过编译、链接后生成可执行的二进制代码。因此C++/C的执行速度比Java快。2)跨平台性。Java可以跨平台,而C++/C不行。3)Java没有指针,C++/C有指针4)Java不支持多重继承,但是可以实现多个接口来达到类似的目的。C++支持多重继承。5)Java不需要对内存进行管理,...

2019-10-09 15:14:58 574

原创 【面试】实习面试

1.C++与Java的区别(着重强调了垃圾回收这一块)2.JVM运行时的数据区域3.垃圾回收机制(JDK1.8默认的垃圾回收机制?难道不是新生代+老年代?)4.集合List、Set、Map5.数据库(如何从数据库中的一个表test的一个字段(score)查找出相同的数据)select * from test t where t.score in (select score f...

2019-10-09 14:48:49 130

转载 【JavaWeb】Servlet执行的完整流程

摘要:主要描述了从浏览器到服务器,再从服务器到浏览器的整个执行过程浏览器请求浏览器向服务器请求时,服务器不会直接执行我们的类,而是到web.xml里寻找路径名①:第一步,浏览器输入访问路径后,携带了请求行,头,体②:第二步,根据访问路径找到已注册的servlet名称,既图中的demo③:第三步,根据映射找到对应的servlet名③:第四步,根据根据servlet名找...

2019-09-26 22:48:41 443

原创 【多线程和并发】ThreadLocal

ThreadLocal相当于一个容器,用于存放每个线程的局部变量。ThreadLocal实例通常来说都是private static类型的。ThreadLocal可以给一个初始值,而每个线程都会获得这个初始化值的一个副本,这样才能保证不同的线程都有一份拷贝。一般情况下,通过ThreadLocal.set()到线程中的对象是该线程自己使用的对象,其他线程是访问不到的,各个线程中访问的是不同的对象...

2019-09-26 11:28:12 173

原创 【多线程与并发】锁的种类以及锁的优化

多线程中锁的种类一、可重入锁ReentrantLock和synchronized都是可重入锁如果当前线程已经获得了某个监视器对象所持有的锁,那么该线程在该方法中调用另外一个同步方法也同样持有该锁。比如:public synchronized void test(){ xxxxxx; test2();}public synchronized void...

2019-09-26 11:15:44 256

原创 【数据结构与算法】归并排序

归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。1)归并的缺点在于需要O(N)的空间复杂度2)时间复杂度:O(N*logN)3)空间复杂度:O(N)4)稳定性:稳定基本思想:将待排序的元素序列分成两个长度相...

2019-09-26 10:52:27 174

原创 【多线程与并发】如果不用锁机制如何实现共享数据访问

前提:不能用锁,不能用synchronize块或者方法,也不能直接使用jdk提供的线程安全的数据结构,需要自己实现一个类来保证多个线程同时读写这个类中的共享数据是线程安全的。无锁化编程的常用方法:硬件CPU同步原语CAS(Compare And Swap),如无锁栈、无锁队列(ConcurrentLinkedQueue)等待。现在几乎所有的CPU指令都支持CAS的院子操作,X86下对应的...

2019-09-25 13:04:32 2822 1

原创 【面试】光峰科技

我一上来面试官就让我写一个代码给你一个数组,取出第一个达到次数最多的数字我以为的是1 3 3 1 4 第一个达到次数的是3 但他说是1,是按照存入的顺序来算的。例如:输入:1 3 4 1 3输出:1输入:1 3 3 1 4输出:1输入:3 1 1 4 3输出:3思路:一开始就想到了用HashMap,Key值存储数字,Value代表出现的次数,然后遍历找出...

2019-09-24 22:04:56 827

转载 【数据库】索引的实现原理

目前大部分数据库系统及文件系统都采用了B-Tree(B树)或其变种B+Tree(B+树)作为索引结构。B+Tree是数据库系统实现索引的首选数据结构。在MySQL中,索引属于引擎概念级别的概念,不同存储引擎对索引的实现方式是不同的。MyISAM索引实现MyISAM引擎采用B+树作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:这里设表...

2019-09-23 19:18:42 202

原创 【JVM虚拟机】描述Java类加载器的工作原理及其组织结构(简述类加载过程)

Java类加载器的作用就是在运行时加载类。Java类加载器基于三个机制:委托性、可见性和单一性。1)委托机制是指双亲委派模型。当一个类加载和初始化的时候,类仅在有需要加载的时候被加载。假设你有一个应用需要的类叫做Abc.class,首先加载这个类的请求由Application类加载器委托给它的父类加载器Extension类加载器,然后再委托给Bootstrap类加载器。Bootstrap类...

2019-09-23 14:26:58 498

原创 【多线程与并发】线程池的问题

什么是线程池?线程池的工作原理和使用线程池的好处?一个线程池管理了一组工作线程,同时它还包括了一个用于放置等待执行任务的任务队列(阻塞队列)。默认情况下,在创建了线程池后,线程池中的线程数为0。当任务提交给线程池之后的处理策略如下:如果此时线程池中的数量小于corePoolSize(核心池的大小),即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务(也就是每来一个任务...

2019-09-22 18:19:31 412

原创 【面试】为什么B+树是3层

索引的底层实现是怎样的?为什么B+树是三层?一个高度为3的B+树大概可以存放:1170*1170*16=21902400行数据。所以在InnoDB中B+树高度一般为1-3层,它就能满足千万级的数据存储。在查找数据时一次页的查找代表一次IO,所以通过主键索引查询通常只需要1-3次逻辑IO操作即可查找到数据。...

2019-09-21 18:52:27 6091

原创 【数据结构与算法】选择排序

选择排序——直接选择排序+堆排序直接选择排序直接选择排序非常好理解,但是效率不是很好。实际中很少使用 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:不稳定基本思想:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。代...

2019-09-20 22:02:22 164

原创 【数据库】乐观锁与悲观锁

锁有两种机制:悲观锁和乐观锁悲观锁:锁如其名,它是世界观就是悲观的,它认为别人访问正在改变的数据的概率是很高的,所以从数据开始更改时就将数据锁住,直到更改完成才释放。一个典型的依赖数据库的悲观锁调用: select * from account where name = "Erica" for update这条SQL语句锁定了account表中所有符合检...

2019-09-20 20:42:15 180

原创 【数据库】SQL注入的问题

SQL语句应该考虑哪些安全性1)防止SQL注入,对特殊字符进行过滤,转义或者使用预编译的SQL语句绑定变量。2)当SQL语句运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止泄露服务器和数据库的相关信息。什么叫做SQL注入,如何防止?举个例子:后台写的Java代码拼的SQL如下:public List getInfo(String ename){ ...

2019-09-20 19:52:58 243

原创 【数据库】涉及锁的问题

如何并发访问数据库加锁说下数据库的锁机制,数据库中都有哪些锁锁是一种并发控制技术,锁是用来在多个用户同时访问同一个数据的时候保护数据的。一、有两种基本的锁类型共享锁(S):多个事务可封锁一个共享页;任何事务都不能修改该页;通常是该页被读取完毕,S锁立即被释放。在执行select语句的时候需要给操作对象(表或者一些记录)加上共享锁,但加锁之前需要检查是否有排它锁,如果没有,...

2019-09-20 17:35:37 435

原创 【多线程和并发】死锁

死锁产生的原因1)竞争可重用不可抢占式的资源2)竞争可消耗资源3)进程推进顺序不当.可重用性资源:可供重复使用多次的资源.不可抢占性资源:一旦系统把某资源分配给该进程后,就不能将它强行收回,只能在进程使用完后自动释放.可消耗资源:又叫临时性资源,它是在进程运行期间,由进程动态的创建和消耗的.产生死锁的四个必要条件1)互斥条件:一个资源每次只能被一个进程使用;...

2019-09-20 16:58:42 269

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除