自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 资源 (3)
  • 收藏
  • 关注

原创 Leetcode——验证回文字符串

题目描述:给定一个非空字符串 s,最多删除一个字符。判断是否能成为回文字符串。解题思路:使用双指针,一个指向头,一个指向尾,如果两者不相同了,则可以将尾部的往前挪一个,或者首部的往后挪一个,判断这两种情况这两种已经相当于删除了一个字符,如果不是回文字符串,说明删除一个字符满足不了要求class Solution { public boolean validPalindrome(String...

2018-06-28 23:51:12 1255

原创 设计模式——装饰器模式和桥接模式

装饰器模式(Decorator Pattern)概念:装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委拖被装饰者的行为之前或之后加上自己的行为,已达到特定的目的组成:装饰器模式由组件和装饰者组成。抽象组件(Component):需要装饰的抽象对象。 具体组件(ConcreteComponent):是我们需要装饰的对象 抽象装饰类(Decorator):内含指向抽象组...

2018-06-28 21:50:34 2693

原创 设计模式——适配器模式

适配器模式:定义:适配器模式将某个类的接口转换成客户端期望的另一个接口表示,主的目的是兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。主要分为三类:类适配器模式、对象的适配器模式、接口的适配器模式。使用场景:1 系统需要使用现有的类,而这些类的接口不符合系统的需要。 2 想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作。 3 需要...

2018-06-28 21:22:58 612

原创 Spring事务管理

Spring事务Java EE应用的传统事务有两种策略:全局事务和局部事务。全局事务由应用服务器管理,需要底层服务器的JTA支持。局部事务和底层所采用的持久化技术有关,当采用JDBC持久化技术时,需要使用Connection对象来操作事务。全局事务可以跨多个事务性资源(比如说多个数据库和消息队列);使用局部事务,应用服务器不需要参与事务管理,因此不能保证多个事务性资源的事务正确性。全局事务和局部事...

2018-06-26 23:37:57 785

原创 代理模式详解

代理模式总结代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法 静态代理静态代理在使用时,需要定义接口或者父类,被代理对象与代理对象一起实现相同的接口或者...

2018-06-24 23:45:32 1130

原创 Spring Ioc容器

Spring演进Spring框架所倡导的基于POJO(Plain Old Java Object,简单Java对象)的轻量级开发理念,就是从实际出发,立足于最基础的POJO(就好像我们的地球)。为了能够让这些基础的POJO构建出健壮而强大的应用,Spring框架就好像那包裹地球的大气层一样,为构筑应用的POJO提供了各种服务,进而创造了一套适宜用POJO进行轻量级开发的环境。整个Spring框架构...

2018-06-21 22:42:15 174

原创 剑指offer——滑动窗口的最大值

题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...

2018-06-18 23:39:53 663

原创 剑指offer——n个骰子的点数

题目描述:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能出现的值出现的概率。解题思路:将n个骰子分为两堆,第一堆只有一个,剩下一堆有n-1个然后再计算n-1个骰子的点数之和,过程和第一步一致这显然是一种递归的解法总共n个骰子,有6~n种排列组合,骰子点数之和在n到6n之间,所以可以用一个5n+1的数组来存放出现点数之和的次数,将和为s的点数存放在数组的第s-n个元素...

2018-06-18 20:11:49 398

原创 解密ThreadLocal

ThreadLocalThreadLocal的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度。正是因为这是一个线程的局部变量,也就是说,只有在当前线程内部可以访问,因此是线程安全的,但是要注意,如果在应用上为每一个线程分配了相同的对象实例,那么ThreadLocal也不能保证线程安全。initialValue函数init...

2018-06-17 22:00:48 634

原创 实现线程的顺序执行

之前,看到过一个题目,是关于如何使得线程顺序执行的当时,我的第一个想法就是使用join方法,在t3线程内部调用t2线程的join()方法,然后在t2内部继续调用t1线程的join方法来实现线程的顺序执行,话不多说,手写代码来测试结果:/*实现三个线程的顺序执行 * coded by Jerome */public class ThreadRun { public static void ...

2018-06-16 21:10:23 660 1

原创 剑指offer——圆圈中最后剩下的数字

题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样下去......

2018-06-14 23:34:52 226

原创 剑指offer——扑克牌中的顺子

题目描述:LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为...

2018-06-14 22:51:27 278

原创 MySQL学习笔记——查询性能优化

查询性能优化查询性能优化主要从查询优化、索引优化、库表结构优化三个方面出发慢查询基础:优化数据访问查询性能低下最根本的原因就是访问的数据太多,大部分性能低下的查询都可以通过减少访问的数据量进行优化。一般有效的分析步骤如下:确认应用程序是否在检索大量超过需要的数据。这通常意味着访问了太多的行,也有可能是访问了太多的列。确认MySQL服务器层是否在分析大量超过需要的数据行。是否向数据库请求了不需要的数...

2018-06-14 21:50:10 238

原创 MySQL学习笔记——索引的理解

索引的概念什么叫索引索引也称作键,是存储引擎用于快速找到记录的一种数据结构。索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度。B树和B+树之间的区别B树的数据结构: B+树和B树的区别1、有n棵子树的结点中含有n-1个关键字(与B树相同,MySQL中的B+树索引采用这种); (此处有争议,另一种说法是,B+树...

2018-06-14 21:48:40 312

原创 ConcurrentLinkedQueue详解

一、 前言常用的并发队列有阻塞队列和非阻塞队列,前者使用锁实现,后者则使用CAS非阻塞算法实现,使用非阻塞队列一般性能比较好,下面就看看常用的非阻塞ConcurrentLinkedQueue是如何使用CAS实现的。ConcurrentLinkedQueue是无界队列。对于使用锁实现阻塞队列的也分两种情况,一种是使用一把锁,例如ArrayBlockingQueue;还有一种是LinkedBlocki...

2018-06-13 23:49:09 1344 1

原创 MySQL学习笔记一事务和存储引擎

锁通常分为两种锁,一是共享锁(读锁),一种是排他锁(写锁)。读锁是共享的,或者说是互相不阻塞的。多个客户在同一时刻可以同时读取同一个资源而互不干扰。写锁则是排他的,也就是说写锁会阻塞其他的读锁和写锁。MySQL中主要有两种锁:表锁(table lock)和行级锁(row lock)死锁的概念:多个线程因竞争系统资源或相互通信而处于永久阻塞状态,若无外力作用,这些线程都将无法继续向前推进。这些线程中...

2018-06-13 22:56:23 253

原创 剑指offer——和为s的连续正数序列

题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!解题思路:首先确定一个最小数small为1,最...

2018-06-08 23:12:41 172

原创 生产者-消费者模式

生产者-消费者模式生产者-消费者模式是一种经典的多线程设计模式,它为多线程之间的协作提供了良好的解决方案。利用共享内存缓冲区来进行通信。它有以下两个好处:生产者和消费者之间不直接进行通讯,而是通过共享内存缓冲区,从而将生产者和消费者进行了解耦由于共享内存缓冲区的存在,允许生产者和消费者在执行速度上存在时间差异,平衡了生产者和消费者的处理能力实现方式在Java中一共有四种方法支持同步,其中前三个是同...

2018-06-07 20:52:06 159

原创 详解CAS技术

无锁实现并发的几种方式:1. 锁2. CAS3. ThreadLocal变量;可重入性代码锁是一种悲观的策略,锁认为每次临界区的操作都会产生冲突,所以当有多个线程需要同时访问临界区资源,锁会阻塞线程执行无锁是一种乐观的策略,它假设所有对资源的访问都是没有冲突的,因此所有线程都可以不用阻塞的持续执行,一旦遇到冲突,无锁采用CAS(Compare And Swap)来鉴别冲突,一旦检测到冲突,则...

2018-06-05 22:53:56 6073

原创 详解BlockingQueue

BlockingQueueBlockingQueue接口主要实现: BlockingQueue中特有的put()和take()方法是Blocking的关键,这两个方法可以在队列为满,或者空的时候进行阻塞等到,当有新的任务被拿去执行或新的任务进入队列后,自动将线程唤醒BlockingQueue的实现与使用介绍添加元素的几种方法add():队列已满时,再添加会抛出异常——对应remove()offer...

2018-06-05 22:46:39 3073 1

原创 剑指offer——在排序数组中查找数字出现的次数

题目描述:统计一个数字在排序数组中出现的次数。解题思路:利用折半查找思想,找到第一个目标值k和最后一个目标值k对于第一个k值求法:首先找到数组中间的值,若大于k,则在数组前半部分找;若小于k,则在后半部分找;若等于k,则判断前一个数是否是k,若不是说明这个就是第一个k,否则还是要在前半部分找第一个k对于最后一个k做法和求找第一个k差不多public int GetNumberOfK(int [] ...

2018-06-05 22:39:08 197

转载 数据库索引原理及优化

本文内容主要来源于互联网上主流文章,只是按照个人理解稍作整合,后面附有参考链接。一、摘要本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道...

2018-06-04 20:43:14 179

原创 剑指offer——数组中的逆序对

题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007解题思路:顺序扫描数组的话,则每个数需要和n个数进行比较,时间复杂度为O(n~2),尝试更快的算法只是相邻两个数进行比较,将数组拆分成子数组,知道拆分一个个数组长度为1的小数组,然后两两归...

2018-06-04 20:41:24 167

原创 手写一个死锁程序

package DeadLock;/*写一个两个线程死锁的程序 * coded by Jerome */class MyDeadLock implements Runnable{ boolean flag; static Object o1 = new Object(); static Object o2 = new Object(); public MyDeadLock(bool...

2018-06-03 23:31:01 3696 6

原创 各种排序算法实现及各自的特点

插入排序:1. 直接插入排序/* * 直接插入排序 * coded by Jerome */ public static void Direct_Insert(int[] a){ int temp = 0; for(int i = 1;i<a.length;i++){ if(a[i]<a[i-1]){ temp = a[i]; int j = i;...

2018-06-03 23:17:24 1209

转载 解密ThreadLocal

转载出处:http://qifuguang.me/2015/09/02/[Java%E5%B9%B6%E5%8F%91%E5%8C%85%E5%AD%A6%E4%B9%A0%E4%B8%83]%E8%A7%A3%E5%AF%86ThreadLocal/ 相信读者在网上也看了很多关于ThreadLocal的资料,很多博客都这样说:ThreadLocal为解决多线程程序的并发问题提供了一种新的思路;T...

2018-06-03 23:05:37 490

原创 剑指offer——把数组排成最小的数

题目描述:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。解题思路:将数组中的数看成字符串形式对于数组中的数,对将ab连接起来的字符串小于ba连接起来的字符创,则a应该放在b的前面最终按该规则将数组中的元素进行排序,然后将排完序的数组拼接成字符串即可public Stri...

2018-06-03 19:55:26 397

原创 剑指offer——连续子数组之和

题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长度...

2018-06-03 11:15:53 402

原创 剑指offer——最小的k个数

题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路:解法1:和面试题39的思路3一样,都是基于快速排序的思想,找到一个基准元素的位置,如果基准元素正好是第k个数则结束,若在k个数后面,则在基准元素前面找,否则在后面找解法2:分为3个步骤——1. 从n个数中选前k个数,将其构造为大顶堆2. 对k个数后面的数,...

2018-06-02 19:56:16 818

原创 JDK并发容器和BlockingQueue

JDK的并发容器Map类HashMap,位于java.util包下,是不安全的,可以采用Collections工具类来进行包装public static Map m = Collections.synchronizedMap(new HashMap());这样得到的Map就是线程安全的,但是在多线程环境下性能表现不是很好,因为它是通过加锁的方式,会导致其他线程对Map的操作全部等待Concurr...

2018-06-01 21:21:48 431

选课系统代码

在线选课系统的毕业设计,功能齐全,绝对能够使用,是校级优秀论毕业设计。

2016-10-08

选课系统的实现与应用

在线选课系统的毕业论文,超级详细,绝对有用,是校级优秀论文。

2016-10-08

空空如也

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

TA关注的人

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