- 博客(25)
- 收藏
- 关注
原创 在服务器上执行临时代码
手动实现一个简单的远程执行功能, 用户在服务端执行临时代码代码与灵感来自 《深入理解java虚拟机》第二版程序实现思路1. 如何编译提交到服务器的java代码2. 如果执行编译后的代码3. 如何收集java代码的执行结果解决方案1. 采取简单做法, 本机编译完, 上传到服务端2. 类加载器加载类生成class对象, 反射调用对象方法3. 在执行类中把Sys...
2019-04-27 22:25:54
591
原创 mybatis 分页 RowBounds和PageHelper性能评测
测试机器, 笔记本 win7 cpu i5-4210M 8G内存测试数据 单表 181w数据mybatis常用分页组件性能对比1. RowBounds2. PageHelper3. 性能对比 数据 耗时 RowBounds 180w数据 pag...
2019-03-24 22:31:15
5087
1
原创 mybatis 批量插入数据
mybatis常用批量插入数据方法foreach标签mybatis BATCH模式插入1. foreach标签foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指...
2019-03-24 21:49:34
283
转载 How tomcat works——2 一简单的Servlet容器
概述本章通过二个应用Demo讲解如何开发自己的servlet容器。应用Demo1尽可能简单的设计,以便于你更好地理解servlet容器是如何工作的。然后,应用Demo1慢慢演化为第二个servlet容器——稍微变的复杂一些。注意:每一章的应用Servlet容器都是由上一章逐渐演化过来的,直到一个完整的Tomcat Servlet容器在第17章出现。二个Servlet容器都可以处理简单的servle...
2018-05-08 18:10:49
234
转载 How tomcat works——1 一个简单的Web Server
本章讲解了Java Web Server是如果工作的。一个Web Server也被叫着HTTP(Hypertext Transfer Protocol) Server,因为它使用HTTP协议和客户端通讯——客户端通常是WEB浏览器。一个最基本的Java Web Server会用到二个重要的Class:java.net.Socket和java.net.ServerSocket,通过HTTP信息通信。...
2018-05-08 18:00:11
221
原创 sleep() 和 wait() 的区别
sleep()sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。 当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。wait()wait()是Object类的方法,当一个线程执行到wait...
2018-05-06 20:29:34
222
原创 java 中的 ==, equals 与 hashCode
概念== : 该操作符生成的是一个boolean结果,它计算的是操作数的值之间的关系equals : Object 的 实例方法,比较两个对象的content是否相同hashCode : Object 的 native方法 , 获取对象的哈希值,用于确定该对象在哈希表中的索引位置,它实际上是一个int型整数若操作数的类型是基本数据类型,则该关系操作符判断的是左右两边操作数的值是否相等若操作数的类型...
2018-04-30 22:19:00
307
原创 LinkedHashMap 与 LRUcache
LRU 缓存介绍我们用缓存来存放以前读取的数据,而不是直接丢掉,这样,再次读取的时候,可以直接在缓存里面取,而不用再重新查找一遍,这样系统的反应能力会有很大提高。但是,当我们读取的个数特别大的时候,我们不可能把所有已经读取的数据都放在缓存里,毕竟内存大小是一定的,我们一般把最近常读取的放在缓存里LinkedHashMap解析要实现 LRU 缓存,我们首先要用到一个类 LinkedHashMap。用...
2018-04-30 22:14:14
421
原创 反射
1. 什么是反射简而言之,通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息。程序中一般的对象的类型都是在编译期就确定下来的,而Java反射机制可以动态地创建对象并调用其属性,这样的对象的类型在编译期是未知的。所以我们可以通过反射机制直接创建对象,即使这个对象的类型在编译期是未知的。 反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译...
2018-04-27 00:16:27
592
原创 强引用 软引用 弱引用 虚引用
1.概念解释强引用是使用最普遍的引用:Object o=new Object(); 特点:不会被GC将对象的引用显示地置为null:o=null; // 帮助垃圾收集器回收此对象举例ArrayList的实现源代码: 软引用用来描述一些还有用但是并非必须的对象,在Java中用java.lang.ref.SoftReference类来表示。对于软引用关联着的对象,只有在内存不足的时候JVM才会...
2018-04-27 00:15:48
387
原创 java基础系列(四)Java中final finally和finalize的区别
1、final 修饰符(关键字)如果一个类被final修饰,意味着它不能再派生出新的子类,不能作为父类被继承。因此,一个类不能既被声明为abstract,又被声明为final。如果一个方法被final修饰,意味着它只能被使用,不能被重写(override)。如果一个变量被final修饰,意味着它在使用过程中,不可以被改变。而且,被final修饰的变量的初始化有两种方式:1、在final变量定义时直...
2018-04-26 00:04:25
506
转载 java基础系列(三)JDK7与JDK8中HashMap的实现
JDK7中的HashMapHashMap底层维护一个数组,数组中的每一项都是一个Entrytransient Entry<K,V>[] table;我们向 HashMap 中所放置的对象实际上是存储在该数组当中; 而Map中的key,value则以Entry的形式存放在数组中static class Entry<K,V> implements Map.Entry<K,...
2018-04-25 23:57:16
446
转载 java基础系列(二)HashMap线程不安全的体现
HashMap的原理以及如何实现,之前在JDK7与JDK8中HashMap的实现中已经说明了。那么,为什么说HashMap是线程不安全的呢?它在多线程环境下,会发生什么情况呢?1. resize死循环我们都知道HashMap初始容量大小为16,一般来说,当有数据要插入时,都会检查容量有没有超过设定的thredhold,如果超过,需要增大Hash表的尺寸,但是这样一来,整个Hash表里的元素都需要被...
2018-04-25 23:05:14
537
原创 java基础系列(一)List 和 Set
1. List 特点2. Set特点Set具有与Collection完全一样的接口,因此没有任何额外的功能,不像前面有两个不同的List。实际上Set就是Collection,只 是行为不同。(这是继承与多态思想的典型应用:表现不同的行为。)Set不保存重复的元素(至于如何判断元素相同则较为负责)Set 存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equa...
2018-04-24 23:55:08
648
原创 RocketMQ系列(二):初识RocketMq
初识RocketMq1. RocketMq概述学习一个技术首先要找到官方地址 http://rocketmq.apache.org/开源社区地址: https://github.com/alibaba/RocketMQ2. 核心概念2.1专业术语角色:Producer生产者。发送消息的客户端角色。发送消息的时候需要指定Topic。Cons...
2018-04-22 12:48:29
807
原创 RocketMQ系列(一):MQ应用场景
MQ应用场景1.消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题 实现高性能,高可用,可伸缩和最终一致性架构 使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ2.MQ的应用场景以下介绍消息队列在实际应用中常用的使用场景。 异步处理,应用解耦,流量削锋和消息通讯...
2018-04-22 12:46:35
6476
原创 markdown学习笔记
markdown学习笔记markdown学习笔记标题语法的使用 二级2 三级标题3 四级标题4 五级标题列表语法1 无序列表2 有序列表1 引用1 插入链接1 粗体和斜体代码1. 标题语法的使用 二级1.2. 三级标题1.3. 四级标题1.4. 五级标题2. 列表语法2.1 无序列表1232.2 有序列表1233.1 引用 这里是引用 要注意符号和文本
2017-03-04 17:24:22
587
原创 设计模式之模版模式
设计模式之原型模式1. 概述模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
2017-03-04 16:59:25
1149
原创 设计模式之策略模式
设计模式之策略模式1. 概念在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。主要解决:在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。何时使用:一个系统有许多许多类,而区分它们的只是他们直接的行为。如何解决:将这些算法封装
2017-03-04 16:26:38
1024
原创 设计模式之装饰器模式
设计模式之装饰器模式1. 概念装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。 这种模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整性的前提下,提供了额外的功能。意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般
2017-03-04 16:10:40
1089
原创 设计模式之适配器模式
设计模式之适配器模式1. 适配器模式定义适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。 这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,读卡器是作为内存卡和笔记本之间的适配器。您将内存卡插入读卡器,再将读卡器插入笔记本,这样就可以通过笔记本来读取内存卡。意图:将一个类的
2017-03-04 15:48:58
925
原创 设计模式之抽象工厂模式
设计模式之抽象工厂模式1. 抽象工厂模式定义抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。意图:提供一个创建一系列相关或相互依赖对象
2017-03-04 15:22:36
1081
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人