
java基础
pc彭诚诚的博客
这个作者很懒,什么都没留下…
展开
-
Session和Cookie的主要区别
Cookie是把用户的数据写给用户的浏览器。Session技术把用户的数据写到用户独占的session中。Session对象由服务器创建,开发人员可以调用request对象的getSession方法得到session对象。服务器创建session出来后,会把session的id号,以cookie的形式回写给客户机,这样,只要客户机的浏览器不关,再去访问服务器时,都会带着session的id号...原创 2019-10-30 15:15:44 · 156 阅读 · 0 评论 -
四种mysql存储引擎
SHOW ENGINES如果要想查看数据库默认使用哪个引擎,可以通过使用命令:SHOW VARIABLES LIKE ‘storage_engine’;InnoDB存储引擎InnoDB是事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,上图也看到了,InnoDB是默认的MySQL引擎。MyISAM存储引擎MyISAM基于ISAM存储引擎,并对其进行扩展。它是在We...原创 2019-10-30 15:01:26 · 243 阅读 · 0 评论 -
sql的优化
1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is nul...原创 2019-10-30 14:19:08 · 132 阅读 · 0 评论 -
Spring框架的7个模块
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:核心容器: 核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。Bea...原创 2019-10-30 10:52:31 · 2245 阅读 · 0 评论 -
HashMap的实现原理
HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。从下图中可以看出,HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组。可以看出,Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用,这就构成了链表。hashmap的存取实现如果数组该位置...原创 2019-10-30 10:46:24 · 155 阅读 · 0 评论 -
HashMap和HashTable区别
HashMap:–非线程安全–实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。–HashMap内部维护了一个存储数据的Entry数组,HashMap采用链表解决冲突,每一个Entry本质上是一个单向链表。(数组+链表) 较早前的hashMap底层的存储就是采用这种结构,直到jdk1.8之后才换成了数组加红黑树的结构–HashMap默认的初始化大...原创 2019-10-16 15:52:38 · 105 阅读 · 0 评论 -
synchronized与Lock的区别
线程与进程线程与进程在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程。关系是线程–>进程–>程序的大致组成结构。所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位。以下我们所有讨论的都是建立在线程基础之上。四种锁的介绍可重入锁如果锁具备可重入性,则称作为可重入锁。所...原创 2019-10-25 15:08:05 · 165 阅读 · 0 评论 -
Redis
1. redis是什么redis是一种支持Key-Value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。该数据库使用ANSIC语言编写,支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。2 redis的应用场景:1、会话缓存(最常用)2、消息队列,比如支付3、活动排行榜或计数4、发布,订阅消息(消息通知)5、商品列表,评论列表等...原创 2019-10-24 19:11:23 · 169 阅读 · 0 评论 -
java代码的编译和执行和类加载的五个过程
加载在加载阶段,虚拟机主要完成三件事:1.通过一个类的全限定名来获取定义此类的二进制字节流。2.将这个字节流所代表的静态存储结构转化为方法区域的运行时数据结构。3.在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区域数据的访问入口验证验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害。如果验证失败,就会抛出...原创 2019-10-24 17:30:49 · 1421 阅读 · 0 评论 -
数据请求时 缓存穿透-缓存击穿-缓存雪崩
缓存穿透:缓存穿透是指缓存和数据库中都没有的数据,而用户不断发起请求解决方案:接口层增加校验,如用户鉴权校验,对查询的key进行规则匹配拦截;布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被 这个bitmap拦截掉,从而避免了对底层存储系统的查询压力。从缓存取不到的数据,在数据库中也没有取到,我们仍然把这个空结果进行缓存,缓存有效时间可以设置短...原创 2019-10-24 16:26:28 · 196 阅读 · 0 评论 -
多线程生命周期(新建、就绪、运行、阻塞和死亡)
状态概述新建状态(New Thread)线程处于创建状态,并没有调用start()方法之前就绪状态(Runnable)调用start()方法之后进入到就绪状态,系统为该线程分配了除CPU外的所需资源,使该线程处于就绪状态。此外,如果某个线程执行了yield()方法,那么该线程会被暂时剥夺CPU资源,重新进入就绪状态运行状态(Running)Java运行系统通...原创 2019-10-24 15:59:19 · 417 阅读 · 0 评论 -
线程池的实现原理和常见问题
线程池实现原理1.线程池状态runState表示当前线程池的状态,它是一个volatile变量用来保证线程之间的可见性static final变量表示runState可能的几个取值RUNNING当创建线程池后,初始时,线程池处于RUNNING状态SHUTDOWN如果调用了shutdown()方法,则线程池处于SHUTDOWN状态,此时线程池不能够接受新的...原创 2019-10-24 15:13:19 · 297 阅读 · 0 评论 -
如何确保线程顺序执行?
1、thread.Join()你可以用线程类的join()方法在一个线程中启动另一个线程,另外一个线程完成该线程继续执行。为了确保三个线程的顺序你应该先启动最后一个(T3调用T2,T2调用T1),这样T1就会先完成而T3最后完成;这里主要是利用Join的阻塞效果,来达到我们的使用目的。进入join源码后,首先看到的是一个传入0参数的join方法,此处选择继续进入:/** *...原创 2019-10-24 14:26:17 · 758 阅读 · 0 评论 -
Java多线程—死锁
java多线程中的死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去 这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务,死锁的发生必须满足以下四个条件:互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺...原创 2019-10-24 11:51:26 · 139 阅读 · 0 评论 -
spring-AOP
1. 概念:AOP的全称是Aspect Orient Programming,即面向切面编程思想,所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性2. 实现技术:(a) AspectJ的底层技术。AspectJ的底层技术是静态代理,即用一种AspectJ支持的特定语言编写...原创 2019-10-24 11:37:04 · 238 阅读 · 0 评论 -
Mybatis缓存机制
一级缓存:是SqlSession级别的缓存,缓存的数据只在SqlSession内有效(默认开启)具体流程:第一次执行select完毕会将查到的数据写入SqlSession内的HashMap中缓存起来第二次执行select会从缓存中查数据,如果select相同且传参数一样,那么就能从缓存中返回数据,不用去数据库了,从而提高了效率注意事项:如果SqlSession执行了DML操作(i...原创 2019-10-23 18:02:32 · 154 阅读 · 0 评论 -
MySQL优化-explain
explainexplain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用-- 实际SQL,查找用户名为login_name的员工SELECT * FROM...原创 2019-10-23 17:19:51 · 175 阅读 · 0 评论 -
自定义注解
1.注解的定义:Java文件叫做Annotation,用@interface表示。2.元注解: @Retention、@Target、@Document、@Inherited。3.注解的保留策略:@Retention(RetentionPolicy.SOURCE)注解仅存在于源码中,在class字节码文件中不包含@Retention(RetentionPolicy...原创 2019-10-23 15:38:48 · 128 阅读 · 0 评论 -
JPA注解
类目概述@Entity:@Table(name=”“)表明这是一个实体类。一般用于jpa这两个注解一般一块使用,但是如果表名和实体类名相同的话,@Table可以省略@MappedSuperClass用在确定是父类的entity上。父类的属性子类可以继承NoRepositoryBean一般用作父类的repository,有这个注解,spring不会去实例化该re...原创 2019-10-23 15:33:27 · 127 阅读 · 0 评论 -
spring boot常用注解
@SpringBootApplication:包含@ComponentScan、@Configuration和@EnableAutoConfiguration@ComponentScan:让spring Boot扫描到Configuration类并把它加入到程序上下文。@Configuration :等同于spring的XML配置文件;使用Java代码可以检查类型安全。@EnableAuto...原创 2019-10-23 13:54:39 · 118 阅读 · 0 评论 -
spring boot优点
1、简化编码:比如我们要创建一个 web 项目,使用 Spring 的朋友都知道,在使用 Spring 的时候,需要在 pom 文件中添加多个依赖,而 Spring Boot 则会帮助开发着快速启动一个 web 容器,在 Spring Boot 中,我们只需要在 pom 文件中添加如下一个 spring-boot-starter-web 依赖即可;点击进入该依赖后可以看到,Spring Boo...原创 2019-10-22 18:01:03 · 342 阅读 · 0 评论 -
数据结构之数组,栈,链表,队列,树,图,堆,散列表
1、数组数组是可以在内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。优点:1.按照索引查询元素速度快2.按照索引遍历数组方便缺点:1.数组的大小固定后就无法扩容了2.数组只能存储一种类型的数据3.添加,删除的操作慢,因为要移动其他的元素。适用场景:频繁查询,对存储空间要求不大,很少增加和删除的情况。...原创 2019-10-22 17:37:57 · 1581 阅读 · 0 评论 -
Spring中Bean的生命周期和作用域
1.实例化bean对象(通过构造方法或者工厂方法)2.设置对象属性(setter等)(依赖注入)3.如果Bean实现了BeanNameAware接口,工厂调用Bean的setBeanName()方法传递Bean的ID。4.如果Bean实现BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身5.将Bean实例传递给Bean的前置处理器的postPro...原创 2019-10-22 16:56:26 · 188 阅读 · 0 评论 -
spring的IOC、AOP、DI
Spring中IOC的三种实现方式:1.属性注入,或叫做set方法注入;2.构造方法注入;3.注解注入;IOC:就是控制反转,通俗的说就是我们不用自己创建实例对象,这些都交给Spring的bean工厂帮我们创建管理。这也是Spring的核心思想,通过面向接口编程的方式来是实现对业务组件的动态依赖。这就意味着IOC是Spring针对解决程序耦合而存在的。在实际应用中,Spring通过...原创 2019-10-22 16:52:05 · 165 阅读 · 0 评论 -
乐观锁和悲观锁
悲观锁(多写场景)总是假设最坏的情况 ,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占...原创 2019-10-22 16:47:31 · 122 阅读 · 0 评论 -
String、StringBuilder、StringBuffer区别
1.在线程安全上,StringBuilder是线程不安全的,StringBuffer是线程安全的 2.在这方面运行速度快慢为:StringBuilder > StringBuffer > String 3.String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的(final修饰),但后两者的对...原创 2019-10-22 16:43:10 · 105 阅读 · 0 评论 -
常用校验注解
@Null 被注释的元素必须为null@NotNull 被注释的元素不能为null@NotEmpty 验证注解元素值不为null且不为空(字符串长度不为0、集合大小不为0)@NotBlank 验证注解的元素值不为空(不为null、去除首位空格后长度为0)@AssertTrue 被注释的元素必须为true@AssertFalse 被注释的元素必须为false@Min(value=x) ...原创 2019-10-22 16:41:19 · 1341 阅读 · 0 评论 -
JSP的九大内置对象和六种基本动作
九大内置对象:request 、response、pageContext、session、application、exception、out、config、page六种基本动作:Include、useBean、forward、setProperty、getProperty、plugin...原创 2019-10-22 16:37:30 · 130 阅读 · 0 评论 -
Java语言中几个常用的包
java.lang:该包提供了Java语言进行程序设计的基础类,它是默认导入的包。该包里面的Runnable接口和Object、Math、String、StringBuffer、System、Thread以及Throwable类需要重点掌握,因为它们应用很广。java.util:该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成...原创 2019-10-22 16:34:04 · 230 阅读 · 0 评论 -
散列表(Hash table,也叫哈希表)
散列表是根据键(Key)而直接访问在内存存储位置的数据结构散列函数:顾名思义,它是一个函数。如果把它定义成 hash(key) ,其中 key 表示元素的键值,则 hash(key) 的值表示经过散列函数计算得到的散列值。特点:确定性。如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。散列碰撞(collision)。散列函数的输入和输出不是唯一对应关...原创 2019-10-22 16:22:17 · 794 阅读 · 0 评论 -
分库分表
垂直分库:将不同模块的数据库分库存储,模块间不相互查询;如果有,就必须通过数据冗余或应用层二次加工解决,若不能杜绝跨库关联查询,则宣告此路不通。垂直分表:基于数据库中的"列"进行,新建一张扩展表,将不经常用或字段长度较大的字段拆分出去到扩展表中。在字段很多的情况下(大于100),通过"大表拆小表",便于开发与维护,也能避免跨页问题,MySQL底层是通过数据页存储的,一条记录占用空间过大...原创 2019-10-22 16:11:26 · 159 阅读 · 0 评论