JAVA
小猫的秋刀鱼
这个作者很懒,什么都没留下…
展开
-
常用设计模式——工厂模式
工厂模式1、简单工厂模式简单工厂模式,一个抽象的接口,多个抽象接口的实现类,一个工厂类,用来实例化抽象的接口// 抽象产品类abstract class Car { public void run(); public void stop();}// 具体实现类class Benz implements Car { public void run() { System.out.println("Benz开始启动了。。。。。"); } public原创 2020-07-19 21:13:02 · 258 阅读 · 0 评论 -
常用设计模式——代理模式
代理模式的定义代理模式:为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。代理模式通俗来讲就是我们生活中常见的中介。代理模式可以提供非常好的访问控制,应用比较广泛。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只是想买一辆车而已为什么我还要额外做这么多事呢?于是我就通过中介公司来买车,他们来给我找车源,帮我办理车辆过户流程,我只是负责选择自己喜欢的车,然后付钱就可以了。代理模式的通用类图:为什么原创 2020-07-19 16:38:47 · 198 阅读 · 0 评论 -
Synchronized 和 Volatile、Lock 以及 ReentrantLock的区别
一、线程安全在三个方面体现1、原子性(atomic、synchronized、Lock)(1)原子的意思代表着——“不可分”;(2)在整个操作过程中不会被线程调度器中断的操作,都可认为是原子性。原子性是拒绝多线程交叉操作的,不论是多核还是单核,具有原子性的量,同一时刻只能有一个线程来对它进行操作。例如 a=1是原子性操作,但是a++和a +=1就不是原子性操作。1.1、atomic实现原子性JDK里面提供了很多atomic类,AtomicInteger,AtomicLong,AtomicBoole原创 2020-07-18 12:51:18 · 1499 阅读 · 0 评论 -
synchronized底层实现原理及锁优化
一、概述synchronized作用原子性:synchronized保证语句块内操作是原子的可见性:synchronized保证可见性(通过“在执行unlock之前,必须先把此变量同步回主内存”实现)有序性:synchronized保证有序性(通过“一个变量在同一时刻只允许一条线程对其进行lock操作”)synchronized的使用修饰实例方法,对当前实例对象加锁修饰静态方法,对当前类的Class对象加锁修饰代码块,对synchronized括号内的对象加锁二、实现原理JVM是基于进入原创 2020-07-17 12:20:47 · 513 阅读 · 0 评论 -
JVM调优
一、基本介绍1、JVM实质上分为三大块,年轻代(YoungGen),年老代(Old Memory),及持久代(Perm,在Java8中被取消)。2、垃圾回收GC,分为2种,一是Minor GC,可以可以称为YGC,即年轻代GC,当Eden区,还有一种称为Major GC,又称为FullGC。3、GC原理:我们可以看到年轻代包括Eden区(对象刚被new出来的时候,放到该区),S0和S1,是幸存者1区和幸存者2区,从名字可以看出,是当发生YGC,没有被任何其他对象所引用的对象将会从内存中被清除,还被其原创 2020-07-08 11:49:45 · 290 阅读 · 0 评论 -
JVM主要组成部分及其作用
一、JVM主要组成部分及其作用JVM包含两个子系统和两个组件,两个子系统为Class loader(类装载器)、Execution engine(执行引擎);两个组件为Runtime data area(运行时数据区)、Native Interface(本地库接口)。Class loader(类加载器):根据给定的全限定名类名(如:java.lang.Object)来装载class文件到运行时数据区中的方法区;Execution engine(执行引擎):执行引擎也叫解释器,负责解释命令,交由原创 2020-07-07 11:25:15 · 6651 阅读 · 0 评论 -
二叉树常见算法整理
/*public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/1、序列化二叉树实现两个函数,分别用来序列化和反序列化二叉树二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久原创 2020-07-06 23:19:20 · 614 阅读 · 0 评论 -
二叉树的遍历(Java版)
二叉树的非递归遍历,主要借助于“栈”后进先出的特性来保存节点的顺序,先序遍历和中序遍历相对来说比较简单,重点理解后序遍历。先来看一下节点类型://二叉树的节点类型private class Node{ int data; //节点值 Node leftChild; //左孩子 Node rightChild; //右孩子 public Node(int data) { this.data=data; }}一、非递归版本1、先序遍历1.先将根节点入栈2.访问根节点3.如原创 2020-07-03 21:25:36 · 148 阅读 · 0 评论 -
Java垃圾回收机制、垃圾回收器
1.什么是垃圾回收机制1.1 垃圾回收垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。所谓使用中的对象(已引用对象),指的是程序中有指针指向的对象;而未使用中的对象(未引用对象),则没有被任何指针给指向,因此占用的内存也可以被回收掉。1.2 java中的引用类型有强到弱分为强引用(Strong Reference),软引用(Soft Reference),弱引用(Weak Refer原创 2020-07-02 23:07:33 · 222 阅读 · 0 评论 -
Java 内存溢出、内存泄漏分析及解决
一、内存溢出内存溢出 (out of memory),是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;内存溢出的原因及解决方法:(1) 内存溢出原因:内存中加载的数据量过于庞大,如一次从数据库取出过多数据;集合类中有对对象的引用,使用完后未清空,使得JVM不能回收;代码中存在死循环或循环产生过多重复的对象实体;使用的第三方软件中的BUG;启动参数内存值设定的过小(2)内存溢出的解决方案:第一步,修改JVM启动参数,直接增加内存。(-Xms,-Xmx参原创 2020-06-30 23:15:52 · 1565 阅读 · 0 评论 -
浅拷贝和深拷贝的区别及实现
一、拷贝的引入(1)引用拷贝创建一个指向对象的引用变量的拷贝。Teacher teacher = new Teacher("Taylor",26);Teacher otherteacher = teacher;System.out.println(teacher);System.out.println(otherteacher);输出结果:blog.Teacher@355da254blog.Teacher@355da254结果分析:由输出结果可以看出,它们的地址值是相同的,那么它们肯原创 2020-06-30 20:41:42 · 320 阅读 · 0 评论 -
String、StringBuffer 和 StringBuilder
Java String 类(字符串常量)字符串广泛应用 在Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。需要注意的是,String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下,而且大量浪费有限的内存空间。我们来看一下这张对String操作时内存变化的图:我们可以看到,初始String值为“hello”,然后在这个字符串后面加上新的字符串“world”,这个过程是需要重新在栈堆内存中开辟内存空间原创 2020-06-28 13:36:36 · 132 阅读 · 0 评论 -
从浏览器输入地址到服务器响应的整个过程
从浏览器输入地址到服务器响应的过程可以大致分成以下几个部分:1、DNS解析(分别从浏览器缓存,本地host文件,本地DNS服务器,根DNS服务器)2、建立TCP(得知服务器的ip和端口后,用socket建立连接,通过三次握手连接)3、用户发送请求和服务器响应请求4、浏览器页面渲染5、断开连接(四次挥手)一、DNS解析 首先要理解我们平时输入的URL各个字段的意思,比如https://tieba.baidu.com/index.ht服务协议:https 用://分离主机IP地址和端口号:t原创 2020-06-17 22:29:52 · 1537 阅读 · 0 评论 -
B+树、索引以及SQL优化
mysql的B+树索引 查找使用了二分查找,redis 跳表也使用了二分查找法,kafka查询消息日志也使用了二分查找法,二分查找法时间复杂度O(logn);在MySQL中,主要有四种类型的索引,分别为:B-Tree索引,Hash索引,Fulltext索引(MyISAM 表)和R-Tree索引,本文讲的是B-Tree索引。mysql使用了 B+索引:B树:有序数组+平衡多叉树;B+树:有序数组链表+平衡多叉树;一、Mysql索引主要有两种结构:B+Tree索引和Hash索引(a) Inodb存储原创 2020-05-11 14:38:29 · 548 阅读 · 0 评论 -
大驼峰命名法和小驼峰命名法
原文链接:https://blog.csdn.net/jerry11112/article/details/84985026前言我们在做项目的时候,命名格式必须统一,这样才会方便不同人之间的编码阅读!,所以今天就来说一下驼峰命名法!骆峰式命名法(Camel-Case)是电脑程式编写时的一套命名规则(惯例)。骆峰式命名法就是当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时...转载 2019-11-02 10:42:37 · 2853 阅读 · 1 评论