自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

sc的博客

吞山吻雨葬落日,欺山赶海践雪径

原创 easySpring | 手写SpringIOC、AOP

easySpring 在学到Java的Spring容器概念这里,我参考网上的博客和自己的理解实现了一个简易的Spring容器也就是这个项目。该项目分为up和down两部分。 up模块只实现了最简单的IOC和AOP功能,两者并没有联系起来。 后来在down中实现了更复杂的IOC、AOP功能,并使两者...

2020-03-08 16:56:21

阅读数 22

评论数 0

转载 ArrayList与LinkedList源码分析

ArrayList 源码分析 1.概述 ArrayList 是一种变长的集合类,基于定长数组实现。ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。另外,由于 ArrayList 底层基于数组实现,所以其...

2020-02-20 22:32:11

阅读数 3

评论数 0

原创 HashMap源码分析

HashMap 简介 HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。 JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲...

2020-02-20 18:27:39

阅读数 25

评论数 0

转载 一文搞懂如何在 Spring Boot 中正确使用 JPA

JPA 这部分内容上手很容易,但是涉及到的东西还是挺多的,网上大部分关于 JPA 的资料都不是特别齐全,大部分用的版本也是比较落后的。另外,我下面讲到了的内容也不可能涵盖所有 JPA 相关内容,我只是把自己觉得比较重要的知识点总结在了下面。我自己也是参考着官方文档写的,官方文档非常详细了,非常推荐...

2020-02-18 22:11:14

阅读数 13

评论数 0

原创 SpringBoot | @RestController 与 @Controller

@RestController vs @Controller Controller 返回一个页面 单独使用 @Controller 不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。 @RestCont...

2020-02-18 21:35:26

阅读数 23

评论数 0

原创 SpringBoot | RESTful Web

RESTful Web 服务介绍 RESTful Web 服务与传统的 MVC 开发一个关键区别是返回给客户端的内容的创建方式:传统的 MVC 模式开发会直接返回给客户端一个视图,但是 RESTful Web 服务一般会将返回的数据以 JSON 的形式返回,这也就是现在所推崇的前后端分离开发。 内...

2020-02-18 21:34:19

阅读数 13

评论数 0

原创 面试知识点梳理 | Java基础

目录 1.面向对象和面向过程的区别 2.Java的特点 3. JVM JDK JRE简答 JVM JDK 和 JRE 4. Java和C++的区别? 5. 字符型常量和字符串常量的区别? 6. 构造器 Constructor 是否可被 override? 7. 重载和重写的区别 重载 ...

2020-02-12 22:02:37

阅读数 26

评论数 0

原创 MySQL高级知识点 | 九、表锁和行锁

前言: 锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算机资源(如CPU、RAM、I/O等)的争用外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据并发访问性能的一个重要因素。从这个角度来说,锁对...

2020-02-10 19:34:54

阅读数 17

评论数 0

原创 MySQL高级知识点 | 八、索引优化和order by优化

索引优化 SQL性能下降的原因 查询语句写的不好 索引失效 关联查询太多 服务器调优及各个参数的的设置(缓冲、线程数等等) 常见的JOIN查询 1、SQL的执行顺序 手写的顺序: 真正机器执行的顺序: 2、七种join查询 最后两种语法mysql不支持,但是我们可以用union来联合其他...

2020-02-10 16:41:04

阅读数 49

评论数 0

原创 MySQL高级知识点 | 七、SQL优化

