
Java
miao-hu
这个作者很懒,什么都没留下…
展开
-
Java 异常类型及处理
话不多说,先引入一张图,然后再做具体讨论:什么是异常?若程序运行时,发生了不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常。一. Java 异常分类异常的根接口为: Throwable , 其下有2个子接口,Error 和 Exception 。Error:指的是 JVM 错误,这时的程序并没有执行,无法处理;Exception:指的是程序运行中产生的异常,用户可以使用处理格式进行处理。1.免检异常(红色部分为特别常见的异常)2.必检异常(红色部分为特别常见的异常)原创 2020-07-25 18:07:10 · 1457 阅读 · 0 评论 -
面试官【谈谈你所理解的 TopK 问题】
在实际工作中,经常会遇到在海量数据中找出前K个最值的问题。对于此类问题,可能我们一般想到的算法是排序算法,首先给数据进行排序,再去获取k个最值轻而易举。但是当问题的规模内存中放不下时,普通的内排序就无法进行。对于海量数据的topk问题,一种常用的做法是借助堆解决。1.原理如果需要获取最大的k个值,可以建小堆。否则,建大堆。我们以获取k个最大值为例,进行原理说明。首先读入前k个数据存入一个最小堆。然后遍历后续的数据,对于每一个遍历的数据,都和堆顶(k个数据中最小的)数据比较,如果比堆顶数据小,则继续原创 2020-07-19 10:50:18 · 394 阅读 · 0 评论 -
Java 中的 hashCode() 方法 和 equals() 方法,你了解么?
1.概述在 Java 中存在两个比较方法,分别是:hashCode() 方法 和 equals() 方法。这两个方法都属于Object类的方法。//源码1public boolean equals(Object obj) { return (this == obj); }//源码2public native int hashCode(); //用 c 或者 c++ 写的代码首先来看 equals 方法的底层实现,观察源码,参数为一个引用,方法内部则是判断当前原创 2020-07-12 22:15:59 · 205 阅读 · 0 评论 -
Java变量及其对应的包装类型你了解么?
1. Java当中的基本数据类型Java当中的基本数据类型共有8种,他们分别是byte, char,short, int, long, float,double。这8种类型完全可以足够我们去使用,当然除了这些基本数据类型,还有引用类型,如:接口,类,数组,枚举,String等等。2. Java当中的变量在Java当中变量大概分为两种:成员变量和局部变量。2.1 定义成员变量:定义在类内,方法外的变量。局部变量:定义在方法内的变量。2.2 具体细分和内存位置成员变量:实例成员变量(不加原创 2020-07-12 22:15:15 · 392 阅读 · 0 评论 -
面试再也不怕被问 HashMap 了
具体问题如下:1.HashMap的内部数据结构数组 + 链表/红黑树2.HashMap允许空键空值么HashMap最多只允许一个键为Null(多条会覆盖),但允许多个值为Null3.影响HashMap性能的重要参数初始容量:创建哈希表时桶的数量(数组的大小),默认为 16负载因子:哈希表在其容量扩容之前可以达到一种尺度,默认为 0.754.HashMap的工作原理HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(ke原创 2020-06-30 09:54:55 · 407 阅读 · 1 评论 -
Java 垃圾回收机制与算法
话不多说,首先来引入一张图然后来进行具体的解释:引言:Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。内存泄露:是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游离”。一、什么是垃圾回收垃圾回收(Garbage Coll原创 2020-06-27 19:50:43 · 321 阅读 · 0 评论 -
Java中类的执行顺序
引入一段代码,大家猜猜结果会是怎么样的呢?class A { static int initSA() { System.out.println("1"); return 0; } static { System.out.println("2"); } static int sa = initSA(); int a = initA(); int initA() { System.o原创 2020-05-28 15:01:26 · 224 阅读 · 0 评论 -
Jar包基础学习
一.什么是jar包在软件领域,JAR文件(Java归档,英语:Java Archive)是一种软件包文件格式,通常用于聚合大量的Java类文件、相关的元数据和资源(文本、图片等)文件到一个文件,以便开发Java平台应用软件或库。JAR文件是一种归档文件,以ZIP格式构建,以.jar为文件扩展名。JAR文件内的文件名是Unicode文本。JAR文件的全称是Java Archive File,意...原创 2020-01-30 10:02:41 · 1373 阅读 · 0 评论 -
hashCode() 方法有什么作用呢?
一.引言首先 hashCode() 方法被设计在 Object 类中,说明是希望所有的对象都能实现该方法,该方法是会返回一个对应于当前对象的一个整数,之所以所有对象都实现该方法是为了将来对象在查找时变得快捷。Java中的集合类 hashMap、hashSet 底层的实现都是哈希表,之所以采用哈希表,是因为他能克服链表和二叉树等数据结构在查询上的低效率问题,哈希表的存储就是根据对象的哈希值,以...原创 2020-03-07 22:13:31 · 2528 阅读 · 1 评论 -
Java 语言设计一个缓存模型
前提:数据库表 student:create table student( id int, name varchar(15));一.线程不安全版本import java.util.HashMap;import java.util.Map; public class CacheDemo { //map 用来作缓存模型 private static Map&l...原创 2020-04-26 11:02:25 · 299 阅读 · 0 评论 -
Java为什么不支持多继承?
多继承指一个子类能同时继承于多个父类,从而同时拥有多个父类的特征,但缺点是显著的。1.若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量。2.若一个子类继承的多个父类拥有相同方法,同时子类并未重写该方法(若重写,则直接使用子类中重写的方法),那么调用该方法时,将无法确定调用哪个父类的方法。假设A类和B类都有 t 方法,但具体实现细节不一样。C类则继承...原创 2020-03-09 22:46:21 · 283 阅读 · 0 评论 -
Synchronized和Volatile的区别
共性:volatile与synchronized都用于保证多线程中数据的安全性【1】可见性说的是一个线程如果更改了某个变量的值,其他线程能够立刻知道这个变量更改后的值。【2】原子性一个操作要么全做,要么全不做,就像不可分割的原子一样。一.VolatileVolatile可以看做是一个轻量级的synchronized,它可以在多线程并发的情况下保证变量的“可见性”,什么是可见性?---...原创 2020-03-09 22:17:18 · 5660 阅读 · 0 评论 -
单例设计模式
一.类结构图二.设计思路(1)将类的构造方法私有化,使其不能在类的外部通过 new 关键字来创建该类对象。(2)在该类内部定义一个唯一的对象,并且将其封装为 private static 类型。(3)定义一个静态方法返回这个唯一对象。三.代码实现1.饿汉模式饿汉模式:就是使用类的时候已经将对象创建完毕(不管以后会不会使用到该对象,先创建了再说,很着急的样子,故又被称为“饿汉模式”...原创 2020-03-09 21:36:22 · 165 阅读 · 0 评论 -
面向对象的三大特征
一.封装就是隐藏对象的属性和实现细节,仅对外提供公共的访问方式。封装的好处:隐藏类的实现细节;让使用者只能通过程序员规定的方法来访问数据;封装的思想保证了类内部数据结构的完整性,使用户无法轻易直接操作类内部的数据,这样降低了对内部数据的影响,提高了程序的安全性和可维护性。封装的使用1)、修改属性的可见性 ——> 设为private2)、创建共有的 getter...原创 2020-03-09 14:46:12 · 443 阅读 · 0 评论 -
Java 集合框架
一.概述Java 集合框架Java Collection Framework ,又被称为容器 container,是定义在java. util 包下的一组接口 interfaces 和其实现类 classes。其主要表现为将多个元素 element 置于一个单元中,用于对这些元素进行快速、便捷的存储store、 检索retrieve、管理manipulate ,即平时我们俗称的增删查改Jav...原创 2020-03-03 14:31:33 · 233 阅读 · 0 评论 -
多线程学习(初阶)
一.进程与线程的区别进程是资源分配的最小单位,线程是程序执行的最小单位;进程有自己独立的地址空间,每启动一个进程,系统都会为其分配地址空间,建立数据表来维护代码段、堆栈段和数据段,线程没有独立的地址空间,它使用相同的地址空间共享数据;CPU切换一个线程比切换一个进程的花费小,创建一个线程的开销比创建一个进程的开销小;线程占用的资源要⽐进程少很多;线程之间的通信更方便;...原创 2020-02-29 20:37:56 · 259 阅读 · 0 评论 -
JVM内存模型与Java内存模型之学习总结
一.Java内存模型Java内存模型规定所有的变量都是存在于主存中的,每个线程都有自己的工作内存。线程对变量的操作都必须在工作内存中进行,而不能直接对主存进行操作,并且每个线程不能访问其他线程的工作内存。1.主内存和工作内存(1)所有的变量均存储在主内存;(2)每个线程都对应着一个工作内存,主内存中的变量都会复制一份到每个线程自己对应的工作内存,线程对变量的操作都在自己的工作内存中,操作...原创 2020-02-28 17:15:30 · 225 阅读 · 0 评论 -
Java常用的设计模式
一.单例模式简单点说,就是一个应用程序中,某个类的实例对象只有一个,你没有办法去new一个新的实例对象,因为构造器是被private修饰的,一般通过getInstance()方法来获取这个类的一个实例对象的引用。getInstance()的返回值是一个对象的引用,并不是一个新的实例,所以不要错误的理解成创建了多个对象。简单的Demo如下:(1)懒汉式写法(线程不安全):public cla...原创 2020-02-08 22:38:59 · 155 阅读 · 0 评论 -
Java-IO流
前言:Java 的 I/O 大概可以分成以下几类进行学习:磁盘操作:File字节操作:InputStream 和 OutputStream字符操作:Reader 和 Writer对象操作:Serializable网络操作:Socket一.IO流的基本概念IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在I...原创 2020-01-29 10:53:27 · 253 阅读 · 0 评论 -
Java实现一个简单的http服务器
一.何谓“服务”?服务就是按照客户的要求来完成客户的相关需求。服务器更具体的表现形式是按照客户的请求来执行某种操作,并返回指定数据给客户(返回响应)。这里返回的数据(即响应)和客户发来的请求,更具体的表现形式通常是字符串。也就是说客户端发给服务器一个包含客户端自身请求的字符串,然后服务端通过解析客户端发来的请求字符串,然后获取客户端的请求,然后完成客户端的相关业务。二.那么问题来了,服务端如何...原创 2020-01-24 11:01:02 · 994 阅读 · 0 评论 -
Java编写一个简单的“服务器—客户端”聊天程序(Tcp版本)
一.服务器和客户端1.客户端当我们打开百度,输入我们想要查找的某个关键词,之后点击百度一下,我们就收到了一个有着各种链接的网页。这个过程,作为我们,就是客户端。2.服务器我们即发送了信息,也接收了信息。而对于百度网站来说,就像是服务器端,即接收了信息,也发送了信息。综上,服务器和客户端是一个相对的概念。客户端先发送消息,再收到回复。服务器端先收到消息,然后在发送消息。二.TCP协议...原创 2019-12-16 14:56:24 · 2830 阅读 · 2 评论 -
Java对象为什么要实现Serializable接口?
Serializable接口的使用一.引入问题一般情况下,我们在定义实体类时会继承Serializable接口,类似这样:import java.io.Serializable;public class Person implements Serializable { String name; int age; public Person(String name...原创 2019-12-12 11:36:58 · 818 阅读 · 0 评论 -
判断一棵二叉树是否为平衡二叉树
判断一棵二叉树是否为平衡树:实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意 一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。import java.util.*; /*public class TreeNode { int val = 0; TreeNode left...原创 2019-12-11 22:39:44 · 248 阅读 · 0 评论 -
Java中的方法重写与方法重载的区别
方法重写:1.参数列表必须完全与被重写方法相同2.返回类型必须完全与被重写方法的返回类型相同3.访问权限不能比被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。4.父类的成员方法只能被它的子类重写5.声明为final的方法不能被重写6.声明为static的方法不能被重写,但是能够被再次声明7.子类和父类在...原创 2019-10-26 11:53:53 · 564 阅读 · 0 评论 -
Arrays,Collections,Array,Collection的区别与联系
一.定义1.Collection在java.util下的一个接口,它是各种集合结构的父接口。继承与他的接口主要有Set ,Queue和List.2.Collectionsjava.util下的一个专用静态类,它里面包含各种有关集合操作的静态方法。 提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。3.ArrayJava中最基本的一个存储结构。 提供了动态创建和访问 Ja...原创 2019-10-15 11:28:52 · 703 阅读 · 0 评论 -
javac编译时报错 (错误: 编码GBK的不可映射字符)
1.使用notepad++编辑器编写.java文件2.打开cmd3.更改路径4.使用javac编译错误: 编码GBK的不可映射字符错误产生原因:出现这样的错误,一般是因为代码中含有中文字符,注释中的中文字符也算。由于使用cmd运行java程序的时候,系统默认的编码格式是gbk。而包含中文字符的代码一般是unicode格式,所以直接运行含有中文字符的代码就很容易出现编码错误。如下图所示...原创 2019-07-17 18:36:48 · 3417 阅读 · 0 评论 -
Java中Byte类型的运算细节
先引入一个例题:public calss Test{ public static void main(String[] args){ byte b1=1,b2=2,b3,b6; final byte b4=4,b5=5; b6=b4+b5; b3=b1+b2; System.out.println(b3+b6); }}关于上述代码片段叙述...原创 2019-07-18 21:05:29 · 3346 阅读 · 0 评论 -
Java中静态代码块、构造代码块、构造方法的执行顺序及静态代码块的执行次数
先引入一份代码:public class A{ public A(){ System.out.println("构造方法中a=30"); a=30; } { System.out.println("构造代码块1中a=40"); a=40; } int a=init(); { System.out.prin...原创 2019-07-22 20:24:27 · 640 阅读 · 0 评论