自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

原创 利用枚举实现单例模式

Java中的枚举是一个很容易被大家遗忘的知识点,鄙人在工作中也很少使用枚举,最近仔细整理了一下相关知识点吗,发现用好枚举可以为开发带来很多长处。枚举早在JDK1.5就被引入了,应该是比较古老的特性了,那枚举具体可以用在哪些场景下呢?1、常量的定义2、switch的入参3、单例模式的实现在WEB开发中,经常需要封装一个ResponseDto类来返回一些调用的结果信息,如下:...

2019-03-17 11:45:56 10949 7

原创 读写锁的实现

读写锁主要用来解决读-读能共存,读-写不能共存,写-写不能共存的情况,它的使用场景主要是读写分离,比如自己实现一个缓存,在刷新缓存的时候就需要用到读写锁。下面撸上一段代码,简单实现以下。/** * @author Administrator * @date 2019/3/3 */public class Cache { static Map<String,String&...

2019-03-03 12:27:44 474

原创 Future模式

Java多线程中,Callable/Future接口是一个非常重要的知识点,我们都知道无论继承Thread类,还是实现Runnable接口,在线程任务执行结束后,都无法获取执行结果,所以Java中提供了Callable、Future接口,Callable的call方法用来执行任务,产出结果,Future的get方法用来获取线程执行的结果。它们的底层使用的其实是Future模式。比如,现在主线程发送...

2019-03-02 21:52:28 289

原创 利用阻塞队列BlockingQueue实现线程安全的生产者消费者模型

面试过程中,一般都会问到消息中间件的相关知识,生产者消费者模型是消息中间件的基础,面试过程中可能会遇到手写一个简单的生产者消费者模型的情况,在此代码实现。生产者代码/** * @author Administrator * @date 2019/3/2 */public class ProducerThread implements Runnable { priva...

2019-03-02 10:02:49 323 1

原创 VisualSVN Server的安装与使用

1、VisualSVN Server的安装参考这里2、关于使用的的几个问题2.1 Error running context: 由于目标计算机积极拒绝,无法连接可能原因是VisualSVN Server服务没有启动计算机——>管理——>服务和应用程序——>服务,把VisualSVN Server服务启动即可2.3关于Eclipse中提交项目到VisualSVN Server服务器...

2018-03-26 10:34:32 1371

原创 2018_03_01琐事小记

    本人目前处于研三阶段,去年腊月十四回的家,在家没事看看书,陪陪家人,今年正月初十(2018-02-25)就来了学校,学校还没开学,也没什么人,室友和实验室的同学们都还没来,同级的很多人都去北京实习了。我没参加实习是因为公司离学校太远(学校在天津,公司在南方),同时三、四月份还要忙于毕业论文,期间导师还要开各种会,不想跑来跑去浪费时间和金钱。最主要的是还想再试试春招。去年秋招也拿到一些Off...

2018-03-01 12:13:34 320

原创 Python语法

1、在Python3中没有raw_input()这个函数,只有input()这个函数 2、在Python3中没有unichr()这个函数,只有chr()这个函数,表示将一个整数转化成Unicode字符。 3、str()函数和repr()函数的区别:str()函数是将一个对象转化成字符串,得到的结果不能通过eval()函数重新得到这个对象,而repr()函数也是将对象转化为字符串,‘ ’得到的结果

2017-11-11 20:44:14 405

原创 Django入门(四、Admin)

Admin是Django自带的一个功能强大的自动化数据管理界面,被授权的用户可以直接在Admin中管理操作数据库。一、创建一个超级管理员,使用manager.py命令中的createsuperuser创建一个用户名和密码。 二、启动服务器,在地址栏中输入http://127.0.0.1:8000/admin/,再输入用户名和密码,登录。发现界面是英文的,可以调整成中文显示,在setting.py中

2017-11-08 20:12:01 382

原创 Django入门(三、Models)

Django中的Models是什么? 通常,一个Model对应数据库的一张数据表。Django中的Models以类的形式表现,它包含了一些基本的字段以及数据的一些行为。 1、创建模型,在应用blog1的model.py中添加模型类,和数据交互的类必须必须继承models.Model,这样才能和关系数据库进行交互。 2、数据迁移,ctrl+alt+R 在命令行中输入makemigration

2017-11-08 16:57:14 329

原创 Django入门(二)

在Django入门(一)中,我们实现了一个响应页面,在页面中显示hello,world,在配置url的时候,我们是把url配置在工程根目录下的urls.py文件中,如图,但是当我们有许多个应用的时候,维护起来非常不方便,而且容易出现url名称冲突的情况。所以实际开发中不建议使用这种url配置方式。 我们可以使用Django的另外一种url配置的方法。 URL配置的第二种方式: 1、在工程的

2017-11-08 13:46:34 352

原创 Django入门(一)

关于前期环境的搭建,比如安装Python,Django,PyCharm,可以参考另一篇博文 Django是使用Python语言写的一个开源框架,并遵循MVC设计,并且有一个专有名词MVT,其中M为Model,与MVC中的M功能相同,负责数据处理,内嵌了ORM框架。V为View,与MVC中的C功能相同,接收HttpRequest,业务处理,返回HttpResponse。T为Template,与MVC

2017-11-08 11:06:48 442 1

原创 Window系统中安装Python和Django框架

最近想看看Python的框架Django,记录一下安装的步骤: 1、首先安装Python,进入Python官网 我的系统是Window7,64位,安装的是Python3.6.3 64位的。注意勾上pip选项和add python to path选项。前者是为了方便后来安装Django,后者为避免手动为Python配置路径。 2、在Window的DOS界面输入Python显示版本号,输入一条Py

2017-11-07 18:42:44 477

原创 字符串翻转(Java)

今天面试,面试官问了我一个这样的问题,比如ab..dd….scd…df这样一个字符串,把它翻转成df…scd….dd..ab,让我在稿纸上coding出来,当时思路极为混乱,现在coding出来以作记录。import java.util.Scanner;import java.util.Stack;public class test { public static void main(St

2017-11-03 17:06:14 340

原创 【网易2017春季】工作安排

现在有n位工程师和6项工作(编号为0至5),现在给出每个人能够胜任的工作序号表(用一个字符串表示,比如:045,表示某位工程师能够胜任0号,4号,5号工作)。现在需要进行工作安排,每位工程师只能被安排到自己能够胜任的工作当中去,两位工程师不能安排到同一项工作当中去。如果两种工作安排中有一个人被安排在的工作序号不一样就被视为不同的工作安排,现在需要计算出有多少种不同工作安排计划。 输入描述: 输

2017-08-04 16:02:48 432

原创 最长合成字串

有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。 给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。 测试样例: [“a”,”b”,”c”,”ab”,”bc”,”abc”],6 返回3 [“a”,”b”,”ab”,”abc”],4 返回2import java.uti

2017-07-21 21:18:37 506 1

原创 计数排序

计数排序假设n个输入元素中的每一个都是介于0到k之间的整数,此处k为某个整数。public static int[] Sort1(int [] A,int k){//k表示数组A中的最大值 int [] C=new int[k+1];//临时数组C int [] B=new int[A.length];//B存放结果 //首先是通过一个数组C[i]计

2017-06-18 11:21:11 350

原创 最长公共子序列,最长上升公共子序列

package test01;//最长公共子序列问题public class LCS { public static void main(String[] args) { char[] ch1={1,2,4,5,6,2}; char[] ch2={2,5,6,9,2,10,11,43}; //maxLen[i][j]表示 ch1左边起i个字

2017-06-17 21:42:19 703

原创 最大子序列

最大子序列是要找出由数组成的一维数组中和最大的连续子序列。比如{5,-3,4,2}的最大子序列就是 {5,-3,4,2},它的和是8,达到最大;而 {5,-6,4,2}的最大子序列是{4,2},它的和是6。你已经看出来了,找最大子序列的方法很简单,只要前i项的和还没有小于0那么子序列就一直向后扩展,否则丢弃之前的子序列开始新的子序列,同时我们要记下各个子序列的和,最后找到和最大的子序列。 pu

2017-06-17 16:52:17 2273

原创 最长公共子串

找两个字符串的最长公共子串,这个子串要求在两个原字符串中是连续的。其实这又是一个序贯决策问题,可以用动态规划来求解。我们采用一个二维矩阵来记录中间的结果。这个二维矩阵怎么构造呢?直接举个例子吧:”bab”和”caba”(当然我们现在一眼就可以看出来最长公共子串是”ba”或”ab”)    b  a  bc  0  0  0a  0  1  0b  1  0  2a  0  2  0package

2017-06-17 16:03:58 428

原创 JVM内存空间

大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , VM Stack(虚拟机栈,也有翻译成JAVA 方法栈的),Native Method Stack ( 本地方法栈 ),其中Method Area 和 Heap 是线程共享的 ,VM Stack,Native Me

2017-05-30 19:46:08 581

原创 JVM的垃圾回收

Java中的堆是JVM所管理的最大的一块内存空间,主要用于存放各种类的实例对象在Java中堆被划分成两个不同的区域:新生代(Yong),老年代(Old)。新生代(Yong)又被划分成三个区域:Eden,From Survivor,To Survivor这样划分的目的是为了使JVM能更好的管理内存中的对象,包括内存的分配以及回收。 堆的内存模型大致为: 堆大小=新生代+老年代GC类型分为Sca

2017-05-30 11:15:36 376

原创 输出所有和为S的连续正数序列

题目:输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。package test05;import java.util.ArrayList;public class test01 { public ArrayList<ArrayList<Integer>> FindContinuousSequence(int sum) { Arra

2017-05-28 18:52:14 868

原创 二叉树的序列化与反序列化

剑指offer上有一道题目:请实现两个函数,分别用来序列化和反序列化二叉树。 首先要明白题意,二叉树的序列化就是说把二叉树保存到文件中,当然这里保存的是字符串。反序列化就是说把刚才序列化的文件把转化成和原来一模一样的二叉树。(话不多说直接上代码)/*public class TreeNode { int val = 0; TreeNode left = null; Tre

2017-05-28 16:30:08 534

原创 二叉树的层次遍历

import java.util.ArrayList;import java.util.*;/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val;

2017-05-28 15:22:02 402

原创 二叉树的下一个结点

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 分成两大类: 1、有右子树的,那么下个结点就是右子树最左边的点;(eg:D,B,E,A,C,G) 2、没有右子树的,也可以分成两类,a)是父节点左孩子(eg:N,I,L) ,那么父节点就是下一个节点 ; b)是父节点的右孩子(eg:H,J,K,M)找他的

2017-05-28 11:17:37 396

原创 Z字型打印二叉树

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。1、用两个栈实现package test04;import java.util.ArrayList;import java.util.Stack;/* * 注意从第一层开始,每一层的节点都是先进入相应的栈,在出栈,最后按照出栈的顺序,add到每一层的

2017-05-28 11:11:30 2421

原创 单链表去重

package test04;import java.util.*;//定义节点结构class Node { int data; Node next = null; Node(int data) { this.data = data; }}public class test03 { public static void main(Str

2017-05-27 13:50:28 3489

原创 整数划分(递归)

package test04;//元素n的划分,即存在某些数,n1,n2,n3,n4.....使得n1+n2+...=n//比如6的划分共有11种,Count(6,4)=9/*6 5+1 4+2 4+1+1 3+3 3+2+1 3+1+1+1 2+2+2 2+2+1+1 2+1+1+1+1 1+1+1+1+1+1 */publ

2017-05-27 10:04:49 678

原创 全排列去重

1、利用HashSet的性质,元素不重复package test03;import java.util.Arrays;import java.util.HashSet;public class test09 { private static HashSet<String>set=new HashSet<String>(); public static void main(Str

2017-05-27 09:24:30 757

原创 java实现全排列

全排列是一个很简单的数学问题,但是要把它用程序实现,确实要费点思路。思考了一个小时,才用递归实现了它。代码很简单,但是要思考每一步的流程,确实要花费一点时间,再一次证明分治和递归的强大。package test03;import java.util.Arrays;public class test08 { public static void main(String[] args) {

2017-05-27 08:51:11 659

原创 Java实现Sunday算法

Sunday算法是Daniel M.Sunday于1990年提出的字符串模式匹配。其核心思想是:在匹配过程中,模式串发现不匹配时,算法能跳过尽可能多的字符以进行下一步的匹配,从而提高了匹配效率。相比于另外几个著名的字符串匹配算法,KMP以及BM算法而言,Sunday算法不仅理解起来比较容易,而且往往能有更好的速度。 首先i,j两个指针指示的位置(也就是从头开始匹配),当发现失配的时候就判断子串

2017-05-26 10:18:26 2307

原创 分治法求最值

package test02;public class Test01 { public static void main(String[] args) { int[] a = { 3, 4,1, 3, 22, 11, 33, 90, 1,2,12,90, 89}; int max = getMax(a, 0, a.length - 1); i

2017-05-25 16:44:28 521

原创 快速排序

快速排序是采用分治和递归的经典算法之一,每次找一个基数,比它大的放右边,比它小的放左边。 public static void mysort1(int[] a,int begin,int end){ if(begin<end){//递归的临界条件 int low=begin; int high=end; i

2017-05-25 16:41:57 314

原创 改进的KMP

KMP改进主要是对next数组进行改进 如图当s[3]与p[3]不匹配时,根据next[3]=1,所以继续把s[3]与p[1]进行比较,即把模式串右移j-k=3-1=2位,此时s[3]与p[1]还是不等。其实仔细想一想,这是必然的,为什么呢? 因为当j=3时,p[j]=p[next[j]]即p[3]=p[1],问题就出在这里,当s[i]!=p[j],又因为p[j]=p[next[j]],

2017-05-25 16:35:03 1491

原创 KMP算法java实现

关于KMP算法,网上很多资源,就不介绍了,建议不懂的看看数据结构这本书,很详细,或者参看下面说说java实现,(整个算法流程加代码实现花了快一天时间) 首先看看一般的算法,也就是网上说的暴力(蛮力)算法,它的时间复杂度为O(n*m) m为模式串的长度,n为主串的长度package test03;public class test05 { public static int volient

2017-05-25 15:47:06 524

原创 关于类继承的面试题

package test01;public class Z extends X{ { System.out.print(3); } Y y=new Y(); public Z(){ System.out.print("Z"); } { System.out.print(4); } pub

2017-05-22 16:23:41 672 1

原创 JSON数据格式转化

前两天写一个程序发现自己对JSON数据格式理解的不是很透彻,所以记录写一篇博客梳理一下知识点。JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式。同时它也是JavaScript 原生格式。在JSON中,有两种结构:对象和数组。大括号保存对象,中括号保存数组 JSON数据保存在名称/值对中,名称为...

2017-04-21 11:15:04 2179

原创 二叉树的遍历(递归与非递归)

package TreeNodePack; import java.util.Stack; public class BinTree { private char date; private BinTree lchild; private BinTree rchild; public BinTree(char c){ date=c;

2017-04-10 10:43:58 340

原创 (Java实现)输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。 1、递归做法//1、将左子树构成双链表,并返回该链表的头节点(左子树最左边的节点)//2、定位到左链表的最后一个节点(左子树最右边的节点)//3、如果左子树链表不为空,则将当前root追加到左子树链表后//4、将右子树构造成双向链表,并返回链表头结点(右子树最左边的节点)//

2017-04-09 22:03:38 2518 1

原创 CyclicBarrier、CountDownLatch、Exchanger

CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。CyclicBarrier表示线程相互等待,直到所有线程集合完毕,再继续向下执行,想在什么地方集合就在什么地方await() CountDownLatch就像一个倒计时器,调用CountDownLatch对象的countDown方法就可以将计数器减1,当计数到达0时,则所有等待者或者单个等待者开始执行。可以实现一个

2017-04-02 20:33:59 317

空空如也

空空如也

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

TA关注的人

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