- 博客(99)
- 资源 (1)
- 收藏
- 关注
原创 代码随想录算法训练营day1-35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。这道题是二分查找的一个变形关键字,有序数组、无重复元素,二分查找无疑要求O(log n),不能使用暴力遍历实际上看完我上一节的二分查找应该不难回答这个问题重点还是掌握好区间。
2023-01-08 14:41:28 189 2
原创 代码随想录算法训练营day1-704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的。target,如果目标值存在返回下标,否则返回 -1。这道题就是最常见的二分查找,没有任何其他隐藏注意点。不贴代码了,肯定不符合本题思路。
2023-01-08 14:08:51 137
原创 Java标记接口
1、什么是标记接口?标记接口有哪些?Java中常用的四个标记接口分别是:RandomAccess、Cloneable、Serializable,Remote,在查看JDK源码的时候,我们会经常发现这些接口的存在,它们不包含任何的方法,但是却广泛的存在,这种接口我们称之为标记接口(Mark Interface),这些接口我们不用实现任何的方法,它们的作用就是当某个类实现这个接口的时候,我们就认为...
2018-07-06 10:35:57 791
转载 Java并发(六)——JUC包下的线程池
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并...
2018-07-02 21:12:01 724
原创 Java并发(五)——JUC包下的原子类
原文:http://www.cnblogs.com/skywang12345/p/3514589.html分类原子类的类结构API根据修改的数据类型,可以将JUC包中的原子操作类可以分为4类。基本类型: AtomicInteger, AtomicLong, AtomicBoolean ;数组类型: Atomi...
2018-07-02 21:06:34 773
原创 Java并发(四)——JUC包下的并发集合类
原文:http://www.cnblogs.com/skywang12345/p/3498454.html之前,在”Java 集合系列目录(Category)”中,讲解了Java集合包中的各个类。接下来,将展开对JUC包中的集合进行学习。在学习之前,先温习一下”Java集合包”Java集合包介绍java集合的架构。主体内容包括Collection集合和Map类;而Collect...
2018-07-02 21:00:30 3247
原创 Java并发(三)——JUC包下的锁和工具类
原文链接 http://www.cnblogs.com/skywang12345/p/3496098.html 概述根据锁的添加到Java中的时间,Java中的锁,可以分为“同步锁”和“JUC包中的锁”。同步锁实现方式即通过synchronized关键字来进行同步,实现...
2018-07-02 20:51:35 2763
原创 Java并发(二)——JUC并发包的概述
JUC并发包概述JDK并发工具类是JDK1.5引入的一大重要的功能,集中在Java.util.concurrent包下。java.util.concurrent包主要包含了并发集合类以及线程池和信号量三组重要工具类。java.util.concurrent包下还包括了java.util.concurrent.atomic以及java.util.concurrent.locks两个子包。它包...
2018-07-02 19:52:16 978
原创 Java并发(一)——锁的种类
其实如果按照名称来说,锁大概有以下名词: 自旋锁 ,自旋锁的其他种类,阻塞锁,可重入锁 ,读写锁 ,互斥锁 ,悲观锁 ,乐观锁 ,公平锁 ,偏向锁, 对象锁,线程锁,锁粗化, 锁消除,轻量级锁,重量级锁, 信号量,独享锁,共享锁,分段锁 我们所说的锁的分类其实应该按照锁的特性和设计来划分概述其实从并发的角度来讲,按照线程安全的三种策略看,主要内容都集中在互斥同步...
2018-07-02 19:28:31 399
原创 Integer.bitCount ()的源码实现
这篇文章接着我的二进制中一的个数源码如下:public static int bitCount(int i) { // HD, Figure 5-2 i = i - ((i >>> 1) & 0x55555555); i = (i & 0x33333333) + ((i >>> 2) &am...
2018-06-27 07:59:24 450
原创 String"+"拼接底层实现原理
说起String拼接,大家会想到几个对比: String:常量,不可变,不适合用来字符串拼接,每次都是新创建的对象,消耗较大。 StringBuffer:适合用来作字符串拼接 StringBuilder:JDK1.5引入,适合用来作字符串拼接,与StringBuffer区别是他不是线程安全的 接下来进入正题String”+”拼接底层实现原理 曾见...
2018-06-26 17:19:32 6063 3
原创 二进制中一的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解法一:奇数的二进制最后一位是1,偶数的二进制最后一位是0,可以通过无符号右移来不断判断。//@1 奇数的二进制最后一位是1,偶数的二进制最后一位是0,可以通过无符号右移来不断判断。 public int bitcount1(int n) { int count=0; ...
2018-06-23 10:54:23 835
原创 Hibernate第五堂课——HQL
HIbernate查询语言(HQL)是面向对象的查询语言,其结构与SQL相似,不同的是,HQL查询的主体是持久化类而不是数据表。 HQL提供了一种应用和数据库之间的抽象,提高了可移植性。 HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写。以下我写了几种HQL语句,实体类部分还是前几个博客中的那个User类:1.简单查询:@Testpu...
2018-06-12 15:13:55 183
原创 旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。这道题属于二分法的变型 思路就是通过判断不断缩小最小数字的范围。public int minNumb...
2018-06-03 20:26:34 123
原创 两个栈实现队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。栈的特点是先进后出,队列的特点是先进先出。我们使用两个栈正好能把顺序反过来实现类似队列的操作。看起来很简单,还是有两个要注意的点:栈1向栈2中压入时必须一次性全部压入如果第2个栈部位空绝对不能向其中压入数据。 Stack<Integer> stack1 = new...
2018-06-03 16:10:43 144
原创 从尾到头打印链表
题目描述输入一个链表,从尾到头打印链表每个节点的值。 一般有逆序输出第一个想到的就是栈,由于栈的特性后进先出//@1借助堆栈的后入先出原则 public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack=new Stack...
2018-06-03 15:40:20 270
原创 替换空格
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。不多说这里写了简单的两种方法: @1public String replaceSpace(StringBuffer str) { StringBuffer s=new StringBuffer(); ...
2018-06-02 14:41:54 158
原创 二维数组中的查找
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。最简单直接的方法时间复杂度为O(n^2),遍历整个二维数组看其中是否有这个整数。public class Solution { public boolean Find(int target, int [][...
2018-06-02 14:11:45 323
原创 短信发送验证码
昨天发现一个有趣的事情,邮箱和短信是如何发送验证码的?所以我做了实践。经过测试之后,完成了,所以写这篇博客记录一下。短信发送验证码是需要花钱的,网上可以找到许多可以帮你发送短信的产品,这里我选择的是一款叫做云片的产品。这里我说一下步骤: @1 首先自己注册一个帐号,然后找到这个 @2 点击开始接入,完成新手引导过程。 @3 第二步的签名和模板必须填写,类似我下面填...
2018-05-30 12:25:22 1349
原创 邮箱发送验证码
昨天发现一个有趣的事情,邮箱和短信是如何发送验证码的?所以我做了实践。经过测试之后,完成了,所以写这篇博客记录一下。首先说一下邮箱发送验证码,邮箱发送验证码是免费的。可以通过网易邮箱进行发送。 首先写了个简单的jsp页面,后端就是用了简单的servlet写的,所以要导入导入jstl-1.2.jar,servlet-api.jar两个包,jsp页面代码如下:<%-- Cr...
2018-05-30 12:04:59 2626
原创 Hibernate第四堂课(对象识别)
其实重写equals算是Java基础的一部分,但是在这里提到了,就说一下当作复习了。1. equals与==的区别。== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象...
2018-05-22 18:07:53 150
原创 Hibernate第三堂课(一个线程一个Session实例)
接着我的Hibernate的第二堂课,那么又出现了一个新问题,那就是我们今天要说的,如何保证在一个线程中仅存在一个Session实例?常见的方法有几种:getCurrentSession(Hibernate3以后)可以采用ThreadLocal的办法(HIbernate2)把Session对象放到方法内部定义(自认为每次实例化很耗费)现在Hibernate5已经出现了,所以...
2018-05-22 17:43:05 276
原创 Hibernate第二堂课(单例SessionFactory)
接着我的Hibernate的第一堂课,今天我们来说一下单例SessionFactory。不多说,今天我用代码来实现一个单例的SessionFactory 以下是代码实现:单例工厂的建立import org.hibernate.HibernateException;import org.hibernate.SessionFactory;import org.hibernate.cf...
2018-05-22 17:21:22 184
原创 Java四种元注解
四个元注解分别是:@Target,@Retention,@Documented,@Inherited ,再次强调下元注解是java API提供,是专门用来定义注解的注解,其作用分别如下: @Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中,包括: ElemenetType.CONSTRUCTOR-------------------...
2018-05-21 21:38:46 369 2
原创 Arrays.sort()的底层实现
Java Arrays中提供了对所有类型的排序。其中主要分为Primitive(8种基本类型)和Object两大类。 基本类型:采用调优的快速排序 对象类型:采用改进的归并排序1.基本类型(以int为例)源码中的快速排序,主要做了以下几个方面的优化: 1)当待排序的数组中的元素个数较少时,源码中的阀值为7,采用的是插入排序。尽管插入排序的时间复杂度为0...
2018-05-21 21:32:57 6340
原创 HashSet的底层实现
这篇文章的来源是这样的: 有一次面试,面试官问我HashSet的底层实现,可以使用HashMap来实现吗? 我没有看过啊,感觉瞬间懵逼!!! 后来一看:其实底层就是用HashMap实现的。HashSet底层是采用HashMap实现的。HashSet 的实现比较简单,HashSet 的绝 大部分方法都是通过调用 HashMap 的方法来实现的,因此 Hash...
2018-05-21 21:10:09 666
原创 归并排序的空间复杂度优化——手摇算法(内存反转算法)
序言:第一次听到这个算法感觉这个名字很有意思,甚至感觉到很高大上,仔细一看其实以前也看到过,就是字符串的三重反转算法,只是不知道它的这个高大上的名字。手摇算法具体是啥?首先抛出一个问题:反转字符串中两块元素的位置,该怎么做? 可能有的人会说,没问题,我们在开辟一块内存保存一部分的元素块,然后我们再复制两次就可以了。但是如果加上限制空间复杂度只能是O(1),又该如何解决呢?...
2018-05-21 20:18:19 2357 1
原创 外部排序优化之败者树与胜者树
概述: 胜者树和败者树都是完全二叉树,是树形选择排序的一种变型。每个叶子结点相当于一个选手,每个中间结点相当于一场比赛,每一层相当于一轮比赛。不同的是,胜者树的中间结点记录的是胜者的标号;而败者树的中间结点记录的败者的标号。胜者树与败者树可以在log(n)的时间内找到最值。任何一个叶子结点的值改变后,利用中间结点的信息,还是能够快速地找到最值。在k路归并排序中经常用到。胜...
2018-05-21 13:36:49 3092 3
原创 外部排序
学习一个知识的步骤: 什么是外部排序? What? 为什么要使用外部排序? Why? 怎样使用外部排序? How? 1.什么是外部排序? 外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个...
2018-05-21 13:00:41 1848
原创 hibernate第一堂课
搭建一个hibernate框架的步骤安装jdk 我选择安装jdk 1.8。 安装之后配置环境变量JAVA_HOME PATH下载hibernate的jar包,这里我选择了hibernate 5.2.10下载并安装mysql,idea。新建一个java项目,在idea中选择Java->Web Application->Hibernate 下一步后点击Finish建立项目建立数据库 并连接
2018-05-07 21:33:39 230
原创 Django简单语法
变量 使用{{ }}if/else 标签 (支持嵌套){% if condition %} ... display{% endif %}或者{% if condition1 %} ... display 1{% elif condition2 %} ... display 2{% else %} ... display 3{% end...
2018-05-02 11:19:20 296
原创 python(一)
python缺点: 运行速度慢(解释性语言) 代码不能加密(发布python程序就是发布源代码) 简单的python程序#coding:utf-8#这是一个注释,只能写在前面print "helloWorld"# ,分割多个字符print '100+200=',100+200#多行打印print '''为...什...么'''...
2018-04-25 19:28:09 207
原创 线程的使用方法
三种使用线程的方法 实现Runnable接口 实现Callable接口 继承Thread类 三种方法的比较 采用继承Thread类方式创建多线程 劣势:已经继承Thread不能再继承其他父类 优势:编写简单 采用实现Runnable,Callable接口的方式创建多线程 劣势:编程稍微有点复杂,如果需要访问当前线程必须用Threa
2018-04-14 21:14:15 267
原创 Java类型擦除
什么是类型擦除?类型擦除指的是通过类型参数合并,将泛型类型实例关联到同一份字节码上。编译器只为泛型类型生成一份字节码,并将其实例关联到这份字节码上。类型擦除的关键在于从泛型类型中清除类型参数的相关信息,并且再必要的时候添加类型检查和类型转换的方法。 类型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。
2018-04-07 13:36:04 963
原创 重写equals
public class Equal { public static void main(String[]args) { Animal a=new Animal(10,"狗"); Animal a1=new Animal(10,"狗"); System.out.print(a.equals(a1)); }}class Animal {
2018-04-06 15:18:50 183
原创 Java 克隆
克隆如People p=p1; 这不是克隆,而是两个对象指向一个堆。@Test public void test() { Teacher teacher=new Teacher("男"); People p=new People(10,"张三",teacher); People p1=p;//指向一个堆 System.out
2018-04-06 13:57:21 151
转载 GitHub全程指南
请参考:https://blog.csdn.net/happyduoduo1/article/details/51781800
2018-04-01 19:23:34 164
原创 HashMap、HashTable和ConcurrentHashMap
HashTable和HashMap区别继承不同 public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements MapHashtable中的方法是同步的,而HashMap中的方法在缺省 情况下是非同步的。即是说,在多线程应用程序中,不用
2018-03-28 17:28:24 163
原创 Hash冲突
哈希表的特点:关键字和它在表中存储位置之间存在一种函数关系。这个函数我们称为为哈希函数。 hash : 翻译为“散列”,就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。 这种转换是一种压缩映射,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值,由此引出hash冲突。 简单的说就是一种将任意长度的消
2018-03-28 15:20:34 15258 2
原创 HashMap底层实现原理
HashMap的出现 在线性表(数组,链表等),树中,关键字与其它的存放位置不存在对应的关系,在查找关键字的时候需要逐个比对,虽然出现了二分查找等各种提高效率的的查找算法,但这些并不够,我们需要查找关键时候不需进行比对,一次找到,因此把关键字和其对应的存储位置间建立对应的关系,由此哈希表应运而生。 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。...
2018-03-27 18:48:37 330
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人