自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(102)
  • 资源 (2)
  • 收藏
  • 关注

原创 String StringBuffer StringBuilder的区别

String StringBuffer StringBuilder三者是Java中对于字符串处理用得最多的三个类,本文来说说三者之间的关系与区别1.三个类中的关系在查看JDK源码之前,大家可能根据三者的名称,都认为StringBuffer和StringBuilder都继承自String这个类,即认为String类是其他两个类的超类。但是我们知道String类是使用final关键字修饰的(Java中...

2018-05-17 16:15:45 190

原创 Java中hashcode()和equals()方法

前言在说hashcode()和equals()方法之前,我想先来说说Java中==与equals()方法的问题,==可用于比较基本数据类型(比较的是它们的数值是否相等),也可以用于比较对象在内存中的地址是否相等。Java当中所有的类都继承与Object这个基类的,在Object中的基类中定义了一个equals()方法,这个方法的初始行为是比较对象的内存地址的(即判断两个对象是否为同一个对象),但是...

2018-05-15 15:24:11 217

原创 Java中的序列化和反序列化

摘要在Java中,当你创建对象时,只要你需要,对象就会一直存在。但是当程序运行结束时,对象就会随之消失。在有些情况下,我们希望对象能够在程序不运行的情况下仍然存在并保存其信息。这样,在下次运行程序时,该对象可以被重建并且拥有的信息与程序上次运行时所拥有的信息一致。当然,我们也可以通过把信息写入文件或者数据库来达到效果,但是在使万物都成为对象的精神当中,如果能够将一个对象处理成为“持久性”的,并为我...

2018-05-14 21:09:00 152

原创 Java程序初始化的顺序

Java程序中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,当所有成员完成初始化后,才会调用对象所在类的构造函数创建对象。Java程序的初始化一般遵循3个原则(优先级依次递减):(1)静态对象(变量)优于非静态对象(变量)的初始化,其中,静态对象(变量)只初始化一次,非静态对象(变量)可能会初始化多次。(2)父类优先于子类进行初始化。(3)按照成员变量的定义顺序进行初始化。即使变量定...

2018-05-14 10:00:50 133

原创 关于Java数据基本数据类型转换的一些问题

本文总结一下Java基本数据类型在使用过程中需要注意的一些问题1.对于小于int型的数据类型(byte char short)进行运算时,首先会把这些类型的变量值强制转为int型,对int类型的值进行运算,最后得到的值也是int类型的。因此如果把两个short类型的值进行运算,最后得到的结果也是int类型的。如果要得到short类型的结果,就必须显示地把运算结果转为short类型。例入:short...

2018-05-13 16:29:00 291

原创 java数据类型及其包装类中的一些事

摘要在Java基础中,数据类型及其对应的包装类是我们必学的内容,但是大部分学习者对其中的一些地方还是处在模棱两可的理解,本文我将针对这部分内容需要注意的地方做一些总结相关问题1.Java中的基本数据类型占几个字节在Java中,byte,boolean占1个字节,对应的包装类型分别为Byte Booleanchar short占2个字节,对应的包装类型分别为Character Shortint fl...

2018-05-13 10:07:01 361

原创 String类型需要注意的几个问题

String类型属于不可变类型(不可变类型是指该类型创建了一个实例后,就不允许修改该实例的值),在学习和使用的时候需要注意一下几个问题1.new String("abc");执行这个操作后,整个程序中有几个"abc"对象?解析:这个操作创建了1个或者2个对象,如果常量池中原来有"abc"(也就是说在执行此操作之前已经创建了一个字符串"abc",已经把它存到常量池中,再次创建会自动从常量池中取出,而...

2018-05-09 20:31:00 334

原创 八大排序算法——快速排序

 什么是快速排序其实快速排序是对冒泡排序的一种改进,它的基本思想就是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据都要小,再按这种方式对这两部分的数据分别进行快速排序,整个排序过程可以递归进行,示的整个数据变成有序序列。快速排序的原理:排序算法的思想非常简单,在待排序的数列中,我们首先要找一个数字作为基准数,为了方便,我们把大于基准数的元素移动到左边,把大...

2018-05-08 20:41:39 2369

原创 八大排序算法——冒泡排序

摘要冒泡排序是排序算法中比较简单的一个排序。它重复地走访要排序的数列,一次比较两个数据元素,如果顺序不对则进行交换,并一直重复这样的走访操作,知道没有要交换的数据元素为止。冒泡排序的原理首先我们肯定要有一个数组,里面存放着待排序的数据元素,我们如果需要把比较大的元素排在前面,把小的元素排在后面,那么需要从尾到头开始下面的比较操作。1.从尾部开始比较相邻的两个元素,如果尾部的元素比前面的大,就交换两...

2018-05-07 15:11:32 1952

原创 在浏览器中输入网址后回车发生了哪些事情

最近在和许多同学交流面经的时候,发现有一个问题:无论你是前端开发,还是后端开发,被问到的概率很高,在此,我想把这个问题记录一下总体来说,在浏览器的地址栏中输入网址后,发生了如下的事情:DNS解析TCP连接发送HTTP请求服务器处理请求并返回HTTP报文浏览器解析渲染页面连接结束 下面还是具体说说每一步的大致原理1.DNS解析DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当我们在浏览器中输入...

2018-04-23 11:58:25 6513 2

原创 区块链学习——区块链分类

摘要在我的区块链上一篇博文中,简单介绍了区块链的架构,链接:区块链学习——区块链架构。那么本文我将继续简单介绍一下区块链的分类。根据网络范围根据网络范围,区块链可以分为公有链、私有链、联盟链。1.公有链所谓公有就是完全对外开放,任何人都可以任意使用,没有权限的限定,也没有身份认证之类,不但可以任意参与使用,而且发生的所有数据都可以任意查看,完全公开透明。比特币就是一个公有链网络系统,大家在使用比特...

2018-04-21 16:08:46 7959 1

原创 浅谈ConcurrentHashMap

摘要在正式介绍ConcurrentHashMap之前,我想先说说并发和并行的两个概念。我们先来看看并发在操作系统和数据库操作时的相关概念1.在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。2.在关系数据库中,允许多个用户同时访问和更改共享数据的进程。SQL Server 使用锁定以允许多个...

2018-04-21 10:56:26 485

原创 区块链学习——区块链的架构

摘要通过我前几篇区块链知识的介绍,我们知道区块链系统实际上就是一个维护公共数据账本的系统,一切的技术单元的设计都是为了更好地维护好这个公共账本。通过共识算法达成节点的账本的数据一致;通过密码算法确保账本数据的不可篡改性以及数据发送的安全性;通过脚本系统扩展账本数据的表达范畴。我们甚至可以认为去区块链系统实际上就是特别设计的数据库系统或者分布式数据库系统,在这个数据库可以存储数字货币,也可以存储更复...

2018-04-20 10:17:39 25912 4

原创 区块链学习——区块链的技术栈

摘要我在区块链学习的上一篇博文,链接:区块链学习——区块链技术理念与工作流程中,简单介绍了区块链的技术理念以及工作流程,本文我将继续介绍区块链技术栈。我们知道,区块链本身只是一个数据的记录格式,就像们平时使用Excel表格、Word文档一样,按照一定的格式将我们的数据存储在电脑上。与传统记录不同的是,区块链将产生的数据按照一定的时间间隔,分成一个个的数据块记录,然后再根据数据块的先后关系串联起来,...

2018-04-19 09:36:35 15870 5

原创 HashMap与Hashtable区别

线程安全方面Hashtable是线程安全的,方法是Synchronized,效率较低。HashMap是非线程安全的,方法不是Synchronized的,效率较高。在多线程的环境下,要使用HashMap需要手动同步HashMap,使用Collections.synchronizedMap()方法使HashMap保持同步。Hashtable效率较低的原因是什么?在线程竞争激烈的环境下,Hashtabl...

2018-04-18 11:21:53 209

原创 再谈HashMap

在之前的一篇博客中,简单介绍了HashMap这种数据结构的基本原理,链接:聊聊HashMap。本问我还继续对HashMap中需要注意的地方再提一下。我们先来看看HashMap的相关代码:static class Node[] table;static class Node<K,V> implements Map.Entry<K,V>{ final K key; V...

2018-04-18 09:49:45 269

原创 区块链学习——区块链技术理念与工作流程

在上篇关于区块链的文章中,我已经为大家简单地介绍了区块链的相关概念与简介,博客链接—区块链的相关概念与简介,本篇我将对区块链技术中的技术理念与技术栈做一个简单的介绍。区块链的技术理念通过区块链的概念我们知道,区块链在本质上来说就是一种记账方法,当然它并不是通过人来记账的,而是通过一种软件,我暂且称它为区块链客户端。他们运行于不同的设备上,彼此之间独立工作。通常我们把运行中的客户端成为“节点”。所有...

2018-04-17 15:04:11 10613

原创 聊聊HashMap

绪论HashMap是我们日常开发和面试中接触非常频繁的一个问题,它是基于映射(键值对)处理的数据结构。随着JDK版本的更新,JDK1.8对HashMap底层的实现进行了优化,比如典型的红黑树的数据结构和扩容优化。本文来说说HashMap的原理和实现。简介我们知道Java为数据结构中的映射定义了Java.util.Map接口,此接口有四个常用的实现类,分别为HashMap、Hashtable、Lin...

2018-04-16 15:41:52 231

原创 区块链相关概念与简介

摘要2017-2018年,互联网界最火热的话题之一就是区块链。各大公司相继宣布对区块链方面的投资和开发,各大互联网公司也前后推出自己区块链产品,例如阿里的麻吉宝、百度的莱次狗、腾讯的TrustSQL等等。那么区块链到底是什么?本文简单介绍区块链的相关概念区块链的相关概念区块链本身字面的理解就是在一个网络中,有很多很多的区块(block),通过某些方法使这些区块串起来,形成一个长链(chain),这...

2018-04-14 20:46:18 6716 1

原创 ArrayList、LinkedList、Vector的区别和实现原理

ArrayList、LinkedList、Vector是集合中经常拿来比较和面试的一个问题,我这里简要概括一下他们的区别和实现原理。存储结构ArrayList和Vector是按照顺序将元素存储(从下表为0开始),删除元素时,删除操作完成后,需要使部分元素移位,默认的初始容量都是10.ArrayList和Vector是基于数组实现的,LinkedList是基于双向链表实现的(含有头结点)。线程安全性...

2018-04-09 16:12:12 19029

原创 二叉查找树

引言我们知道,在查找算法中,性能最好的就是二分查找了,但是二分查找要求数列有序,这样我们每次进行查找时必须对数列进行排序,然后进行查找。所以二分查找适合数据元素很少增减的情况,如果数列经常变动,则不适合采用二分查找。下面来看看什么是二叉查找树。二叉查找树的概念二叉查找树或是棵空树,或者满足一下特性1.如果它的左子树不为空,那么它的左子树上的任意节点的值都小于根节点的值。2.如果它的右子树不为空,那...

2018-04-01 09:57:57 181

原创 从上往下打印出二叉树的每个结点,同一层的结点按照从左向右的顺序打印

思路:从题目看,可以知道其实就是要我们遍历给定的二叉树,要实现同一层的节点按照从左到右的顺序打印。这与我们平时使用的前序中序后序遍历二叉树不一样。这应该是广度优先遍历的思想。我们可以用到队列这个数据结构来完成这种遍历,具体做法是:从根节点开始,每一次打印一个结点的时候,如果该结点有子结点, 则把该结点的子结点入队。接下来到队列对头进行出队操作,一次打印出出队的元素,直至队列中所有的结点都被打印出来...

2018-03-29 10:16:04 1141

原创 操作系统中的进程和线程

对于计算机相关专业的小伙伴们而言,无论在学习还是面试中,进程和线程的问题出现的概率是极高的,本篇文章来具体说说进程和线程以及两者的区别。进程进程的相关概念进程是程序的一次执行,是一个程序及其数据在处理机上顺序执行所发生的的活动,是系统进行资源分配和调度的一个独立单位。我们一般对进程的定义:进程是进程实体的运行过程,是系统进行进行资源分配和调度的一个独立单位进程的属性进程的五种状态:1. 创建状态:...

2018-03-28 14:45:25 634

原创 输入两个整数序列,第一个序列表示栈的入栈顺序,判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有元素均不相等。

思路:这个问题,很自然得会想到把第一个序列的元素依次入栈,然后与第二个序列中的元素中的顺序出栈。我们在判断一个序列是不是栈的弹出序列有以下思路:如果下一个弹出的数字刚好是栈顶数字,那么入栈元素直接出栈。如果下一个弹出的数字不在栈顶,我们把压栈序列中还没有入栈的元素压入栈,直到把下一个需要弹出的元素压入栈顶为止。如果所有的元素都入栈了仍然没有找到下一个弹出的数字,那么该序列不可能是一个弹出序列。实现...

2018-03-25 17:08:36 643

原创 二叉树的相关概念以及操作

在数据结构与算法中,树的这中数据结构是我们必须要学习的,本文来首先来说说树中的二叉树什么是二叉树我们都知道树是一种数据结构,是由n(n>=1)个有限的节点组成的一种具有层次关系的集合。树的种类有很多,有二叉树、平衡二叉树、B树、B+树、哈夫曼树、B-树、B*树、红黑树、trie树等,本文我们来说说二叉树。二叉树是有限个节点的集合,这个集合可以是空集,也可以是一个根节点和两棵不相交的子二叉树组...

2018-03-20 15:56:54 255

原创 冒泡排序

什么是冒泡排序冒泡排序是排序算法里比较简单的一个排序,它要重复地走遍要排序的数列,一次比较两个元素,如果顺序不对就进行交换,并一直重复这样的操作直到没有要交换的元素为止冒泡排序的原理首先,我们要有一个数组,里面存放着待排序的元素列表,我们如果要把大的元素排在前面,小的元素放在后面,那么需要从尾到头进行比较操作:1.从尾部开始,比较相邻的两个元素,如果尾部的元素比前面的元素大,则交换两个元素的位置2...

2018-03-15 10:54:47 129

原创 最快、最简单的排序算法——桶排序

什么是桶排序桶排序,也叫做箱排序,是一种排序算法,也是排序算法中最快、最简单的排序算法。其中的思想是我们首先要知道所有待排序的范围,然后需要有在这个范围的同样数量的桶,接着把元素放到对应的桶中,最后按顺序输出。这时间上是简易版的桶排序,试想一下,如果要排序的范围是0-100万,使用桶排序方法进行排序,那么我们要准备100万个桶,这显然对于计算机的开销肯定很大,所以,桶排序在有这时间最快的优势,同时...

2018-03-14 21:44:59 1201

原创 汉诺塔问题

我在我的前几篇博客中谈到栈的数据结构,由于栈的先进后出的特点,使得她这中数据结构非常适合使用汉诺塔来解释,因为二者的操作原理一样。由此也衍生了针对汉诺塔的一些算法。其中一个就是三根柱子的汉诺塔的移动步骤问题。要求写出算法实现,给定初始的一根柱子上的圆盘个数,打印完成汉诺塔移动的实现步骤。汉诺塔的原理应该有许多同学对汉诺塔的规则都很了解,为了让部分不太了解汉诺塔的同学,这里我再详细地介绍一个汉诺塔的...

2018-03-14 16:12:40 285

原创 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小素的min 函数。在该栈中,调用min、push 及pop的时间复杂度都是0(1)

思路与分析:在遇到问题之前,我们先来思考一个问题,如果题目仅仅是问:给你一个数据栈,要你编码实现去查找栈中最小的元素。那么你要如何实现?这个问题很简单,我们马上就能把代码写出来:package cn.csu;import java.util.Stack;import java.util.Iterator;public class StackFindMin { public in...

2018-03-12 13:36:51 424

原创 链表的相关概念与操作

1.什么是链表链表与栈和队列有些不同,栈和队列都是申请一段连续的空间,然后按照顺序存储数据,链表是一种物理上非连续,非顺序的存储结构,数据元素之间的顺序是通过每个元素的指针关联的。链表由一系列的节点组成,每个节点一般至少会包含两部分信息,一部分是元素数据本身,一部分是只想下一个元素地址的指针。它这种存储结构让链表相比于其他的数据结构来说,操作会复杂一些。与数组相比,链表更具有优势,链表不需要数组这...

2018-03-11 16:42:20 301

原创 两个栈实现队列和两个队列实现栈

我在前面已经介绍了栈和队列,以及栈和队列特殊的顺序存储结构。那么在我们的面试当中,面试官可能会出一些题目,比如用栈实现队列和用队列实现栈。本篇博客来具体实现以下这两个题目1.用两个栈实现队列假设我们有两个栈stack1和stack2.用这两个栈实现队列。这里讲解两种方案:方案1我们让入队操作在stack1中进行,而出队操作在stack2中执行,执行的方法如下:1.入队:直接向stack1中入栈2....

2018-03-11 13:05:54 161

原创 栈的使用场景

大家都知道栈的相关概念与操作,那么栈这种数据结构它试用的场景有哪些呢?本篇博客为同学们大致介绍一下:1.逆序输出栈最大的特点是先进后出,所以逆序输出是栈经常用到的一个应用场景。首先把所有元素依次入栈,然后把所有元素出栈并输出,这样就实现了逆序输出。2.语法检查,符号成对出现在我们日常编程中,括号都是成对出现的,比如“()”“[]”“{}”“<>”这些成对出现的符号那么具体处理的方法就是...

2018-03-09 17:19:12 13943

原创 栈的实现

在面试或者学习中,我们很多同学都注重各种算法的实现,有时候忽略了数据结构最基础的知识,比如本编博客所写的栈的代码实现。概念很多同学对栈都很熟悉,栈有着特殊结构规则的数据结构,即先进后出的特点,我们只能在从一端(栈顶)去操作元素。一般来说栈有两种操作,入栈(PUSH)和出栈(POP)存储结构栈一般使用一段连续的空间进行存储,通常先分配一个长度,可以简单地使用数组去实现。代码实现如果面试官要你现场手写...

2018-03-09 10:32:44 159

原创 url去重问题(百度Java后端面试一面第二题)

问题:有10 亿个 url,每个 url 大小小于 56B,要求去重,内存只给你4G思路:1.首先将给定的url调用hash方法计算出对应的hash的value,在10亿的url中相同url必然有着相同的value。2.将文件的hash table 放到第value%n台机器上。3.value/n是机器上hash table的值。分析:将文件的url进行hash,得到值value,相同的url的文...

2018-03-05 13:47:47 4404 1

原创 2018年百度Java后端面试题算法题

1、给一个函数,返回0和1,概率为p和1-p,请你实现一个函数,使得返回0、1的概率一样分析:这是典型的随机概率发生器的案例,我们先用数学知识来分析一下,函数返回0出现的概率为p,返回1出现的概率为1-p,如果单独返回1位0或1位1,那么没有办法实现返回0和1的概率一样。所以我们需要更大的位数来分析,因为存在返回0和1两种情况,我们把位数定为2,那么组合出来的信息就有2*2=4种:00 ---&g...

2018-03-05 10:57:22 4406

原创 输入一个矩阵,按照从外向里以顺时针的顺序依次扫印出每一个数字

思考:对于一个矩阵,要按顺时针打印依次打印,一般分为四个步骤,四个步骤组成一个环行,由外向里依次打印一致的步骤图如下:(本人画的草图)下面来分别说说这四个步骤:步骤1:第一步从左到右打印该环的第一行步骤2:当第一步完成后,需要从该行的最右的元素开始向下打印该环最右边的列步骤3:第二步完成后,从右到左依次打印该环最下面行的元素步骤4:第三步完成后,从上到下打印该环的最左边

2018-03-02 16:06:13 1113

原创 SpringMVC中的@Resource与@Autowired

这两天在看同事原来的写的代码时,发现在Controller中使用了@Resource的注解方式,而我们现在使用较多的是@Autowired的自动装配的注解。我想在此篇博客中具体说说两个注解的区别和简单原理@Autowired与@Resource首先在使用上,两者都是用来装配bean的,但是两者有以下区别:@Autowired默认是按类型进行装配的,它一般会要求依赖对象必须存在,还有就是@Antow...

2018-03-01 15:36:32 1710

原创 SpringMVC中@RestController与@Controller的区别

在使用SpringMVC时,对于Controller中的注解@RestController和@Controller需要区分一下我们可以先行查阅官方的文档:@RestController is a stereotype annotation that combines @ResponseBody and @Controller.相信大家都能看懂这句话的意思:@RestContrller注解相当于@R...

2018-03-01 09:51:15 3775 1

原创 队列的相关概念及操作

队列概念什么是队列?队列就是一个队伍,队列和栈一样,由一段连续的存储空间组成,是一个具有自身特殊规则的数据结构,我们都知道栈的先进后出的规则,而队列刚好相反,是一个先进先出的(FIFO)或者说后进后出(LILO)的数据结构。队列的是一种受限制的数据结构,插入操作只能从一端操作,这一端叫做队尾,而移除操作也只能从另一端操作,这一端叫队头。我们把插入和移除操作分别叫做入队和出队。一般而言,

2018-01-24 15:20:27 368

原创 angularjs获取页面中checkbox的值的一个小问题

之前主要做的后端开发,对于前端也略懂一点,在使用angularjs在页面中添加一个checkbox,javascript中需要获取到该checkbox的值后做进一步的逻辑判断1.在html中(或者jade文件中)添加checkbox复选框2.在js文件中获取该复选框的值,我的代码console.log("$scope.explorer:--->"+$scope.explorer);

2018-01-10 14:57:38 2489 1

Java高级编程教案

Java高级编程教案,适合Java入门的学生或者上Java课的老师使用

2019-01-21

空空如也

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

TA关注的人

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