自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 入门学习_Kotlin

由于kotlin和Java之间的高兼容性,使得kotlin适用于服务端、客户端、前端以及数据科学等领域。因此,从Java转向kotlin的学习曲线也更加平滑。究其本质,kotlin和Java一样都是将源代码编译成字节码,从而可以运行在虚拟机之上。此外,对于服务端开发而言,kotlin支持协程,相比Java中的线程,协程更加轻量级。因此,在硬件资源相等的情况下,使用协程可以大大地提高服务端应用的伸缩性。

2020-03-07 10:09:34 472

原创 LeetCode训练营之字符串

longest-palindromic-substring(最长回文子串)Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromi...

2018-11-26 09:07:02 337

原创 LeetCode训练营之排序

一、merge-sorted-arrayGiven two sorted integer arrays A and B, merge B into A as one sorted array.Note:You may assume that A has enough space to hold additional elements from B. The number of element...

2018-11-12 19:34:45 327

原创 多线程编程与艺术之单例模式

懒汉单例模式 //懒汉模式实现单例 public class SingleTon_Lazy { //单例延迟实例化 private SingleTon_Lazy singleTon_lazy; //无参构造函数私有化,禁止使用new进行实例化 private SingleTon_Lazy(){} //静态方法公有化,获取单例 pu...

2018-11-12 09:14:21 250

原创 LeetCode训练营之链表

一、 add-two-numbersYou are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and ...

2018-11-10 18:36:13 341

原创 LeetCode训练营之二叉树

