自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(199)
  • 资源 (2)
  • 问答 (1)
  • 收藏
  • 关注

原创 面试-编程题

面试了一个很厉害的大厂,老师让我写了几道题,在此将其记录。1.设计一个算法,计算出n阶乘中尾部零的个数样例11! = 39916800,因此应该返回 2挑战O(logN)的时间复杂度public static longcount(longn) {longresult = 0;lo

2018-01-09 10:58:55 1760

原创 面试 - 几道编程题

最近面试一家国内外卖NO.1的互联网公司,总共手写了五道题,现将其记录下来。1.从一个数组中找出满足符合条件的元素:它大于或等于前面所有元素,小于或等于后面所有元素。(这道题当时用很蠢的方法写的,没得什么技术含量,后来回来才去网上看了一下好的方式)* 1.一个用来记录最大值的数组 * 2.一个用来记录最小值的数组 * 3.一个用来记录结果的数组(使用集合更方便) * <p> * 比如有如下的

2017-12-06 10:47:17 410

原创 Reference counted Objects (引用计数对象) - 文章翻译

原文地址:http://netty.io/wiki/reference-counted-objects.html

2017-12-05 18:03:45 691

原创 微服务(Microservices)- 文章翻译

本文是翻译 https://martinfowler.com/articles/microservices.html 的内容,旨在介绍一下微服务这种设计架构,希望大家尽量阅读原文。文中翻译难免有疏漏,希望大家不吝指正,共同学习。———————————————————————————————————— 微服务架构的定义“微服务架构”(Microservice Architecture)一词在过去的几

2017-11-01 22:33:14 900

原创 Java8函数式编程之七:Stream(流)的各种操作

上篇博客对流的基础知识进行了介绍,本篇博客将着重介绍关于流的各种操作,使用很多的实例代码,你只需要将其放进你的main函数中就能运行。—————————————— 创建流:public class StreamTest1 { public static void main(String[] args){ //流的创建方式 //1. Strea

2017-11-01 22:32:10 7416

原创 Java8函数式编程之六 :Stream (流)介绍

上一篇博客我们介绍了Java8中的4种方法引用,这篇文章主要介绍Java8中非常重要的部分,也就是Stream(流)。 在此,建议你阅读Stream.java类的Java文档,毕竟是最权威的资料。 ————————————————————我们先来看一下Javadoc中对流是怎样说明的: A sequence of elements supporting sequential and parall

2017-11-01 22:29:51 871

原创 Java8函数式编程之五:方法引用详解

方法引用详解:(method reference) 某些时候,Lambda表达式方法体的实现正好是已经存在的方法能够提供的功能,那么此时就可以用已经存在的方法替换Lambda表达式。 是Lambda的一种特殊情况,或者说是Lambda表达式的一种语法糖。—————————————— Lambda表达式的语法与方法引用的语法对比:1.比较1(Trade trade) -> trade.getM

2017-11-01 22:28:47 415

原创 Java8函数式编程之四: 常见的函数式接口及实例

上一篇博客中留下的问题是关于Consumer接口的,本篇博客就来介绍一下Java8提供的重要的函数式接口。 1.Consumer接口:我们首先看一下Consumer接口的Javadoc,比任何资料都正规的解释。'/*** Represents an operation that accepts a single input argument and returns no* result. Unl

2017-11-01 22:26:33 412

原创 Java8函数式编程之三:函数式接口

上一篇博客介绍了Lambda表达式,最后也留下了一个问题,就是Lambda到底用在什么地方,以及什么是函数式接口?还记得我们在第一篇博客中定义的这个接口吗?public interfaceTradePredicate {booleantest(Trade trade);}这就是一个函数式接口。那么怎样去鉴别一个接口是否是函数式接口呢?简单的说:函数式接口就是只定义了一个抽象方法的接口。比如Java

2017-11-01 22:21:14 298

原创 Java8函数式编程之二 : Lambda表达式

针对上篇博客最后留下的问题,也就是java8怎样解决匿名内部类代码难看,臃肿的的问题

2017-11-01 22:18:43 327

原创 Java8函数式编程之一: 行为参数化

Java8区别于以前的Java版本的一个重要特点就是函数式编程的风格。那什么是函数式的编程风格呢?理解函数式编程之前让我们先看一下以前的编程方式,也就是命令式编程。比如计算两个数的和:public static int add(int a, int b){return a + b;}命令式编程传递的是数据,也就是参数a和参数b;而函数式编程传递的则是行为。

2017-11-01 22:14:19 706

原创 Predicate.java官方文档翻译

package java.util.function;import java.util.Objects;/** * Represents a predicate (boolean-valued function) of one argument. * 表示一个参数的谓词(booean值函数) * * 这是一个 函数式接口 * 它的函数式方法是 {@link #t...

2017-10-31 10:50:40 248

原创 Collectors.java 官方文档翻译

package java.util.stream;import java.util.AbstractMap;import java.util.AbstractSet;import java.util.ArrayList;import java.util.Arrays;import java.util.Collection;import java.util.Collect...

2017-10-31 10:45:03 480

原创 BiFunction.java官方文档翻译

package java.util.function;import java.util.Objects;/** * 表示接收两个参数返回一个结果的函数。 * 这是 {@link Function}的特殊化 * * 这是一个 函数式接口 * 它的函数式方法是 {@link #apply(Object, Object)}. * * @param the t...

2017-10-31 10:43:43 192

原创 Consumer.java官方文档翻译

package java.util.function;import java.util.Objects;/** * 表示接收单个参数但是不返回结果的操作。 * 与其它函数式接口不同的是,{@code Consumer} 通过副作用进行操作。 * * 这是一个 函数式 接口 * 它的函数式方法是 {@link #accept(Object)}. * * @...

2017-10-31 10:43:05 190

原创 Collector.java官方文档翻译

package java.util.stream;import java.util.Collections;import java.util.EnumSet;import java.util.Objects;import java.util.Set;import java.util.function.BiConsumer;import java.util.functio...

2017-10-31 10:42:13 205

原创 mybatis新手教程-第一个mybatis实例

这是项目结构,需要导入三个包。—————————— 下一步:创建数据库表,并且插入一条记录。 ——————————————下一步我们应该创建与数据库表对应的一JavaBean,特别注意,javabean的属性尽量要和数据库中列名称一致。(不一致也可以,但是要单独处理过,麻烦一些,这里大家就先保持一致)package com.jd.mybatis.bean;public class User {

2017-05-19 11:39:58 3547 2

原创 按字典顺序打印字符串的所有排列

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。import java.util.*;public class Solution { public ArrayList<String>

2017-04-25 17:12:17 676

原创 与链表有关的几道编程题-java实现

(1)输入一个链表,输出该链表中倒数第k个结点。class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}public class Solution{ public ListNode FindKthToTail(ListNod

2017-04-25 16:57:22 424

原创 遍历二叉树的三种情况-java实现

遍历二叉树,从上往下遍历。但是同层节点可以从左向右遍历,也可以从右向左遍历(也就是之字型遍历),其中,都需要队列进行实现。只是按照之字型稍微麻烦一些。(1)从上往下打印出二叉树的每个节点,同层节点从左至右打印。需要一个队列,队列里面放节点(从根节点开始),然后依次进行打印。import java.util.ArrayList;import java.util.Queue;import java.

2017-04-22 15:58:36 667

原创 简单工厂模式--java实现

前两天去京东终面,叫手写一下单例模式和简单工厂模式。当时学简单工厂模式是在spring的学习中,它是spring采用的主要设计模式,简单工厂模式是类的创建模式。简单工厂模式是类的创建模式,又叫做静态工厂方法。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。通常它根据自变量的不同返回不同类的实例。简单工厂模式的实质是由一个工厂类根据传入的参数,动态的决定应该创建出哪一个产品类的实例。 简单

2017-04-19 10:27:13 827

原创 java编程题练习

/* * 字符串替换程序 * 将输入的字符串中空格替换成*号 * 将 ,(逗号替换成@符号) */public class ReplaceBlanks{ public static void main(String[] args) { String str = "Hello world hello,China" ; System.ou

2016-12-02 09:39:46 569

原创 单例模式(java两种方式实现)

//测试类public class SingletonTest1{ public static void main(String[] args) { //检验产生的实例是否是同一个实例 Singleton singleton1 = Singleton.getInstance(); Singleton singleton2 = S

2016-12-02 08:55:59 2178

原创 最短路径问题—Dijkstra算法及其实现

shortPath数组和DistantanceParent类。 最短路径算法的关键数据结构是一个数组,它保持了从原点到其他顶点(终点的最短路径)。在算法的执行过程中这个距离是变化的,直到最后,它存储了从原点开始真正的最短距离,在程序中,这个数组叫做shortPath[]. 也就是最短路径不仅应该记录从原点到终点的最短路径,还应该记录走过的路径。幸运的是,不必要明确记录整个路径,只需要记录终点的父

2016-12-01 16:12:36 1671

原创 带权图的最小生成树 及其java实现

如图所示:选择哪些边架设电缆,能使得安装有线电视系统的造价最低呢? 方法是利用最小生成树,它将有5条边(比城市数量少1),连接6个城市,并具有建立连接所需的最小代价。设计算法: 算法要点:下面是用图的术语重申一下算法。 从一个顶点开始,把它放入树的集合。然后重复做下面的事情: 1.找到从最新的顶点到其他顶点的所有边,这些顶点不能在树的集合中。把这些边放入优先级队列。 2.找出权值最小的边,

2016-12-01 11:08:14 1319

原创 骑士旅行问题-java解答

骑士旅行是一个古老而著名的象棋谜题。题目是在一个空的棋盘上移动一个 骑士,从一个方块到另一个,直到踏遍了棋盘的所有的方块。写一个程序, 用深度优先搜索解决这个问题。最好使棋盘的大小可变,这样可以在较小的 棋盘上解决这个问题。8*8 的棋盘中,用个人电脑大概需要几年的时间解决 这个问题。5*5 的棋盘只需要几分钟而已。 骑士只能根据象棋的规则进行移动,要么横向跳动一格纵向跳动两格 ,要么纵向跳动一

2016-12-01 11:02:21 1372

原创 有向图与拓扑排序

有向图的拓扑排序:拓扑排序是可以用图模拟的另一种操作。它可以用于表示一种情况,即某些项目或事件必须按照特定的顺序排列或发生。 如:课程的优先关系 有向图: 图可以表示这类关系,然而,图需要有一种前面没有涉及的属性:边有方向。这时,图叫做有向图。在有向图中,只能沿着边指定的方向移动。 在程序中,有向图和无向图的区别是有向图的边在邻接矩阵中只有一项。对于有向图,增加边的方法只需要一条语句: p

2016-11-29 21:39:42 1049

转载 最小生成树及其基本实现

最小生成树(MST Minimum Spanning Tree):用最少的边连接了所有的顶点。 最小生成树边的数量总比顶点V的数量小1. 即 E = V -1;创建最小生成树的算法与搜索算法几乎是相同的。它同样可以基于广度优先搜索或者深度优先搜索,本例使用深度优先搜索。 在执行深度优先搜索的过程中,记录走过的边,就可以创建一棵最小生成树。最下生成树算法与前面的深度优先搜索之间唯一的

2016-11-29 19:42:42 328

原创 深度优先搜索--以及图的基本操作

临接:如果两个顶点被同一条边连接,就称这个顶点是临接的。 路径:路径是边的序列 连通图:如果至少有一条路径可以连接起所有的顶点,那么称这个图是连通的。 邻接矩阵:邻接矩阵是一个二维数组,数组项表示两点之间是否存在遍。如果有N个顶点,邻接矩阵就是N*N的数组。邻接表: 邻接表是一个链表数组(或者链表的链表)。每个单独的链表表示邻有哪些顶点与当前顶点邻接。 在图中添加顶点和边: 为了向图

2016-11-29 17:34:17 1796

原创 堆-及其基本操作

实现优先级队列的另一种结构::堆。堆是一种树,,由他实现的优先级队列的插入和删除的时间复杂度都是O(llooggN) 。注意:这里的堆是一种特殊的二叉树,不要和java以及C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分。堆是有如下特点的二叉树: —-它是完全二叉树。也就是说,除了最后一层节点不是满的,其他的每一层从左到右都完全是满的。 —–它常常用一个数

2016-11-29 09:19:48 449

原创 哈希表-再哈希法

再哈希法: 为了消除原始聚集和二次聚集,可以使用另外一个方法:再哈希法,二次聚集产生的原因是,二次探测的算法产生的探测序列步长总是固定的:1,4,9,16… x现在需要的一种方法是产生一种依赖关键字的探测序列,而不是每个关键字都一样。那么,不同的关键字即使映射到相同的数组下标,也可以使用不同的探测序列。 方法是把关键字用不同的哈希函数

2016-11-28 11:44:02 6291

原创 哈希表-线性探测

哈希表是一种数据结构,它可以提供快速的插入和查找操作。不论哈希表有多少数据,插入和删除(有时包括删除)只需要接近常量的时间,即O(1)的时间级。 哈希表运算非常快,在计算机程序中,如果需要在一秒钟内查找上千条记录,通常使用哈希表,哈希表的速度明显是树快。 哈希表也有一些缺点:它是基于数组的,数组创建后难于扩展。某些哈希表基本被填满时,性能下降非常严重,所以程序员必须要清楚

2016-11-28 11:41:27 876

原创 图示创建哈夫曼树的过程

字符编码: 计算机里每个字符在没有压缩的文本文件中由一个直接(如常见的ASCII码)或两个直接(如比较新的Unicode,它可以在各种语言中通用)表示,在这些方案中,每个字符需要相同的位数。下图列出里用ASCII码表示的一些字符,可以看到每个字符都用8个位来表示 有很多压缩数据的方法,对文本来说,最常用的方法是减少表示最常用字符的位数量,如英语中,E是最常用字母,所以用尽可能少的位为E编码是很合

2016-11-24 19:46:06 3399 2

原创 二叉树 及其基本操作

为什么要使用树? 因为树既能像链表那样快速的插入和删除,也能像有序数组那样快速查找。 下面是一棵二叉搜索树(二叉查找树BST Binary Search Tree). 二叉查找树的特征可以这样描述:一个节点的左子节点的关键字值小于这个节点,右子节点的关键字值大于或者等于这个父节点。非平衡树,也就是说,它们大部分节点在根的一边或者另一边。 用java代码表示树: 和其他数据结构一样,有很多方

2016-11-24 16:16:16 441

原创 排序-快速排序

快速排序:快速排序是最流行的排序算法,在大多数情况下,快速排序都是最快的,执行时间为O(N*logN)级。 快速排序算法本质上通过把一个数组划分为两个子数组,然后递归调用自身为每一个子数组进行快速排序实现的。 快速排序有三个基本的步骤: 1.把数组或者子数组分成左边(较小的关键字)的一组和右边(较大的关键字)的一组 2.调用自身对左边进行排序 3.再次调用自身对右边的一组进行排序。经过一次

2016-11-24 11:42:46 284

原创 排序-希尔排序

希尔排序: 当对0,4,8号数据项完成排序之后,算法向右移动一步,对1,5,9数据项进行排序。这个过程持续进行,直到所有的数据项都已经完成了4-增量排序,也就是说所有间隔为4的数据项之间都已经排列有序在完成以4为增量的希尔排序后,所有元素离他在最终有序序列中的位置都相差不到两个单元。这就是数组基本有序的含义,也正是希尔排序的奥秘所在。这种交错的内部有序的数据项集合,把完成排序所需的工作量降到了最小

2016-11-24 11:39:19 267

原创 排序--归并排序

归并排序 O(N*logN): 归并排序的思想是把一个数组分成两半排序每一半,然后用merge()方法把数组的两半归并成一个有序的数组;把每一半都分成两个四分之一,对每个四分之一部分排序,然后把他们归并成一个有序的一半;类似的,把每一对八分之一归并成一个有序的四分之一部分,每一对十六分之一部分归并成一个有序的八分之一部分,依次类推,反复的分隔数组,直到得到的子数组只含有一个数据项,这就是基值条件

2016-11-24 11:36:47 261

原创 排序-插入排序

插入排序: 假设第一个元素是有序的(和图中部分有序类似),从第二个元素开始,将标记的元素(temp)插入到前面排 好序的队员中,要做到这一点,需要将部分已经排好序的队员右移以腾出空间。为了移动所需的时间,就先让被标记的元素出列(temp)(在程序中,就是用一个临时变量temp表示)public class InsertionSortTest{ public static void

2016-11-23 10:03:10 261

原创 排序-选择排序

选择排序:进行选择排序就是把所有的队员扫一遍,从中挑出(或者选择)最矮的一个队员。最矮的这个队员和站在队列最左端的队员交换位置,即站到0号位置。现在最左端的队员是有序的了,不需要再交换位置了。 再次扫描队列时,就从1号位置开始,还是寻找最矮的,然后和1号位置的队员交换,这个过程一直持续到所有的队员都排定。public class SelectionSort { public stati

2016-11-22 23:49:31 247

原创 排序1-冒泡排序

排序的分类: 内部排序与外部排序。按照排序过程中所涉及的存储器的不同可分为内部排序和外部排序。内部排序是指待排序序列完全存放在内存中进行的排序过程,这种排序方法适合于数据量不太大的数据元素的排序。外部排序是指待排序的数据元素非常多,以至于它们必须存储在外部存储器上,这种排序需要访问外存储器,这样的排序称为外排序。 冒泡排序: 实例:如果要对一队棒球队员进行身高的排序,应该怎样做呢?冒泡排序所采

2016-11-22 21:38:53 273

《数学之美》

,数学是解决信息检索和自然语言处理的最好工具。它能非常清晰地描述这些领域的实际问题并且给出漂亮的解决办 法。每当人们应用数学工具解决一个语言问题时,总会感叹数学之美。

2015-11-05

四川大学2013年Java试卷

2013年四川大学Java期末考试试卷,可用于学生期末考试重要的复习参考资料

2015-06-19

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

TA关注的人

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