自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 华为2021年9月8日机试第一题

题目:【问题】给出一颗二叉树,每个节点有一个编号和一个值,该值可能为负数,请你找出一个最优节点(除根节点外),使得在该节点将树分成两棵树后(原来的树移除这个节点及其子节点,新的树以该节点为根节点),分成的两棵树各 节点的和之间的差绝对值最大。请输出该节点编号,如有多个相同的差,输出编号最小的节点。【输入】44 9 -7 -80 10 31 2第一行,四个节点,编号0-3,范围为1-10000第二行,节点0-3的权值第三行到第五行,表示二叉树各节点间的父子关系0 1 // 节点

2021-09-09 18:45:04 1501 1

原创 华为2021年8月15日(楼梯侠BFS 解题)

1、楼梯侠你的弹跳力很强,要爬上一个N阶楼梯,每一阶楼梯有一个任意整数作为编码的ID(可重复,无规律,和楼梯级数无关)。从第0阶开始,每一步你只有3种爬法1)向上爬一级2)向下退一级3)可以瞬间调到和当前所处台阶id相同的那级台阶(可上可下,但不能原地不动)。请输出你到达最后一级台阶所用的最少步数。注意:不能跳到楼梯外面去。输入:输入为整型数组,下标代表第i级台阶,对应的数组元素为该级台阶ID,数组长度取值范围[1…50000]。台阶ID取值范围:任意int输出:输出达到最高级台阶所用的最少步数。

2021-09-01 15:31:18 1206 1

原创 数据库连接池

数据库连接池Spring JDBC :JDBC Template数据库连接池1. 概念:其实就是一个容器集合,存放数据库连接的容器。 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器2. 好处: 1.节约资源 2.用户访问高效3.实现: 1. 标准接口:DataSource javax.sql 包下 1. 方法: * 获取连接

2021-07-20 15:24:47 133

原创 JDBC 总结

JDBC : 定义了一套 java 操作所有关系型数据库的规则(接口)JDBC 本质:sun公司定义的一套关系型数据的接口,然后各个数据库厂商去实现这个接口,提供数据库去驱动jar包,我们可以使用这套接口编程,真正执行的代码是驱动Jar 包中的实现类快速入门1. 导入驱动Jar包2. 注册驱动3. 获取数据库连接对象 connection4. 定义sql5. 获取执行sql语句的对象 statement6. 执行sql,接受返回结果7. 处理结果8. 释放资源代码实现: Publ

2021-07-19 17:08:26 85

原创 TCP、IP 各层的介绍,都有哪些协议

2021-07-18 15:23:59 527

原创 MySQL 事务管理

事务1. 事务的基本介绍 1. 概念: * 如果一个包含多个步骤的业务操作,被事务管理,那么这些操作要么同时成功,要么同时失败。 2. 操作: 1. 开启事务: start transaction; 2. 回滚:rollback; 3. 提交:commit; 3. 例子: CREATE TABLE account ( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10), balance DOUBLE

2021-07-16 14:19:56 71

原创 仿QQ聊天室项目功能总结

项目源码开源在gitee(码云)地址:https://gitee.com/xiaoclgitee/imitation-qq-chat-room项目功能总结:1、页面制作,采用Java 的Swing的Jframe 的框架进行GUI的制作主要有三个界面:1、用户登录界面 2、用户聊天窗口界面 3、服务台后台界面用户的登录界面主要有三个地方:一个是用户名和密码的输入框(用的JTextField),还有两个(JBbutton),一个是注册,另外一个是登录。 假如,我们点击的是注册的功能,这个时候就会

2021-07-15 23:36:20 501

原创 java的异常体系

