自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛客:进制转换

进制转换:将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。import java.util.*;import java.math.BigInteger;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); ...

2019-09-06 10:18:50 337

原创 线程池

Java中的线程池试运行场景最多的并发框架,几乎左右需要异步或者并发执行任务的程序都可以使用线程池。合理使用线程池能够带来三个好处:降低资源消耗,通过重复利用已经创建好的线程降低线程创建和销毁带来的消耗提高响应速度,当任务到达时,任务可以不需要等到线程创建就能立即运行提高线程的客观理性,线程时稀缺资源,如果无限创建线程,不仅会消耗资源,还会降低系统的稳定性,使用线程池可以进行统一分配和调...

2019-08-31 20:50:21 241

原创 垃圾回收算法

垃圾回收算法(如何回收)标记清除法: 最基础的收集算法标记:标记出所有需要回收的对象清除:在标记完成后统一回收所有被标记的对象缺点:标记和清除的效率都不高标记清楚后会产生大量的不连续的内存碎片,这会导致为大内存的对象分配空间时,无法找到足够的连续空间,从而提前触发另一次的垃圾回收复制算法: 解决标记清除的效率问题将可用内存划分大小相等的两块,每次只使用其中的一块当使用的这块...

2019-08-30 16:49:50 147

原创 垃圾回收—如何判断对象已死

对于程序计数器,虚拟机栈,本地方栈这三部分区域来说,其生命周期与相关行程有关,随线程而生,随线程而灭,并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者线程结束时,内存就自然跟着线程回收了。这里的内存垃圾回收关注的是堆与方法区这两个区域如何判断对象已死(要不要回收)引用计数法:给对象增加一个引用计数器每当有一个地方引用他时,计数器就+1,当引用失效时,计数器就-1,当计数器为0的对象...

2019-08-29 18:04:26 183

原创 枚举实现单例模式