binary-tree-postorder-traversalGiven a binary tree, return the preorder traversal of its nodes’ values.方法一:递归实现前序遍历方法二:迭代实现前序遍历(栈) public ArrayList<Integer> preorderTraversal(TreeNode roo...

2018-11-09 17:13:09 198

原创 LeetCode训练营之栈与队列

Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the histogram. public int largestRectangleArea(int[] he...

2018-11-09 13:48:29 213

原创 数据结构与算法之二叉堆训练营

前言: 二叉堆本质上就是一个特殊的完全二叉树。其中,“特殊”表现在节点元素之间存在着大小规律,完全二叉树表示二叉堆的存储结构采用数组实现,只要记住这两点,二叉堆就不难理解和实现;二叉堆根据大小规律的不同,可以分为大顶堆和小顶堆。概念简述: 二叉堆是一种完全二叉树,在这棵树中,任意父节点的值全部大于等于(小于等于)其子节点的值;其中如果任意父节点的值大于等于子节点的值,则该二叉堆就是大顶堆;如果任...

2018-11-08 10:07:12 271

原创 数据结构与算法之队列与栈训练营

1.用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。 public class QueueImplementedByStack { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Inte...

2018-11-07 21:52:22 162

原创 数据结构与算法之链表训练营

1. 1 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList.(栈) public ArrayList<Integer> printListFromTailToHead(ListNode node) { //返回结果 ArrayList<Integer> result = new ArrayList<>(); ...

2018-11-07 19:53:35 173

原创 数据结构与算法之二叉树训练营

public ArrayList PrintFromTopToBottom(TreeNode root) {//返回的层序遍历结果ArrayList result = new ArrayList<>();if(root == null)return result;//根据层序遍历的特点符合队列的先进先出,使用队列作为中间容器,存放每一层的元素Queue queue = ne..

2018-11-05 19:49:11 200

原创 多线程与高并发编程之基础知识(上)

前言:使用多线程,第一步就是需要知道如何实现自定义线程,因为实际开发中,需要线程完成的任务是不同的,所以我们需要根据线程任务来自定义线程,那么,JDK提供了三种自定义线程的方式,供我们实际开发中使用,来开发出符合需求的多线程程序!以下给出线程的三种实现方式,并且对每种实现的优缺点进行分析,最后对三种实现方式进行总结;方式一:继承Thread类,重写run方法package com.thr...

2018-10-01 21:48:25 57069 8

原创 分布式Java应用之集合框架篇(下)

前言:在分布式Java应用之集合框架篇(上)一文中,从整体上对Java分布式应用中的集合框架进行了介绍,以及对于其中的List家族给出了源码分析;本文将继续介绍集合框架中的Set家族和Map家族,其实Set家族和Map家族之间是有着很深的渊源,在本文的后续内容中,将从两大家族的成员的关键实现进行源码层面的分析!首先,还是给出集合框架的整体类图关系,通过类图展开下面的介绍;对于Collec...

2018-10-01 18:32:19 361 1

原创 分布式Java应用之集合框架篇(上)

前言:Java程序员开发程序时,必定会使用JDK中提供的集合类来完成功能模块的开发,而JDK是Java规范的实现,不同厂商提供的JDK也多少会存在一些差异,那么,如何选用合适的集合类实现应用中的具体需求,是每个Java程序员在实际开发中必须解决的一个问题;解决这一问题就需要我们对JDK中集合类的相关实现有一个清晰的认识!...

2018-09-30 15:06:58 866

原创 常见排序算法分析与实现(Java版)

1. 冒泡排序 核心提炼:相邻元素,两两比较并交换,逐趟进行,给人以水泡逐渐上浮的感觉 实现代码: /** * 冒泡排序(两两比较--交换) * @param arr */ public static void bubbleSort(int[] arr){ if(arr == null || arr.length ...

2018-09-10 21:37:21 194

原创 计算机底层原理学习笔记之进程与线程

前言:老生常谈,进程是操作系统分配资源的最小单元,线程是操作系统调度的最小单元基本概念: 计算机中的资源: 1. 计算资源:CPU提供的计算能力 2. 存储资源:内存、硬盘等提供的存储能力 3. 经典冯诺依曼结构:CPU+存储器+IOCPU可视为黑盒,输入的是待处理的指令和数据,输出的是处理后的结果;即CPU只提供计算能力,不提供计算资源的调度管理;因此,计算资源由操...

2018-09-04 11:06:52 481

原创 多线程与高并发编程进阶(二)

前言:一般来说,Java代码从编写到最后的执行会经历以下的过程:Java源代码(.java文件)–<即时编译器>–Java字节码(.class文件)–<类加载器加载>–汇编指令(CPU执行);Java中的并发机制依赖于JVM以及CPU指令,这些具体的实现原理将在下面进行分析;在Java的并发机制中,比较典型也比较常见的两个关键字:volatile以及synchroniz...

2018-09-03 22:32:30 1497

原创 多线程与高并发编程进阶(一)

使用多线程的目的:充分利用CPU资源以及加速程序运行速度 使用多线程面临的挑战:上下文切换、死锁、计算机资源的限制等上下文切换: CPU通过为每个线程分配CPU时间片来实现即使在单核的情况下,依旧可以使用多线程执行代码的机制; 时间片就是CPU的执行时间,通过分配时间片给各个线程,用以执行对应的代码;由于时间片一般很短(几十毫秒左右),所以需要不停地切换线程来使用对应的时间片...

2018-09-03 20:05:49 1777

原创 数据库基础知识杂记

数据库相关知识总结数据库:数据结构、存储引擎、什么是存储引擎以及不同存储引擎特点 - wildfox - 博客园事务隔离级别(根源:并发性操作数据库)实现机制:锁机制实现隔离级别级别影响:隔离级别低—>并发性高—>系统开销低隔离级别:Read Uncommitted—>Read Committed—>Repeatabl...

2018-08-05 16:25:46 200

转载 ThreadLocal浅析

ThreadLocal概念ThreadLocal 字面意思来看有点像“线程的本地实现版本”,实际上真正含义是ThreadLocalVariable(线程本地局部变量),所以把它命名为ThreadLocalVar更加合适。ThreadLocal 是用来解决共享对象(单个线程内共享)的多线程访问问题的,使用场合主要解决多线程中数据因并发产生不一致问题。ThreadLocal为每个线程的中并...

2018-03-08 09:33:35 252

原创 Java多线程之线程安全的实现方法

同步互斥(阻塞式同步)同步互斥是一种常见的并发正确保障手段;其中,同步是指在同一个时刻,多个线程中只能有一个线程去访问共享变量;互斥是指实现同步的一种手段,如临界区、互斥量和信号量; 在Java中,最基本的互斥同步手段就是synchronized关键字;synchronized关键字经过编译后,会在同步块的前后分别形成monitorenter和monitorexit两条字节码指令, ...

2018-03-08 09:31:26 1036

原创 Java设计模式(2)之简单工厂模式&工厂模式

前言:先遇到问题再找解决问题的方法!在开始介绍简单工厂模式,先通过一个场景来引出简单工厂模式出现的目的;在Java开发中,我们经常与数据库打交道,但是,由于生产数据库的厂商有很多,因此可供开发使用的数据库也就有很多,但是无论选择哪种数据库,这些数据库都会支持一些公共的数据操作,比如插入、删除、查询以及修改等操作,不过对于不同的数据库来说,这些操作的代码编写遵循的规范也不相同,因此,如果使用...

2018-03-07 17:12:05 153

原创 多线程与高并发编程之基础知识(下)

Java线程的实现: Java线程模型是基于操作系统原生线程模型来实现的;线程模型只对线程的并发规模和操作成本产生影响,对Java程序的编写和运行过程来说,并没有什么不同;Java线程调度: 线程调度是指系统为线程分配处理器使用权的过程;主要调度方式有:抢占式线程调度、协同式线程调度; 抢占式线程调度:每个线程由系统来分配执行时间,线程的切换不由线程本身决定;Java默认使用的线程调度方...

2018-03-07 09:55:40 6362 2

原创 Java集合框架成员之HashTable类的源码分析(基于JDK1.8版本)

首先给出关于此类的一些概括性的知识点: 1.这个类实现了一个哈希表,在这个哈希表中将键与值形成映射关系;任何非null对象都可以用来作为一个键或值; 2.为了成功地从一个哈希表中存储和检索对象,哈希表中被用来作为键的对象必须实现hashCode和equals方法; 3.影响Hashtable性能的两个参数:初始化容量(initial capacity)和装载因子(load factor); ...

2018-03-06 13:22:32 255

原创 集合、异常综合应用之简易扑克牌游戏

package imooc.poker;public class Card implements Comparable { private String shape; private String number;public Card(){ this("","");}public Card(String shape,String number){ ...

2018-03-01 13:40:44 267

原创 三大特性应用之YY出租系统的设计

Java基础项目: 项目描述:设计一个车辆出租系统,在设计中,利用面向对象编程的三大特性:封装性、继承性以及多态性;完成的功能:在控制台进行出租车辆的信息,接收用户的输入,根据用户的输入,完成对应的操作,实现简单的请求-响应的业务功能;实现的难点:项目源码:package com.boker_han;//抽象类(出租车辆共有的基本信息的描述方法)public abstract...

2018-02-28 19:29:17 199

原创 多线程并发场景下的单例模式设计

单例模式在项目开发中是一种常用的设计模式。对于普通场景下,单例模式分为懒汉单例模式和饿汉单例模式(关于这两种模式的详解参见博文Java设计模式(1)之单例模式学习总结);但是,在现代的软件开发中,多线程、高并发是编写Java应用程序的必须解决的一个问题,如何使单例模式在多线程、高并发的场景下能够正常发挥其作用,是Java程序员必备的知识技能之一;想要在多线程、高并发的场景中,维持单例模式的单例...

2018-02-28 16:30:11 898

原创 深入JVM之垃圾收集

前言: 之前了解了Java虚拟机所管理的内存区域划分情况之后,接着,又对Java虚拟机中的对象进行了深入探秘,下面应该进入Java虚拟机的重点——垃圾收集器的深入之旅;在编程语言界,了解和学习过Java和C++的程序员都知道,Java是不需要手动为对象申请内存和释放内存编写代码的,这些工作由Java虚拟机代为执行,但凡事有利就有弊,伴随着Java虚拟机为Java程序员提供了内存管理上的便...

2018-02-26 20:05:21 164

原创 Java虚拟机中的对象探秘

前言: Java是一门面向对象的语言,在Java程序运行的过程中,无时无刻都有对象被创建出来;在了解了Java虚拟机在运行时管理的内存区域的结构划分后,就可以进一步去理解在虚拟机中是如何为对象分配内存、对象的内存布局以及如何访问对象;下面将基于主流的Java虚拟机Sun HotSpot以及常用的内存区域Java堆,对上述的三个方面进行深入理解;虚拟机中对象的创建过程 在语言层面上...

2018-02-26 13:02:57 241

原创 Java虚拟机中的内存区域划分——运行时数据区域解析

前言: Java虚拟机提供的自动内存管理与垃圾回收机制,使得Java与C++之间隔着一座难以逾越的界线,也正是因为Java虚拟机为Java程序员提供了内存管理上的便利,导致了一旦发生内存泄漏和内存溢出问题,不熟悉Java虚拟机运行原理的Java程序员将会对发生的问题一筹莫展;所以,对Java虚拟机的运行原理进行学习理解是成为一名合格的Java程序员的必修课! ...

2018-02-25 23:03:01 342

原创 Java集合框架成员之LinkedList类的源码分析(基于JDK1.8版本)

LinkedList类实现了List接口以及Deque接口,并且是双向链表的实现版本;LinkedList类实现了所有可选的列表操作,并且允许添加包括null元素在内的所有的元素;LinkedList类中的所有操作都可以认为是对双向链表使用的;LinkedList类是非线程安全的。如果多个线程并发地访问一个LinkedList对象时,并且至少有一个线程从结构上修改了该链表,那么必须在外部对...

2018-01-13 09:38:11 216

原创 Java集合框架成员之ArrayList类的源码分析(基于JDK1.8版本)

加深对Java的学习与理解的最好途径之一,就是在掌握了Java的基础知识之后,对JDK中的源码进行学习和分析;通过分析牛人们的代码,可以学到很多东西!这些知识和经验对于巩固加深对Java的掌握来说,大有裨益!在分析源码之前,先概述性地列出ArrayList类的一些注意点:①ArrayList类是List接口的基于可变数组的实现类;实现了List接口提供的所有操作,并允许添加包含null元素...

2018-01-11 20:15:41 378

原创 多线程中的线程间通信及等待/通知机制的两种实现方式

多线程编程中,如果每个线程之间互相独立,那么将会使多线程带来的优势不能够很好地发挥出来。使用线程间通信,可以使得原先的互相独立的多个线程之间,能够很好地互相协作,使得系统之间的交互性得到提升,大大提高了CPU利用率,从而完成一些复杂的多线程功能模块。多线程间的通信一般采取等待/通知机制进行实现。见名知意,等待通知就是处于等待状态的线程需要由其他线程发出通知,从而可以再次获得CPU资源,执行之前...

2017-11-21 18:37:59 4331

原创 多线程中的同步之synchronized应用——synchronized方法

多线程编程中出现的数据读写不同步的问题给多线程编程开发者带来了很大的困扰。一般来说,线程中数据读写不同步是由于多个线程对同一个对象中的实例变量进行并发访问造成的;我们将这种由于多个线程对同一个对象中的实例变量进行并发访问,造成数据被“脏读”的这种现象称为非线程安全;与之对应的,线程安全就是指对同一个对象中的实例变量的访问是经过同步处理的,不会造成实例变量数据的“脏读”。

2017-11-13 10:06:48 626

原创 Java中的instanceof运算符的执行原理和使用参考

Java中instanceof运算符 Java中的instanceof运算符用来判断一个对象是否属于指定的类以及该类的后代类

2017-11-13 09:28:34 2319

原创 Java多线程编程技术之入门基础

多线程编程的基础:包括进程与线程、多线程的基本的使用步骤以及终止线程的方法详细解析;

2017-11-12 11:32:56 257

原创 Java设计模式(6)之观察者模式学习总结

观察者模式:在观察者模式中,存在着对象之间的一对多的依赖关系,即一个对象的状态发生改变时,所有依赖于该对象的对象都会得到通知,并对自身的状态进行更新; 观察者模式的学习中,对象之间的一对多的依赖关系是学习观察者模式的切入点,而被依赖对象(目标对象)的状态改变会对依赖对象(观察者对象)状态产生影响是观察者模式的关键所在;只有对象之间形成一对多的依赖关系,才能实现被依赖对象与依赖对象之...

2017-10-28 11:20:50 323

原创 Java设计模式(5)之责任链模式学习总结

在日常生活中,我们如果仔细观察的话,很多事情都蕴含着责任链模式的思想;比如某个人去售楼处买房,对销售人员提出打折的要求,如果折扣比较 小,销售人员有权给予该购买者提出的折扣优惠,就可以直接答应该请求;如果折扣过大,销售人员无权答应,则会想他的上司——销售组长询问, 如果销售组长有权答应该折扣,则直接回复可以,并将房子售卖给客户;以此类推,直至该折扣请求被处理,客户得到相应的答复,该事件...

2017-10-26 19:25:34 311

原创 Java设计模式(4)之适配器模式学习总结

前言 由于项目工程中,常常会出现现存的类与所需求的类之间类型不兼容,但是现存的类又具有所需求类的功能,所以为了能够重用现存的类,解决项目中的需求,适配器模式就应运而生了。 简而言之,适配器模式就是在目标类与现存类之间搭起一道桥梁(适配器类),使得可以使用现存的类来适应目标接口,这样就不要再为目标类的不存在,而专门去设计一个目标类,或者修改已有的接口(类)以适应现存的类,从而...

2017-10-25 16:31:41 216

原创 Java后台开发必备技能JDBC+Servlet+JSP

前言:学习Java后端开发的过程中,很多情况下都要和数据库打交道,如何通过Java程序去访问数据库,成为每一个后端开发人员必备的技能点。本文以一个简单的项目将数据库(这里使用Mysql)、JDBC、Servlet、JSP串联起来,将其中的逻辑流畅地走一遍,由于需要用到JSP和Servlet,所以这里建立的项目类型是Dynamic Web Project,在此声明:仅是自己的学习总结,如有不

2017-10-24 19:56:06 1238

空空如也

空空如也

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

TA关注的人

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