自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java适配器

Java适配器上一篇笔记说到,如果想要做一个反向迭代器和随机迭代器,那么不应该覆盖原有的方法,而是应该创建新的方法。当有一个接口需要另外一个接口的时候,编写适配器就可以解决问题。适配器有时候只是将原有的接口接口做了另外一层封装,看下面这个代码传统方法protected String[] words = "H W R D A D Y F A E I K N P".split(" "); ...

2019-10-24 10:37:31 303

原创 LeetCode.81 搜索旋转排序数组Java

LeetCode.81 搜索旋转排序数组注意:通过mid和左边数字大小可以判断到底是左边有序还是右边有序需要处理重复数字最后才能通过???代码:class Solution { public boolean search(int[] nums, int target) { if (nums.length == 0) { ...

2019-09-15 20:48:40 329

原创 LeetCode.80 删除排序数组中的重复项 Java

LeetCode.80 删除排序数组中的重复项算法:原地挪动一般都是双指针如果是当前判断元素elem,那么当前元素个数++,如果满足不超过两次的条件,那么将这个数保存,然后左指针+1如果超过三个,那么只是index+1如果当前元素已经更改,那么重新选择当前元素,index不变public int removeDuplicates(int[] nums) { if (nu...

2019-09-10 17:58:41 370

原创 LeetCode.79 单词搜索Java

LeetCode.79 单词搜索[外链图片转存失败(img-6KDMgno4-1567591639574)(media/15675914896534/15675915125390.jpg)]这是一个矩阵回溯算法典型题目,涉及到DFS和状态回溯重置偏移量数组在二维平面经常使用的对于这种搜索算法,代码编写也相对固定package com.leetcode.solution;/** ...

2019-09-04 18:07:36 300

原创 LeetCode.78 子集Java

LeetCode.78 子集Java还是使用回溯法:package com.leetcode.solution;import sun.awt.image.ImageWatched;import java.util.*;/** * @Author : fanc * @Date : 2019-09-03 17:10 * 78子集 */public class Solutio...

2019-09-03 17:48:49 185

原创 leetcode77.组合Java

LeetCode.77 组合解法一:DFS+回溯法图解:代码:package com.leetcode.solution;import java.util.*;/** * @Author : fanc * @Date : 2019-09-01 19:25 */public class Solution77 { List<List<Integer&gt...

2019-09-03 17:09:42 336

原创 java 数组和List拷贝

数组和List浅拷贝和深拷贝数组拷贝1. clone方法public class ArrayCopyTest { public static void main(String[] args) { int[] a1 = {-1, 2, 3}; //浅拷贝 int[] a2 = a1; a2[0] = 2; ...

2019-09-01 22:11:27 834

原创 leetcode.76 最小覆盖子串Java

题目描述:思路一两个指针left和right都指向第一个元素然后right指针向右移动,知道找到第一个包含的(包含的可以用一个map统计)然后左指针向左移动,看能不能缩小范围,当左指针移动到窗口的字母比T的字母个数还少的时候,再移动右指针。建立Map字典:Map<Character, Integer> dicT = new HashMap<>(); ...

2019-09-01 14:36:24 180

原创 Java多线程学习总结

参考链接:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/MultithreadJava并发基础何为进程进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 m...

2019-08-12 19:59:05 277

原创 Java回调机制CallBack总结(生产者消费者模式、监听者模式)

什么是回调在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A类去调用,这种机制就称为回调。生产者消费者模式一个例子一个销售向工人订了100台机器准备卖给老外,让工人在生产完100台机器后通知下他.Workerpackage Solution;public ...

2019-08-11 21:50:28 1026

原创 Java对日期的处理,计算相隔的年、月、日

获取这个日期的年、月、日/** * 年月日 * @param userId * @return */ def dateMap(Date userRegDate ) { if(!userRegDate) { return null } Calendar cal = Calenda...

2019-08-06 09:52:40 1095

原创 MetaQ源码分析——消息传输流程

Broker接收从Producer(Client端)发送的消息,也能够返回消息到Consumer(Client),对于Broker来说,就是网络输入输出流的处理。Broker使用淘宝内部的gecko框架作为网络传输框架,gecko是一个NIO框架,有很多优秀的特性。由于网络模块与其他模块关联性极强,不像存储模块可以独立分析,所以此篇文章开始将从全局开始分析Broker。首先看一下Broker...

2019-07-07 20:50:07 364

原创 MetaQ源码分析——架构、配置、消息存储

MetaQ源码详细分析

2019-07-07 16:49:46 599

原创 几种MySQL索引的比较和区别(Primary、Normal、Unique、FullText、Spatial)

关于MySQL索引底层原理,可以参考我之前的博文:https://blog.csdn.net/weixin_36372879/article/details/90668838主键索引(Primary, pk_)必须为主键字段创建一个索引,这个Mysql索引就是所谓的“主索引”。一般情况下,数据库的主键为依次递增的uuid。这样可以在插入的时候,加快建立索引的速度。普通索引(Normal,...

2019-07-02 15:52:08 1732

原创 MetaQ文档学习

消息中间件和RPC(HSF)异同RPC适用场景调用时双向的调用方需要依赖多个服务提供结果消息队列适用场景消息发送不受限于消息消费方处理速度发送方通过queue进行消息堆积,防止击穿下游服务多个下游服务可以订阅同一个topic进行处理处理耗时操作,比如文件复制,网络下载等等。概念和术语消息生产者简称producer,负责消息产生并发送到meta服务器消息消费者简称...

2019-07-02 12:19:52 1202

原创 java synchronized用法详解

参考链接:https://blog.csdn.net/evankaka/article/details/44153709线程运行状态图:synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范...

2019-06-13 21:52:50 626

原创 MyBatis学习(三) MyBatis中设计模式分析

测试代码:import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;...

2019-06-06 10:06:32 222

原创 MyBatis学习(二)MyBatis入门(注解方式)

创建测试函数直接在IDE中使用psvm创建main函数:public static void main(String[] args) throws Exception{ //1. 读取配置文件 InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml"); //2. 创建Sq...

2019-05-30 17:07:36 187

原创 MyBatis学习(一)MyBatis+IDEA 环境配置和注意事项

jdbcJDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API。jdbc环境...

2019-05-30 16:28:07 4118 1

原创 java虚拟机内存模型

一个类的执行过程。黄色的是线程共享的。蓝色的是每一个线程独有的。程序计数器你的程序马上要执行的下一行代码对应的地址指针方法区静态变量常量类元信息,把类文件解析成不同的部分Math.class字节码文件,主要被类装载子系统装载到方法区加入有new了两个math对象,那么在堆中,就会有两个math对象,并且这些对象都会指向Math.class在方法区里面的类原信息。堆...

2019-05-29 17:44:12 182

原创 深入理解MySql索引底层数据结构与算法

索引是用来优化数据库查询速度的,是表级别的。mysql会根据主键来自动建立索引方便查询。下面介绍索引的底层原理以及很多细节的步骤。1. 为什么使用B+树而不使用二叉搜索树或者红黑树二叉搜索树:红黑树:B树:首先二叉搜索树是不能够自己调整高度的。红黑树能够自己调整高度,用在java的HashMap中,但是红黑树也是二叉树,建立索引之后的高度仍然太高。而B-树和B+树每一层能够...

2019-05-29 12:30:21 345

原创 Log4J介绍和用法

Log4J介绍通过log4j可以看到程序运行过程中更加详细的信息。用法:需要导入log4j的jar包需要将log4j的配置文件放在src下面可以调整日志级别:info or debuginfo:可以基本看到日志输出:debug:可以看到更加详细的输出:...

2019-05-27 20:53:43 164

原创 Spring AOP(Aspect Oriented Programming)面向切面编程(配置方式)

AOP和继承的区别继承是横向的,当父类名称更改的时候,子类方法里面也需要更改aop是横向的,通过创建动态代理对象(不是真正的对象,但是可以实现功能)来实现AOP原理底层都是是用动态代理实现,不修改源代码,只是增强功能。AOP操作术语public class User { public void add() { } public void update() { } ...

2019-05-26 18:58:23 224

原创 Spring使用注解的方式创建对象和依赖注入

导入jar包,引入约束<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/conte...

2019-05-23 22:19:07 1709

原创 Spring对象注入和复杂(Array、List、Map、Properties)属性注入

对象注入创建两个对象:public class UserService { private UserDao userDao; //set一定要小写 public void setUserDao(UserDao dao) { userDao = dao; } public void add() { System.out....

2019-05-22 22:05:28 1411

原创 python从零开始实现区块链(区块链数据结构、挖矿、交易、分布性一致性解决方案源码)

参考链接:https://hackernoon.com/learn-blockchains-by-building-one-117428612f46参考链接:https://xiaozhuanlan.com/topic/15476082931区块链数据结构(BlockChain.py)一个区块主要结构如下:block = { 'index' : len(self.c...

2019-05-17 16:52:10 4490 5

原创 Spring ioc入门

spring ioc原理控制反转大概的流程如下:为了解耦合,需要创建工厂类。创建对象之后,创建xml配置文件,然后使用dom4j解析配置文件再使用反射创建一个对象spring ioc简单的例子在这之前需要导入jar包。如果创建spring的项目,IDE会自动导入这些jar包首先创建一个User类package cn.itcast.ioc;public class Us...

2019-05-11 14:14:21 117

原创 Java使用接口(interface)实现对类数组的排序

在java中,接口不是类,而是对类的一组需求的描述,这些类要遵从接口描述的统一格式进行定义。Arrays类中sort方法可以对对象数组进行排序,但是需要满足下面的前提:对象所属的类必须实现Comparable接口下面是Comparable接口代码:任何实现Comparable接口都需要compareTo方法将类声明为实现某个接口,需要使用关键字implements如果实现Compa...

2019-04-17 22:42:10 915

原创 Java泛型数组列表ArrayList详解 & ArrayList API

ArrayList介绍普通的数组一旦确定大小,想要再改变空间大小就不太容易了。在Java中,解决这个问题最简单的方式是使用Java的ArrayList类。下面声明和构造一个保存Employee对象的数组列表。ArrayList<Employee> staff = new ArrayList<Employee>();在Java SE7中,可以省去右边的类型参数:但...

2019-04-15 21:54:31 576

原创 理解Java抽象类、抽象方法

在面向对象中,所有的对象都是通过类来描述的。但是并不是所有的类都用来描绘对象。当一个类的属性不足以描绘一个对象的时候,这个类就是抽象类。由于抽象类不包含实例对象,因此抽象类必须被继承。在Java中,抽象类表示的是一种继承的关系。一个类只能继承一个抽象类,而一个类却可以实现多个接口。考虑这个应用场景,Employee和Student里面都继承自Person类,而Person类定义了一些基本...

2019-04-13 21:06:23 884 1

原创 Java静态域和静态方法(static)详解

1.静态域如果将域定义为static,每个类只有一个这样的域。例如上面这个员工类,每一个员工都有自己的id,但是这个类的所有实例将共享一个nextId域。也就是说,1000个员工对象,每一个与员工都有自己的id。但是只有一个静态域nextId。即使没有一个Employee对象,静态域nextId依然存在。可以理解静态域就是一个类域2.静态常量静态变量使用的比较少,但是静态常量使用...

2019-04-08 17:50:44 1393

原创 Java数组详解

声明数组数组for each循环有点像python语法:for(int element : a) System.out.println(element);数组打印:import java.util.Arrays;public class array { public static void main(String[] args){ ...

2019-04-06 20:57:43 142

原创 java处理输入,Scanner API

Java想要通过控制台进行输入的时候,首先要定义一个Scanner对象,并与标准输入流相关联:Scanner in = new Scanner(System.in);Scanner类定义在java.util包中,当使用的类不是在java基本的java.lang中的时候,需要使用import导入import java.util.*; //Scanner的库import java.u...

2019-04-05 21:56:54 1470

原创 java字符与字符串String & char

字符串拼接java允许用+号来拼接两个字符串这种特性也经常用在输出语句中System.out.println("The answer is" + answer);字符串不可变和python一样,java的字符串也是不可变的。但是我么你可以采用substring方法检测字符串是否相等字符串长度,判断空串String API构建字符串可以采用StringBuild...

2019-04-05 19:40:03 356

原创 【leetcode】矩阵置零 常数空间复杂度

算法思想肯定要另外开辟空间的,要不然遍历一遍,将行和列置0,那么后面就不知道到底是原来的0还是后面置的0如果使用O(mn)的空间,那么需要存放原来0的位置如果使用O(m + n)的空间,那么需要更新每一行和每一列0的位置有一种思想就是先记录第一行和第一列有没有0然后从(1,1)开始遍历,如果遍历到0的话,在第一行和第一列更新,进行记录,就不需要开辟O(m+n)的空间了。最后在根据第...

2019-03-26 20:41:19 310

原创 【leetcode】编辑距离(动态规划)

实现算法这种处理复杂单词,处理两个复杂字符串,可以往动态规划上面想如果word[i]和word[j]相同,那么距离就是word[i - 1][j - 1]如果不同的话,有三种生成方法。第一种是替换:word[i-1][j-1] + 1第二种是增加:word[i-1][j] + 1第三种是减少:word[i][j-1] + 1所以应该去上面三个的最小值,于是动态规划的公式就出来...

2019-03-26 19:42:19 313

原创 【leetcode】爬楼梯(@lru_cache()装饰器用法)

自己的解法,直接使用动态规划,比较简单class Solution: def climbStairs(self, n: int) -> int: if n == 1: return 1 memory = [0] * (n + 1) memory[1] = 1 memory[2] = 2 ...

2019-03-26 11:54:06 1315

原创 python协程,从yield/send到async/await

什么是协程python众所周知由于全局解释所GIL的限制,导致线程无法发挥多核并行计算的能力,显得比较鸡肋。既然在GIL之下,同一时刻只能有一个线程在运行,那么对于CPU密集的程序来说,线程之间的切换开销就成了拖累,而以I/O为瓶颈的程序正是协程所擅长的参考链接:http://python.jobbole.com/86069/协程与进程的区别协程拥有自己的寄存器上下文和栈。协程调度切换时...

2019-03-23 22:27:57 262

原创 【leetcode】字符串相乘

解题思路:长度为n1的数字和长度为n2的数字相乘,总的最长长度为n1 + n2最高位(n1 + n2 - 1)是进位所得,所以k的最大值为n1 + n2 - 2注意这是从高到低的结果,需要进行翻转4 3 2 1 0注意去掉前面0的时候,注意结果为0的情况,别全部去掉了。代码class Solution: def multiply(self, num1: str, ...

2019-03-23 21:34:33 174

原创 堆排序算法及实现

使用数组来模拟堆。由于是一个满二叉树左孩子使用nums[2i+1]模拟右孩子使用nums[2i+2]模拟堆排序的基本思路为:a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆;b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;c.重新调整结构,使其满足堆定义,然后继续交换堆顶元素与当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。1. 堆调整函数#始终...

2019-03-23 21:34:17 194

空空如也

空空如也

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

TA关注的人

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