SQL优化 优化策略 一、尽量全值匹配 当建立了索引列后,尽量在where条件中使用所有的索引。 CREATE TABLE `staffs`( id int primary key auto_increment, name varchar(24) not null default ...

2020-02-10 15:51:03

阅读数 31

评论数 0

原创 MySQL高级知识点 | 六、执行计划

执行计划 执行计划是什么 执行计划,简单的来说,是SQL在数据库中执行时的表现情况,通常用于SQL性能分析,优化等场景。 为什么要有执行计划 当我们的系统上线后数据库的记录不断增加,之前写的一些SQL语句或者一些ORM操作效率变得非常低。我们不得不考虑SQL优化。 SQL优化大概是这样一个流程: ...

2020-02-10 14:50:35

阅读数 36

评论数 0

原创 MySQL高级知识点 | 五、慢查询

慢查询 一、概念 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。 具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。 long_query_time的默认值为10,意思是记录运行10...

2020-02-10 14:28:55

阅读数 29

评论数 0

原创 MySQL高级知识点 | 四、范式与反范式

范式与反范式 一、三大范式 第一范式 1NF是对属性的原子性,要求属性具有原子性,不可再分解; 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。简而言之,第一范...

2020-02-10 14:11:31

阅读数 105

评论数 0

原创 MySQL高级知识点 | 三、事务

事务 MySQL 事务属性 事务是由一组 SQL 语句组成的逻辑处理单元,事务具有 ACID 属性: 原子性(Atomicity):事务是一个原子操作单元。在当时原子是不可分割的最小元素,其对数据的修改,要么全部成功,要么全部都不成功。 一致性(Consistent):事务开始到结束的时间段内,...

2020-02-10 13:55:59

阅读数 24

评论数 0

原创 MySQL高级知识点 | 二、锁的分类及特性

锁的分类及特性 数据库锁定机制简单来说,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问时变得有序所设计的一种规则。 对于任何一种数据库来说都需要有相应的锁定机制,所以 MySQL 自然也不能例外。 MySQL 数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用...

2020-02-09 23:30:40

阅读数 77

评论数 0

原创 MySQL高级知识点 | 一、逻辑架构与存储引擎

逻辑架构与存储引擎 Mysql逻辑架构介绍 mysql 数据库的逻辑架构如下图 mysql 的逻辑的逻辑架构大体分为四层:连接层、服务层、引擎层、存储层。下面我们就来一一介绍这四层。 连接层 最上层是一些客户端和连接服务,包含本地socket通信和大多数基于客户端/服务端工具实现的类似于tcp/...

2020-02-09 20:05:56

阅读数 55

评论数 0

原创 Spring IOC AOP的手写实现(二)

IOC的实现 1.1 BeanFactory的生命流程 BeanFactory加载Bean配置文件,将读到的Bean配置封装成BeanDefinition对象 将封装好的BeanDefinition对象注册到BeanDefinition容器中 注册BeanPostProcessor相关实现类到B...

2019-11-25 20:33:41

阅读数 19

评论数 0

原创 Spring IOC AOP的简单实现

最简单的IOC容器只需要4步即可实现 加载xml配置文件,遍历其中的标签 获取标签中的id和class属性,加载class属性对应的类,并创建bean 遍历标签中的标签,获取属性值,并将属性值填充到bean中 将bean注册到bean容器中 SimpleIOC: import org.w3c....

2019-11-25 18:41:33

阅读数 16

评论数 0

原创 动态代理InvocationHandler和Proxy

java动态代理机制中有两个重要的类和接口InvocationHandler(接口)和Proxy(类),这一个类Proxy和接口InvocationHandler是我们实现动态代理的核心; 1.InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy...

2019-11-25 17:27:24

阅读数 24

评论数 0

原创 cuda9.1 Win10 python3.6版本的pytorch环境安装

由于大创需要机器学习的框架pytorch,安装过程中这里写一下下载配置过程中遇到的坑。 cpu版本: 只需要复制官网中自己对应版本的pip下载指令就可以了,网速还是很快的 然而下载后才发现代码是需要gpu的 在控制面板中查看自己的cuda版本 (1)按win+Q,输入控制面板,然后查看方式小图标...

2019-11-25 17:09:10

阅读数 89

评论数 0

原创 Java并发编程:马士兵并发笔记(三)并发容器

线程安全的单例模式: 1.多线程安全单例模式实例一(不使用同步锁) public class Singleton { private static Singleton sin=new Singleton(); ///直接初始化一个实例对象 private Singleton(...

2019-11-23 20:44:41

阅读数 31

评论数 0

原创 Java并发编程:马士兵并发笔记(二)可重入锁

可重入锁ReentrantLock ReentrantLock的使用 ReentrantLock可以完全替代synchronized,提供了一种更灵活的锁. ReenTrantLock必须手动释放锁,为防止发生异常,必须将同步代码用try包裹起来,在finally代码块中释放锁. public c...

2019-11-23 19:04:27

阅读数 48

评论数 0

原创 Java并发编程:马士兵并发笔记(一)线程同步基础

线程的创建 继承Thread类,并覆盖run()方法 Thread的实现类继承Thread类,并覆盖其run()方法,run()方法中定义线程需要执行的任务,并调用实现类的start()方法创建线程. 调用实现类的run()方法只是单纯的方法调用,并不能新建线程. class MyThread...

2019-11-23 16:50:29

阅读数 28

评论数 0

原创 MyBatis学习笔记(四)MyBatis中的延迟加载、缓存、注解开发

一、延迟加载 延时加载(懒加载):当一个用户与100个账户关联,如果查用户的时候把账户也查出来了,会造成巨大的内存开销。应该是什么时候使用,什么时候查询账户信息。 立即加载:在查询账户时,账户所属的用户信息应该是随它一起查询出来的。 使用情况: 一对多、多对多:延迟加载 一对一、多对一:立即加载...

2019-11-06 18:35:59

阅读数 26

评论数 0

原创 MyBatis学习笔记(三)MyBatis连接池以及事务控制、基于XML配置的动态SQL语句、多表操作

一、连接池 连接池就是用于存储连接的一个容器 容器就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到统一的连接。还必须实现队列特性:先进先出。 mybatis中的连接池 mybatis提供了三种方式的配置: SqlMapConfig.xml中的标签中的type属性的取值: POO...

2019-11-06 18:34:57

阅读数 27

评论数 0

原创 MyBatis学习笔记(二)MybatisCRUD

接口类代码 public interface IUserDao { // 查询所有 List<User> findAll(); //保存用户 void saveUser(User user); //更新用户 void updata...

2019-11-06 18:30:28

阅读数 13

评论数 0

原创 MyBatis学习笔记(一)MyBatis介绍、入门案例以及自定义实现MyBatis

一、MyBatis介绍、入门案例以及自定义实现MyBatis 1、什么是框架? 它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。 使用框架的好处: 框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。 2、三层架构 表现层:是用于展示数据的 业务层:是处...

2019-11-06 18:27:39

阅读数 30

评论数 0

原创 SpringAOP(一)——源码学习原理和应用

AOP目的:增强一个类-》方法 编写测试程序,获取bean 小概念: AOP:目标 SpringAop、AspectJ:手段(两者是竞争对手) 一、aop应用 1、Enabling @AspectJ Support使项目支持aspectj风格 2、xml/@EnableAspectAutoP...

2019-10-29 18:43:50

阅读数 13

评论数 0

转载 Java多线程基础(五) 并发三大问题和volatile关键字,CAS操作

Java并发三大问题和volatile关键字,CAS操作 序言 01 final class SetCheck { 02 private int a = 0; 03 private long b = 0; 04 05 void set() { 06 a = 1; 0...

2019-10-28 00:03:41

阅读数 13

评论数 0

转载 Java中的Unsafe

Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。 Unsafe类,全限定名是sun.misc.Unsafe,从名字中我们可以看出来这个类对普通程序员来说是...

2019-10-24 20:33:23

阅读数 14

评论数 0

转载 Java多线程基础(四) 一行一行源码分析清楚AbstractQueuedSynchronizer

在分析 Java 并发包 java.util.concurrent 源码的时候,少不了需要了解 AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,因为它是 Java 并发包的基础工具类,是实现 ReentrantLock、CountDownLatch、Semapho...

2019-10-23 21:47:15

阅读数 14

评论数 0

转载 Java多线程基础(三) 深入理解Java内存模型JMM

一:JMM基础与happens-before 并发编程模型的分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模...

2019-10-23 21:16:12

阅读数 12

评论数 0

转载 Java多线程基础(二) 线程具体操作与ThreadLocal

线程具体操作与ThreadLocal 1 线程中断 1.1 什么是线程中断? 线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断过程表示一个运行中的线程,通过其他线程调用了该线程的 interrupt() 方法,使得该线程中断标志位属性改变。 深入思考下,线程中断不是去中断...

2019-10-23 20:14:50

阅读数 17

评论数 0

转载 Java多线程基础(一) 线程启动及线程状态

1 线程与多线程 线程是什么? 线程(Thread)是一个对象(Object)。用来干什么?Java 线程(也称 JVM 线程)是 Java 进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。 Java 程序采用多线程方式来支持大量的并发请求处理,程...

2019-10-23 19:13:27

阅读数 10

评论数 0

转载 Java并发知识学习:线程池

部分内容来自https://javadoop.com/2017/09/05/java-thread-pool/hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io 线程池 一、线程池简介 ​ 线程池可以看做...

2019-10-23 18:26:04

阅读数 9

评论数 0

原创 Java基础知识点总结(一)

Java基础知识点 1)面向对象的特性:封装、继承和多态 封装是指将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露出该对象的功能。 安全、简化操作 继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类的成员 缺点: - 继承是强耦合...

2019-10-17 22:52:08

阅读数 19

评论数 0

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