已经有了双重判断加锁的单例模式,为什么还要用枚举实现单例模式?枚举的单例模式可以避免反射破坏封装先来观察反射实现的单例:public class ReflectDemo { public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTar...

2019-08-29 11:41:42 143

原创 MySQL-表的操作

库的操作: 假设库名为test设置数据库指定字符集和校验规则:区分大小写:create database test charset=utf8 collate utf8_general_ci不区分大小写:create database test charset=utf8 collate utf8_bin查看数据库指定字符集和校验规则:show variables like ‘charac...

2019-08-23 12:31:11 139

原创 判断链表有没有环以及求环的入口问题

判断链表有没有环:思想:快慢指针法,定义两个变量,都指向链表的头结点,一个变量一次移动两个位置,一个节点一次移动一个位置若一个链表中有环存在,那么这两个变量一定会在环中相遇,这就好比你在操场跑步,跑的快的人一定会在环形跑道中和跑的慢的相遇,只不过是时间问题public class Solution { public boolean hasCycle(ListNode head) {...

2019-08-23 10:22:06 111

原创 求链表相交节点问题

判断链表是否相交方法:遍历两个链表,分别保存两个链表的末尾节点,若两节点相等,就认为两节点相交链表交叉,并找出交叉点:方法:当两个链表相交时,当链表1遍历完自己的节点后,让链表1从链表2的头结点开始遍历,(链表2也同时执行同样操作步骤)这样我们可以发现,当这两个链表同时开始遍历,在一定会在第二次经过相交节点时相与,此时遍历链表的两个变量相等,那么证明找到了相交点,返回即可public cl...

2019-08-22 17:38:59 258

原创 删除链表的倒数第N个结点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点给定一个链表: 1->2->3->4->5, 和 n = 2当删除了倒数第二个节点后,链表变为 1->2->3->5class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ...

2019-08-22 15:40:22 144

原创 TOPK

LeetCode:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。例如:输入 : [3,2,1,5,6,4] 以及 k = 2输出: 5核心思想:选定基准值,划分大于小于区,使得比基准值大的元素都在大于区,比基准值小的元素都在大于区域,划分完成后返回等于区的第一个元素的下标public int partati...

2019-08-22 14:54:06 144

原创 异常处理

异常处理:首先看一段出现异常的代码:public class ExcDemo { public static void main(String[] args) { int[] arr = new int[3]; System.out.println("------begin-----"); System.out.println(arr[4...

2019-08-22 14:52:52 104

原创 Java异常体系

异常在进行编写代码时,有的异常是不能避免的,如读取的文件不存在,或输入的数据格式不匹配都会导致异常的发生,异常机代表一种错误,又代表一种信息,遇到不是代码问题产生的不正常的现象,程序需要将这种异常的情况包装起来,告知用户,由用户来决定如何处理异常的结构所有的异常都是继承Throwable类而来的Error程序无法处理的错误,比如当JVM执行操作时没有需要的内存时,会出现OutofMem...

2019-08-22 12:17:29 122

原创 使用wait和notify交替打印数字

练习:实现两个线程交替打印1~100思路:可以利用wait和notify方法实现,一个线程打印,打印完就释放对象锁,唤醒另一个线程打印,打印完释放对象锁,唤醒另一个线程打印,交替执行class MyPrint implements Runnable{ int i = 1; @Override public void run() { while (tru...

2019-08-13 17:22:09 1679

原创 wait和notify

wait(): 死等,直到被唤醒或中断概念:使得当前线程立刻停止运行,处于等待状态。并将当前线程置入锁对象的等待队列中,直到被通知(notify())或被中断为止。使用条件:只能在同步方法或同步代码块中使用,必须是内建锁。wait()调用后立刻释放对象锁。public final native void wait(long timeout)throws InterruptedEx...

2019-08-13 17:10:24 136

原创 synchronized优化

synchronized优化在JDK1.5中,synchronized还性能较低的,因为只是一个重量级操作,synchronized是一个重量级锁,就是多个线程只有一个线程能够获取到锁,未获取到锁的线程将会被阻塞,等到持有锁的线程释放锁后,这些线程又被唤醒,这些操作非常耗费CPU的资源IDK1.6对synchronized做了优化CAS:乐观锁乐观锁:假设所有线程访问共享资源时不会出现冲...

2019-08-13 14:46:25 246

原创 TCP可靠传输

TCP协议可靠传输:1.面向连接:2.确认应答机制:对每一条数据,对发送方进行确认回复,告诉发送方我已经接受的到了哪些数据,下一次你从哪里开始发3.超时重传机制:发送数据后等待一段时间(200ms)若是没有收到回复就认为数据丢失(这也可能是ACK丢失),进行重传,这会导致接受端有大量重复数据,这时接收端就要利用序列号去重。序号+确认号:保证数据有序的向应用层交付最理想的是找到一个最小的时...

2019-08-13 10:41:44 211

原创 synchronized底层实现

synchronized底层实现synchronized时Java的内建锁,可以保证在多线程的情况下,每次有且仅有一个线程访问共享资源同步的原理:monitor机制同步代码块class TestMonitor implements Runnable{ @Override public void run() { synchronized (this){ ...

2019-08-12 17:27:28 193

原创 线程的同步

同步:线程同步问题:多个线程对象访问同一个数据大小,对数据造成破坏问题线程的并行执行造成的问题:卖票程序为例class TSyn implements Runnable{ private int ticket = 10; @Override public void run() { while (this.ticket > 0){ ...

2019-08-12 15:13:43 114

原创 守护线程

Java中线程的分类:用户线程守护线程区分:isDaemon() 返回false为用线程,true为守护线程public final boolean isDaemon() { return daemon; }private boolean daemon = false;进入源码发现变量daemon的默认值为false,这说明我们自己创建...

2019-08-12 11:08:31 150

原创 线程状态及常用方法

线程有五种状态:创建、就绪、运行、阻塞、结束创建:当使用new创建新的线程时,处于创建状态就绪:调用start方法后,线程并不是立即处于运行状态,而是出于就绪态运行:当线程被分配CPU后,运行run方法后才处于运行状态阻塞:线程因为某些原因让出CPU使用权,直到重新进入运行态(如调用sleep方法)死亡:线程处于死亡状态run方法的正常退出或异常退出,线程死亡异常导致线程死亡...

2019-08-12 10:26:02 228 1

原创 线程的创建

进程与线程:进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,线程依托于进程存在。比如在Windows系统中,一个运行的exe就是一个进程线程指的是进程中的一个执行流程,,一个进程中可以运行很多线程,进程中的多个线程间共享进程的内存比如:打开qq,在qq中可以聊天,可以刷动态,可以留言,每一个操作都是一个进程线程的创建:继承Thread类class MyThre...

2019-08-11 11:07:05 106

原创 单例模式

懒汉单例(线程不安全的)public class Singleton { private Singleton(){} private static Singleton instance = null; public static Singleton getInstance(){ //在第一次调用实例方法时才进行对象的实例化 if (in...

2019-08-08 18:38:29 138

原创 ClassLoader类加载器

类加载器:运行java程序时,首先运行JVM,再将java class加载到JVM中运行,负责加载java class的这部分就叫ClassLoader(把二进制文件识别、读取到内存中的功能模块)JDK内置的三大类加载器:BootStrap:启动类加载器(加载object,String等基础类)负责将存放于java_HOME\lib目录下的能被jvm识别的所有类库(例如rt.jar等jav...

2019-08-08 12:01:04 134

原创 网络层—IP协议

网络层在复杂的网络中确定一个合适的路径(负责地址管理与路由选择)IP协议4位协议版本:IPV4/Ipv64位头部长度:IP报文头最大长度是60个字节(4字节为单位)8位服务类型:4位TOS字段(最小延时/最⼤吞吐量/最高可靠性/最小成本)1位保留位16位报文长度:限制一个IP报文最大长度64kb udp数据最大长度:64kb-20-8MTU:最大传输单元...

2019-08-08 09:44:06 173

原创 集合遍历、fail-fast机制

集合类的遍历:1.使用Iterator接口调用Collection集合子类的Iterator方法取得内置的迭代器,使得以下输出格式//取得集合迭代器Iterator<String> iterator = list.iterator();while (iterator.hasNext()){ System.out.println(iterator.next());}...

2019-08-06 17:32:26 144

原创 传输层—TCP协议的三次握手四次挥手

TCP协议TCP协议—传输控制协议:对数据的传输进行详细的控制TCP协议:面向连接,可靠传输,面向字节流源/目的端口号:表示数据是从那个进程来到哪个进程去序列号:tcp对每个字节的数据都进行了编号,序列号指的是(这个报文段中第一个字节数据的编号,为了防止丢包和乱序)确认号:仅当ACK为1时有效,表示期望收到下一个字节的序号4位TCP报头⻓度: 表⽰该TCP头部有多少个32位bit(有...

2019-08-06 16:07:53 191

原创 传输层—UDP协议

UDP协议—无连接,不可靠,面向数据报UDP协议解析:UDP:用户数据报传输协议传输层协议:负责端与端之间的数据传输端口号:标识了一个主机上进行通信的不同应用程序无连接:源端与目的端不建立连接,只要知道对端的地址就可以发送数据不可靠:发送数据后,对对方是否完整的收到数据,收到的数据是否有序并不关心面向数据报:由16位数据包决定,向上层交付数据时只能一整条一整条的交付UDP报文...

2019-08-05 19:37:47 705

原创 反射

反射:在运行状态中,对于任意一个类都能知道这个类的所有属性和方法,对于任意一个对象,都能够调用任意一个方法和属性。简单来说就是:根据现有对象倒推类的组成反射的作用:反编译过程:使得在运行时就可获得class文件的信息取得Class对象的三种方法:1.使用Object类的getClass():但要用这个类的实例来调用2.类名.calss3.使用Class类提供的forName(Stri...

2019-08-02 17:46:08 121

原创 工厂模式—抽象工厂模式

抽象工厂模式:抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。举个例子:比如有AB产品接口,A接口有两个产品实现类,A1,A2;B接口有两个产品实现类,B1,B2,现在有一个工厂接口F,有两个实现这个接口的工厂类,F1,F2,这两个类覆写工厂接口中的方法,分别为实例化A产品的方法和实例化B产品的方法。这是要向得到产品实例,调用工厂1,就...

2019-08-02 15:09:04 83

原创 工厂模式—工厂方法模式

工厂方法模式:为了解决简单工厂在工厂类内部修改代码的问题,就提出了将每个生产产品实例的方法封装在不同的工厂类中,这时就增加了一个用于创建实例的接口,工厂接口,不同的工厂类去继承工厂接口,从而去产生产品类的实例化对象。举个例子:现在有A、B两种产品,那么就开两个工厂。工厂A只负责生产A产品,工厂B只负责生产B产品(其实从本质来看还是封装了简单工厂模式的不同分支,这样操作符合开闭原则,当产品类增...

2019-08-02 14:43:05 98

原创 工厂模式—简单工厂模式(传统,加反射)

简单工厂模式:核心:一个接口,一个继承接口的集具体类,一个工厂类本质:工厂类的生产产品实例根据创建实例时传入参数的不同,动态的选择应该创建哪一个具体类的实例。interface IFruit{ public void eat();}//产品类class Apple implements IFruit{ @Override public void eat() {...

2019-08-02 14:20:45 326

原创 TCP/IP五层模型协议—Http协议

应用层:负责应用程序之间的数据沟通:协议类型:HTTP(超文本)/FTP(文件传输)传输层: 负责端与端之间的数据传输;协议类型:TCP/UDP网络层:负责地址管理与路由选择;协议类型:IP协议链路层:负责相邻设备之间的数据传输(MAC地址);协议类型:ETHER(以太网协议);物理层:负责光电信号的传输;协议类型:ETHER(以太网协议);...

2019-08-01 18:09:14 702

原创 设计模式——代理模式

代理:为其他对象提供一种代理以控制对这个对象的访问有时委托类不适合或不能直接引用另一个对象时,代理类就在两方之间起到一个桥梁的作用。代理设计模式符合开闭原则 ,在不修改原有类的基础上,增强原有类的功能逻辑。静态代理:代理类和委托类的关系在程序运行前就确定了,代理类和委托类实现同一接口//定义了这个服务具备什么功能interface Buy { void buyMac(); ...

2019-08-01 16:36:57 173

原创 七层模型

首先来认识两个概念:IP地址:互联网协议地址,为互联网中的每一个网络和每一台主机分配一个逻辑地址,来和物理地址区分。IP地址在网络中唯一标识一台主机,保证了用户在连网的计算机上操作时,能够高效而且方便地从千千万万台计算机中选出自己所需的对象来。IP地址分类: IPV4/IPV6IPv4采用32位地址长度,只有大约43亿个地址,而IPv6采用128位地址长度,几乎可以不受限制地提供地址IP...

2019-08-01 16:03:53 124

原创 网络—计算机网络的分类

计算机网络的分类:根据网络覆盖范围的不同将计算机网络分为一下几类局域网:Local Area Network LAN一般范围是几千米以内。在某一区域内由多台计算机互联成的计算机组。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成,局域网靠交换机进...

2019-08-01 12:32:04 319

原创 IO相关

核心类和接口在javaIO中,核心组成就是五个类(File、OutputStream、InputStream、Reader、Writer)一个接口(Serializable)File:File是唯一一个与文件本身操作(创建、删除、取得信息)有关的程序类,版本JDK1.0产生File对象常用构造方法:public File(String pathname)根据文件的绝对路径来产生fil...

2019-07-31 17:44:11 104

原创 Map—HashMap源码剖析

Map接口是java中保存二元偶对象(键值对)的最顶层接口Map接口下的常用子类HashMap(使用频率最高)、TreeMap、Hashtable、ConcurrentHashMap**Map集合的遍历:**将Map集合转化为Set集合进行遍历使用迭代器进行输出:Iterator Set<Map.Entry<Integer,String>> entrySet =...

2019-07-31 10:15:04 126

原创 Collection—Set

Collection接口下的另一个子接口Set:不允许数据重复、没有扩充方法(get()是List接口的方法)Set集合的本质:Set集合就是Value值相同的Map集合,先有Map才有Set,底层是哈希表+红黑树Set接口下的子类HashSet:特点:无序存储(存取数据不一致)允许存放nullHashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能...

2019-07-29 17:19:41 110

原创 类集Collection相关、List

类集:类集的产生解决数组长度固定问题,所以说,他就是一个动态数组集合类下保存数据的接口有Collection和Map,今天主要回顾CollectionCollection:首先来说一说Collection和CollectionsCollection:集合类的单个对象保存的顶层父接口Collections:集合类的工具类,其中提供了一系列静态方法,包括有排序、反转等操作public s...

2019-07-29 13:46:53 149

原创 排序总结—归并排序

归并排序利用分治思想:将一个大问题分为很多个小问题来处理具体思想:将无序数组采用递归的思想一直等分,直到将无需数组分为每组只有一个元素,那么这时就自然有序了,分组之后需要进行合并,将分组之后的数组按照一定的顺序进行合并最后合并成的这个序列就是有序的合并图:private static void mergeSortInternal(int[] arr, int low, int high) {...

2019-07-29 12:11:17 91

空空如也

空空如也

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

TA关注的人

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