自定义博客皮肤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的博客

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

  • 博客(36)
  • 收藏
  • 关注

原创 easySpring | 手写SpringIOC、AOP

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

2020-03-08 16:56:21 318 1

转载 ArrayList与LinkedList源码分析

ArrayList 源码分析1.概述ArrayList 是一种变长的集合类,基于定长数组实现。ArrayList 允许空值和重复元素,当往 ArrayList 中添加的元素数量大于其底层数组容量时,其会通过扩容机制重新生成一个更大的数组。另外,由于 ArrayList 底层基于数组实现,所以其可以保证在 O(1) 复杂度下完成随机查找操作。其他方面,ArrayList 是非线程安全类,并发环境...

2020-02-20 22:32:11 161

原创 HashMap源码分析

HashMap 简介HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。JDK1.8 之前 HashMap 由 数组+链表 组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)时,将链表转化为红黑树(将链表转换成红黑树前会判断...

2020-02-20 18:27:39 158

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

JPA 这部分内容上手很容易,但是涉及到的东西还是挺多的,网上大部分关于 JPA 的资料都不是特别齐全,大部分用的版本也是比较落后的。另外,我下面讲到了的内容也不可能涵盖所有 JPA 相关内容,我只是把自己觉得比较重要的知识点总结在了下面。我自己也是参考着官方文档写的,官方文档非常详细了,非常推荐阅读一下。这篇文章可以帮助对 JPA 不了解或者不太熟悉的人来在实际项目中正确使用 JPA。项目代码...

2020-02-18 22:11:14 339

原创 SpringBoot | @RestController 与 @Controller

@RestController vs @ControllerController 返回一个页面单独使用 @Controller 不加 @ResponseBody的话一般使用在要返回一个视图的情况,这种情况属于比较传统的Spring MVC 的应用,对应于前后端不分离的情况。@RestController 返回JSON 或 XML 形式数据但@RestController只返回对象,对象数据...

2020-02-18 21:35:26 168

原创 SpringBoot | RESTful Web

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

2020-02-18 21:34:19 99

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

目录1.面向对象和面向过程的区别2.Java的特点3. JVM JDK JRE简答JVMJDK 和 JRE4. Java和C++的区别?5. 字符型常量和字符串常量的区别?6. 构造器 Constructor 是否可被 override?7. 重载和重写的区别重载重写8. Java 面向对象编程三大特性: 封装 继承 多态封装继承多态9. St...

2020-02-12 22:02:37 234

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

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

2020-02-10 19:34:54 110

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

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

2020-02-10 16:41:04 402

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

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

2020-02-10 15:51:03 177

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

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

2020-02-10 14:50:35 345 1

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

慢查询一、概念MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是记录运行10秒以上的语句。默认情况下,MySQL数据库并不启动慢查询日志,需要手动来设置这个参数。当然,如果不...

2020-02-10 14:28:55 114

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

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

2020-02-10 14:11:31 448

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

事务MySQL 事务属性事务是由一组 SQL 语句组成的逻辑处理单元,事务具有 ACID 属性:原子性(Atomicity):事务是一个原子操作单元。在当时原子是不可分割的最小元素,其对数据的修改,要么全部成功,要么全部都不成功。一致性(Consistent):事务开始到结束的时间段内,数据都必须保持一致状态。隔离性(Isolation):数据库系统提供一定的隔离机制,保证事务在不受外...

2020-02-10 13:55:59 176

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

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

2020-02-09 23:30:40 240

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

逻辑架构与存储引擎Mysql逻辑架构介绍mysql 数据库的逻辑架构如下图mysql 的逻辑的逻辑架构大体分为四层:连接层、服务层、引擎层、存储层。下面我们就来一一介绍这四层。连接层最上层是一些客户端和连接服务,包含本地socket通信和大多数基于客户端/服务端工具实现的类似于tcp/ip的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通...

2020-02-09 20:05:56 283

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

IOC的实现1.1 BeanFactory的生命流程BeanFactory加载Bean配置文件,将读到的Bean配置封装成BeanDefinition对象将封装好的BeanDefinition对象注册到BeanDefinition容器中注册BeanPostProcessor相关实现类到BeanPostProcessor容器中BeanFactory进入就绪状态外部调用BeanFacto...

2019-11-25 20:33:41 136

原创 Spring IOC AOP的简单实现

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

2019-11-25 18:41:33 121

原创 动态代理InvocationHandler和Proxy

java动态代理机制中有两个重要的类和接口InvocationHandler(接口)和Proxy(类),这一个类Proxy和接口InvocationHandler是我们实现动态代理的核心;1.InvocationHandler接口是proxy代理实例的调用处理程序实现的一个接口,每一个proxy代理实例都有一个关联的调用处理程序;在代理实例调用方法时,方法调用被编码分派到调用处理程序的invok...

2019-11-25 17:27:24 475 1

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

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

2019-11-25 17:09:10 5820 2

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

线程安全的单例模式:1.多线程安全单例模式实例一(不使用同步锁)public class Singleton { private static Singleton sin=new Singleton(); ///直接初始化一个实例对象 private Singleton(){ ///private类型的构造函数,保证其他类对象不能直接new一个该对象的实例 ...

2019-11-23 20:44:41 180

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

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

2019-11-23 19:04:27 454

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

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

2019-11-23 16:50:29 410

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

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

2019-11-06 18:35:59 134

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

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

2019-11-06 18:34:57 185

原创 MyBatis学习笔记(二)MybatisCRUD

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

2019-11-06 18:30:28 99

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

一、MyBatis介绍、入门案例以及自定义实现MyBatis1、什么是框架?它是我们软件开发中的一套解决方案,不同的框架解决的是不同的问题。使用框架的好处:框架封装了很多的细节,使开发者可以使用极简的方式实现功能。大大提高开发效率。2、三层架构表现层:是用于展示数据的业务层:是处理业务需求(Spring不属于任何一个层)持久层:是和数据库交互的3、持久层技术解决方案JDB...

2019-11-06 18:27:39 159

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

AOP目的:增强一个类-》方法编写测试程序,获取bean小概念:AOP:目标SpringAop、AspectJ:手段(两者是竞争对手)一、aop应用1、Enabling @AspectJ Support使项目支持aspectj风格2、xml/@EnableAspectAutoProxy3、编写一个切面@Component@Aspect //切面就是切点、连接点和通知所在的...

2019-10-29 18:43:50 91

转载 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;07 b = -1;08 }09 10 boolean check() {11...

2019-10-28 00:03:41 148

转载 Java中的Unsafe

Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和释放内存。Java中的Unsafe类为我们提供了类似C++手动管理内存的能力。Unsafe类,全限定名是sun.misc.Unsafe,从名字中我们可以看出来这个类对普通程序员来说是“危险”的,一般应用开发者不会用到这个类。Unsafe类是"final"的,不允许继承。且构造函数是...

2019-10-24 20:33:23 139

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

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

2019-10-23 21:47:15 127

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

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

2019-10-23 21:16:12 175

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

线程具体操作与ThreadLocal1 线程中断1.1 什么是线程中断?线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断过程表示一个运行中的线程,通过其他线程调用了该线程的 interrupt() 方法,使得该线程中断标志位属性改变。深入思考下,线程中断不是去中断了线程,恰恰是用来通知该线程应该被中断了。具体是一个标志位属性,到底该线程生命周期是去终止,还是继续运...

2019-10-23 20:14:50 140

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

1 线程与多线程线程是什么?线程(Thread)是一个对象(Object)。用来干什么?Java 线程(也称 JVM 线程)是 Java 进程内允许多个同时进行的任务。该进程内并发的任务成为线程(Thread),一个进程里至少一个线程。Java 程序采用多线程方式来支持大量的并发请求处理,程序如果在多线程方式执行下,其复杂度远高于单线程串行执行。那么多线程:指的是这个程序(一个进程)运行时产...

2019-10-23 19:13:27 147

转载 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 130

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

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

2019-10-17 22:52:08 167

空空如也

空空如也

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

TA关注的人

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