摘要: 1、手动调用Class.forName() 我们知道当我们连接MySQL数据库时,会使用如下代码: 那么Class.forName()有什么作用呢? 首先我们知道Class.forName() 方法要求JVM查找并加载指定的类到内存中,此时将"com.mysql.jdbc.Driver" 当做参数传 阅读全文
posted @ 2019-01-28 20:58 清晨_ 阅读(19834) 评论(0) 推荐(1) 编辑
摘要: 如果我们要使用MyBatis进行数据库操作的话,大致要做两件事情: 定义dao接口文件 在dao接口中定义需要进行的数据库操作方法。 创建映射文件 当有了dao接口后,还需要为该接口创建映射文件。映射文件中定义了一系列SQL语句,这些SQL语句和dao接口一一对应。 MyBatis在初始化的时候会 阅读全文
posted @ 2019-01-27 17:39 清晨_ 阅读(7245) 评论(0) 推荐(1) 编辑
摘要: 1、http协议 当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据完毕后,Http会立即将TCP连接断开,这个过程是很短的。所以Http连接是一种短连接,是一种无状态的连接。所谓的无状态,是指浏览器每次向服务器发起 阅读全文
posted @ 2019-01-19 15:43 清晨_ 阅读(169) 评论(0) 推荐(0) 编辑
摘要: 随着互联网技术的发展,大型网站需要的计算能力和存储能力越来越高。网站架构逐渐从集中式转变成分布式。 虽然分布式和集中式系统相比有很多优势,比如能提供更强的计算、存储能力,避免单点故障等问题。但是由于采用分布式部署的方式,就经常会出现网络故障等问题,并且如何在分布式系统中保证数据的一致性和可用性也是一 阅读全文
posted @ 2019-01-19 15:32 清晨_ 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 一、先纵览一下Netty,看看Netty都有哪些组件? Bootstrap or ServerBootstrap EventLoop EventLoopGroup ChannelPipeline Channel Future or ChannelFuture ChannelInitializer C 阅读全文
posted @ 2019-01-12 14:40 清晨_ 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 1、IDEA创建maven工程 2、 在maven项目的pom.xml 添加mybatis-generator-maven-plugin 插件和MySQL数据库驱动依赖 3、在maven项目下的src/main/resources 目录下建立名为 generatorConfig.xml的配置文件,作 阅读全文
posted @ 2018-07-02 18:17 清晨_ 阅读(454) 评论(0) 推荐(0) 编辑
摘要: 一、基本数据类型 对象类型 1、首先想一个问题,有了基本类型之后为什么还要有包装器类型呢? 核心:让基本类型具备对象的特征,实现更多的功能. Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型。 我们在使用集合类型map、list时就一定 阅读全文
posted @ 2018-06-18 14:21 清晨_ 阅读(351) 评论(0) 推荐(0) 编辑
摘要: 封装 概念:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。是面向对象三大特征之一。 好处:将变化隔离。提高重用性。提高安全性。 封装原则: • 将不需要对外提供的内容都隐藏起来。 • 把属性都隐藏,提供公共方法对其访问。 Java中可以通过对类的成员设置一定的访问权限,实现类中成员的信息隐藏 阅读全文
posted @ 2018-06-17 14:28 清晨_ 阅读(3124) 评论(0) 推荐(4) 编辑
摘要: 一、为什么需要垃圾回收 如果不进行垃圾回收,内存迟早都会被消耗空,因为我们在不断的分配内存空间而不进行回收。除非内存无限大,我们可以任性的分配而不回收,但是事实并非如此。所以,垃圾回收是必须的。 二、哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无非就是那 阅读全文
posted @ 2018-06-13 20:28 清晨_ 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 1、堆外内存定义 内存对象分配在Java虚拟机的堆以外的内存,这些内存直接受操作系统管理(而不是虚拟机),这样做的结果就是能够在一定程度上减少垃圾回收对应用程序造成的影响。使用未公开的Unsafe和NIO包下ByteBuffer来创建堆外内存。 2、为什么使用堆外内存 1、减少了垃圾回收 使用堆外 阅读全文
posted @ 2018-06-13 13:41 清晨_ 阅读(13643) 评论(1) 推荐(0) 编辑
摘要: 1、动态数据源切换时,如何保证事务 目前事务最灵活的方式,是使用spring的声明式事务,本质是利用了spring的aop,在执行数据库操作前后,加上事务处理。 spring的事务管理,是基于数据源的,所以如果要实现动态数据源切换,而且在同一个数据源中保证事务是起作用的话,就需要注意二者的顺序问题, 阅读全文
posted @ 2018-06-09 17:05 清晨_ 阅读(1143) 评论(0) 推荐(0) 编辑
摘要: 一、单机模式 在这种情况下,如果我们实现锁可以使用synchronized或ReentrantLock,但是在分布式情况下,它们最多只能锁住当前JVM的线程,对于其它server的线程无能为力。那么怎么处理呢? 二、分布式锁 1、基于数据库表做乐观锁 一般是通过为数据库表添加一个 “version 阅读全文
posted @ 2018-05-01 16:22 清晨_ 阅读(153) 评论(0) 推荐(0) 编辑
摘要: Spring作为当前Java最流行、最强大的轻量级框架,受到了程序员的热烈欢迎。准确的了解Spring Bean的生命周期是非常必要的。我们通常使用ApplicationContext作为Spring容器。这里,我们讲的也是 ApplicationContext中Bean的生命周期。而实际上Bean 阅读全文
posted @ 2018-05-01 11:58 清晨_ 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 首先看代码 打印结果是0,而如果是i=++i,那么打印将会1。下面我们从字节码的角度来分析为什么是这样。 在讲字节码之前,先简单的了解下Java栈,在JVM中有这么一个数据结构叫Java栈,当线程启动的时候,会分配一块内存当做该线程的栈,每个栈由一系列的栈帧组成。每个栈帧对应一个方法,当线程执行方法 阅读全文
posted @ 2018-04-30 18:35 清晨_ 阅读(272) 评论(0) 推荐(0) 编辑
摘要: 一、慢查询 假设我们有一个订单表,分页查询一条语句是这样的 但当订单表数据达到了百万级,那么这样写会慢死 上面这条语句有可能花费几十秒. 我们看到,随着记录的增多,limit语句的查询时间与起始记录的位置成正比增长。 因为LIMIT 100000,10的意思扫描满足条件的100010行,扔掉前面的 阅读全文
posted @ 2018-04-21 21:08 清晨_ 阅读(991) 评论(0) 推荐(0) 编辑
摘要: 用传统的OOP思想来说,任何一个你写好的且编译过的生成的Class文件,在被类加载器加载后,都会对应有一个java.lang.Class这个类的实例。所以说,每个类的自有的方法属性(类结构)自然被包含在了这个对应的实例上,因此就可以获取到。 一、原理简介 1 public class TestCla 阅读全文
posted @ 2018-03-12 16:33 清晨_ 阅读(70486) 评论(2) 推荐(6) 编辑
摘要: 一、基础篇 1.1、Java基础 面向对象的特征:继承、封装和多态 final, finally, finalize 的区别 Exception、Error、运行时异常与一般异常有何异同 请写出5种常见到的runtime exception int 和 Integer 有什么区别,Integer的值 阅读全文
posted @ 2018-03-10 10:54 清晨_ 阅读(302) 评论(1) 推荐(0) 编辑
摘要: 转载自:http://blog.csdn.net/lylwo317/article/details/52163304 首先写一个简单的自定义注解小程序 //先自定义一个运行时注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME 阅读全文
posted @ 2018-03-07 14:39 清晨_ 阅读(597) 评论(0) 推荐(0) 编辑
摘要: 一、动态代理的使用 public class Test { //被代理的接口 public interface IHello { void sayHello(); } //接口的实现类 static class Hello implements IHello { public void sayHel 阅读全文
posted @ 2018-03-05 16:30 清晨_ 阅读(144) 评论(0) 推荐(0) 编辑
摘要: 今天遇到了个问题,把版本回滚了,但是一push,又回到了原来的版本,后来多执行了第三步,然后解决 1. 使用git log命令查看所有的历史版本,获取某个历史版本的id,假设查到历史版本的id是 139dcfaa558e3276b30b6b2e5cbbb9c00bbdca96。 2. 回滚到这个版本 阅读全文
posted @ 2018-01-29 15:48 清晨_ 阅读(1545) 评论(0) 推荐(0) 编辑