Throwable 是异常的根类:主要分为两个部分:1、Error : 程序无法处理的系统错误,编译器不做检查,属于JVM 层面需要负担的责任2、Exception :程序可以处理的异常,捕捉后可以恢复而 Exception 又可以分为:1、RuntimeException 编写代码时不可预知的,应当编写代码的时候自行避免注意2、非RuntimeException 可以预知的,编译器校验的时候可以检查出来,编写代码的时候,应当捕获并且进行相应的处理,也成为可检查的异常主要常见的

2021-07-13 15:28:32 86

原创 不同JDK版本的字符串的intern() 的方法的区别

问题的抛出:对于String s= new String(“aaa”);s.intern();上面两行在java 内存运行规律时怎么样的?1、在JDK 6首先第一行命令会在堆内存的中创建字符串“aaa”;并让s指向该内存的地址引用。然后对于s.intern() 的命令,首先会在字符串常量池中寻找是否有“aaa”的对象,如果有则返回在字符串常量池中的对象引用,否则,会在该对象添加到字符串常量池中,并返回在常量池中的引用。2、在JDK 7以上同样首先第一行命令会在堆内存的中创建字符串“aaa”

2021-07-12 19:06:58 128

原创 堆排序(两种实现思路)

相信有了最大堆的实现基础,我们就可以开始考虑利用最大堆的特性,实现排序的功能。1、第一种思路:需要开辟新的空间。我们堆传入的数组,首先需要整理成最大堆的形式。我们循环遍历每个数组的元素,然后利用堆的add方法,最终把一个数组实现成最大堆的形式。然后我们开始循环遍历最大堆,每次都使用最大堆的取出最大元素的方法,不断的放入传入的数组里。循环结束后,我们的数组则是按照从大到小的顺序。最后再倒序一下数组,就完成了堆排序。2、第二种思路:不需要开辟额外的空间,进行原地的排序。这种方法我们称为Heapify。

2021-06-12 17:30:02 603

原创 最大堆(二叉堆)

1、堆也是一种数据结构,使用二叉堆去实现2、二叉堆是完全二叉树,类似于下图,必须要满足从根到每一层都顺序堆放,如果某一层放满了,则继续从下一层从左往右的顺序继续执行。3、最大堆的定义:堆中某个节点的值总是不大于父亲节点的值。4、实现最大的堆的结构,其实在内部我们可以采用数组的形式去实现,因为根据索引,每个节点(如果索引是i)的父亲节点是 (i-1)/2, 则左孩子的节点索引是i2+1, 右孩子节点的索引是 i2+2 ,这样我们就可以任意的根据某个索引的位置,寻找其父亲的节点,以及左右子树的节点。

2021-06-12 17:12:47 1048

原创 集合和映射

集合和映射就是我们所熟知的Set和Map类的集合Set集合是一个不能包含重复元素的集合Map集合是一个包含键值对的集合,其中键是不能重复的Set和Map都能用二分搜索树和链表的数据结构来实现。其中增删改查的时间复杂度,对于链表来说是O(n)级别的,而对于二分搜索树的实现平均而言,是O(logn)级别的。而最坏的情况是二分搜索树退化成一条链表的形式。对于Map集合利用二分搜索树和链表来进行实现,我们定义其中的节点分别可以是:class Node{ K key; V value; Node l

2021-06-11 00:03:53 223 4

原创 二分搜索树的实现

1、树树是一种天然的组织结构2、二叉树每个节点最多只有两个分支每个节点最多只有一个父亲节点和链表一样具有动态的特点每个节点的定义:public class Node{ private E e; private Node left; private Node right;}具有一个节点值以及左右两个子树的节点指向。3、二分搜索树具有一定的顺序性,前提是每个节点值都是可比较的。每个节点的左子树的值都小于该节点每个节点的右子树的值都大于该节点假设我们的节点值都是不重复

2021-06-10 17:03:37 299 1

原创 基于TCP/IP 协议的多人同步聊天,多线程(UI)

这次实现的是,多人同步聊天,而且客户端是具有UI的客户端聊天界面的。如下图所示:我开启了三个客户端,每个客户端都有一个自己的聊天界面,并且每个人说话都是可以实时的显示在别人的UI界面中的。并且聊天窗口实现了滚屏的效果。很棒!下面我先把代码的结构截图一下:可以看到,在Chat2的模块下,我们有三个包,一个是Client客户端,一个是Server服务端,另外一个是Util工具包。1、首先来介绍Server包:Server 类是用来创建服务端的ServerScoket的对象的,等待连接的客户端。

2021-06-10 15:11:35 528

原创 基于TCP/IP协议的聊天室(无UI)

整体思路服务端(Server),建立ServerSocket 的对象,循环建立一个监听是否有客户端连接的对象,每有一个客户端连接则建立一个线程(MyChannel),把与客户端连接的socket套接字传进去并启动该线程。(MyChannel)每个线程对象的具体功能:接收来自客户端的数据然后分发给每个客户端数据(除了自己)客户端(Client),建立与服务器的连接,并输入客户端的名称。为了循环的读取来自服务端发送的数据,以及从键盘上读取数据并写出去,我们可以分开建立两个读取(Receive

2021-06-08 20:50:43 474

原创 IO流的输入输出(常用)

Input/Output 读取/写入1、字节流InputSreeam 抽象类,表示字节输入流的超类(父亲)/OuputStream 抽象类,表示字节输出流的超类(父亲)FileOutputStream (String name) :创建文件输出流以制定的名称写入文件(三种方法)void write(int b)void write(byte[] b)void write(byte[] b,int off,int len)!注意三个小问题实现换行:windows: \r\n

2021-06-07 21:20:20 454

原创 try{} catch(){} 和 throws 的区别

今天,老师提出了一个很值得思考的问题。就是在多线程的 Thread 类里边的run() 方法,我们如果在这个方法里边写出了一个需要抛出异常的时候,我们是用try … catch… ,还是可以直接在run() 后加上 throws 一个异常的。我当时的第一个想法是应该都可以(后来证明是错误的)。可是当我们尝试在run() 后面加上throws 的时候,会提示一个异常:意思大概就是,我们继承的Thread 类,重写的run() 方法在父类中并没有 throws Exception 这个异常 ,所以目前的结

2021-06-04 20:21:19 277

原创 Socket通信原理(多线程)

我们在日常上网时,会经常登录某个网址,发送我们的请求信息,然后从该网站得到我们想要的信息。这个是怎么实现的呢。其实,我们可以把我们自己当成客户端,网站当成服务端。其实这是个相对的概念,就是谁收到请求,谁就是服务端;谁发送请求,谁就是客户端。而发送和接收请求都是基于Socket 对象实现的。而这个过程是怎么样的呢?(这里介绍的是基于TCP/IP 的通信)下面我先用一个简单的图解表示一下:通过上面的图解,我们可以很清晰的看到整个通信的流程。对于编码来实现的话,我们首先需要编写服务端,然后再编写客户端。

2021-05-31 21:35:23 5944 6

原创 简单理解多线程(图解)

对于初学者来说,多线程是个比较难以理解或者比较容易迷糊的概念。并且和许多概念联系在一起,所以比较容易绕晕。这里我根据自己的理解,把多线程和一些其它的概念分辨一下,巩固理解。1、线程和进程我们先看一下下面的图:可以看到,进程是包含线程的,而操作系统又是包含进程的。进程的概念:是我们程序运行的实例。是操作系统分配资源的基本单位。线程的概念:线程是进程代码中的某个代码块,一个进程可以有1个或者多个线程,是CPU分配资源的基本单位。我们可以这样理解:我们把进程当成一个工厂,而每个线程当成工厂里的每个工人

2021-05-24 15:28:26 3221

原创 死锁

讲到死锁,首先我们需要知道什么是锁?只有清楚了锁的概念,我们才会明白死锁的真正含义。下面我会按照我的理解,分成几部分来阐述:我们为什么需要锁以及锁的概念为什么会出现死锁怎么解决死锁产生死锁的代码案例synchronized 实现死锁以及解决办法Lock 实现死锁以及解决办法1、 我们为什么需要锁以及锁的概念在单线程的时候,我们往往不需要考虑到锁的概念,因为单线程的时候,系统和变量资源是被一个线程使用,按照代码顺序执行。但是当我们考虑到多线程的时候,就需要考虑到资源的安全性了。比如,

2021-05-22 16:14:15 95

原创 java 关键字分类大全

java 关键字一共有51+2(保留关键字)=53个基本类型:booleantruefalsebytecharshortintlongfloatdoublenull变量引用:thissupervoid包相关importpackage访问权限修饰publicprivateprotected类,方法,变量修饰符classextendsinterfaceimplementsstaticabstractfinalnewnative

2021-05-19 18:59:54 250

原创 希尔排序和归并排序

希尔排序/** * @author:Xiao Chenglong * @Date:2021/5/17 希尔排序 * 就是插入排序的改良版,减少计算时间 **/public class ShellSort { public static void sort(int[] arr) { int gap= arr.length/2; int current; while (gap > 0) { for (int

2021-05-18 19:35:39 113

原创 Object 类的方法分析

Object 类的常用方法hashcode() 和 equals()两个属于Object 的类方法,一般会重写如果不重写 hashCode() 返回对象的地址值,equals() 用来比较两个对象的地址值是否一样如果重写,hashCode() 返回对象的哈希值,equals() 比较两个对象的成员信息是否相同在HashSet集合 中,通过hashCode() 和equals() 保证元素的唯一性在判断两个对象是否相同时,首先判断两个对象的的哈希值是否相同,不相同则两个对象是不相同的;

2021-05-15 15:44:08 77

原创 集合体系结构(Collection)

集合1.1 集合类体系结构单列:Collection可重复 list 实现类:ArrayList ,LinkedList …不可重复 set 实现类:HashSet, TreeSet…双列: Map 实现类: HashMap…Collection 是一个接口:Public interface Collection< E >使用,通过多态的方法: public static void main(String[] args) { Col

2021-05-14 22:02:46 1010

原创 链表的实现(LinkedList)

List 接口// 将ArrayList 和 LinkedList 的共性方法定义一个接口,保证体系的完整性public interface List<E>{ // 三个基本方法 int size(); boolean isEmpty(); // 增 void add(E element); void add(int index,E element); // 删 E remove(int index); // 改

2021-05-14 11:19:52 123 2

原创 冒泡,选择,插入,快速排序算法

冒泡排序算法public class BubbleSort { public static void bubbleSort(int[] arr){ // 第一轮循环 n-1次 for (int i = 0; i < arr.length-1; i++) { // 第二轮循环 n-1-i for (int j = 0; j < arr.length-i-1; j++) {

2021-05-11 21:15:46 108

原创 java工具类的学习(Arrays,日期类,基本类型包装类以及int和String 的相互转换)

Arrays 的工具类Arrays 作为工具类有两个常用的方法1、Arrays.toString(int[]) 返回指定数值内容的字符串表示形式2、Arrays.sort(int[]) 按照数值顺序排列指定的数组、public class Demo { public static void main(String[] args) { int[] arr= {24,69,80,57,13}; System.out.println("排序前"+ A

2021-05-09 15:49:57 129

原创 动态数组的封装(泛型)

动态数组之前我们一直实现的是静态数组,并不能满足我们对于数组大小的灵活性,当我们想要向数组中添加数据时,发现我们的数组已经没有内存空间了,这个时候我们应该怎么办?其实简单的方法就是,我们重新开辟一个空间,比如数组的大小是之前的两倍,然后再把之前的数组的内容一个个重新复制到新数组中,进而往后添加我们想要的数组内容。而之前的数组,由于没有对象指引,java的垃圾回收机制就会自动的帮助我们处理掉这个不用的内存空间。在之前代码的基础上,我们只需要重新添加一个新的方法: // 定义新数组,容量是之前的两倍

2021-05-08 19:56:59 188

原创 静态数组类的封装(泛型)

泛型是指“任意”种类型这里的任意不包含8种基本数据类型,是能类对象但是我们可以使用每种数据类型对应的包装类boolean->Booleanbyte ->Bytechar->Charshort->Shortint->Integerlong->Longfloat->Floatdouble->Double如过想要定义数组的泛型,可以在定义类的时候,加上一个<>,里面加上我们想要的类型,比如public class Arra

2021-05-08 19:33:53 97

原创 静态数组类的封装(int类型)

这里我们定义一个自己的数组类,首先我们完成静态的数组类封装。要求:定义一个包含int类型的数组类,构造方法中传入我们想要的数组容量,默认是10.包含的属性:private int[] data; 定义一个int类型的数组private int size; 定义数组包含元素的大小注意这里没有考虑数组的容量,其实我们可以通过数组的length的方法可以获取数组的容量包含的方法:数组的方法主要包含增删改查,下面的方法都是增删改查的扩展(这里简单写了15个):三个获取数组属性的方法获

2021-05-08 19:11:02 659

原创 进程,线程,共享变量以及Java内存模型

1、进程、线程,多线程进程:进程是操作系统进行资源分配(包括cpu、内存、磁盘IO等)的最小单位。进程就是程序,有独立的运行内存空间,比如应用和后台服务,比如windows是一个支持多进程的操作系统。内存越大能同时运行的程序越多,在java里一个进程指的是一个独立运行在JVM的程序。如下图,这里就有13个应用进程,以及后台的113个后台进程。线程:线程是CPU调度和分配的基本单位(可以理解为CPU只能看到线程)。一个程序里运行的多个任务,每个任务就是一个线程,线程是共享内存的。在QQ,微信,钉钉等软件

2021-05-07 22:17:48 495 2

原创 java线程的概念和创建

线程的概念一个程序是一个进程,比如qq和腾讯会议,当我们运行这些软件的时候,相当于在运行一个进程。进程中包含多个进程,多个进程相互争夺CPU资源,轮流执行任务,完成一个进程的任务。举一个例子,我们在做Swing 窗口化界面的时候,为不同的组件添加监听器的时候,其实每个监听器相当于不同的线程。我们在写java程序的时候,也可以自己创建线程。创建线程一共有两种方式。一个是继承Thread的类另外一个是实现Runable的接口,并可以实现同一资源的多个使用。两种也有不同的启动方式:例子:卖票的

2021-05-07 16:20:31 89

原创 java学习---类与对象,接口

文本记录了自己的理解,以及在学习实践过程中的经历类与对象1.1 什么是对象生活中万物皆为对象,客观存在的我们都可以称之为对象。1.2 什么是面向对象我们关注的某个具体事物的信息的动作称之为面向对象1.3 什么是类类是现实生活中一类具有共同属性和行为的事物的抽象类的特点:类是对象的数据类型类是具有相同属性和行为的一组对象的集合1.4 什么是对象的属性和行为属性:对象具有的各种特征,每个对象的每个属性都拥有特定的值行为:对象能够执行的操作1.5 类和对象的关系类:类是现实生活中

2021-04-20 17:35:40 234

原创 关于String类型的比较问题

关于String类型的比较问题这里对于我这个java新手,当遇到下面的问题,我当时产生了疑惑:// java codeString s1 = "hello";String s2 = "hello";String s3 = "he";String s4 = s3 + "llo";System.out.println(s1==s2);System.out.println(s1==s3);System.out.println(s1==s4);输出结果:truefalsefalse当

2021-04-19 20:34:09 187

空空如也

空空如也

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

TA关注的人

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