
JAVA基础知识
包括java语言中的相关不为人知的语法知识点以及一些值得注意的基础知识点
KevinBrain
热爱编程!热爱生活!代码改变世界!一枚喜欢研究各种代码技术,对计算机技术充满好奇心的技术宅。
展开
-
设计模式| 创建型模式之单例模式(java实现)
单例模式:属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。单例模式可以分为:饿汉式单例和懒汉式单例。饿汉式单例写法一:public class Singleton{ private static Singleton instance = new Singleton(); //1.将构造函数私有化,防止new private Single原创 2020-08-19 17:52:25 · 203 阅读 · 0 评论 -
springboot| 一种方便移植部署和访问的文件上传方式
引言:在springboot文件上传应用中,用的最多的就是将文件保存到系统的绝对路径中,这种方式对于系统的移植部署很不友好,而且需要更改大量的路径。这里本人总结出一种相对好移植部署的动态文件夹保存上传文件的方式。一、配置springboot文件上传临时文件夹说是临时文件夹,只要我们自定义该文件夹不在系统的临时文件夹如Tmp文件夹就可以永久保存。这里本人将该文件夹定义在和项目同级别的文件夹中uploadTmp中。具体配置如下:@Configurationpublic class Uploa原创 2020-08-17 23:46:52 · 297 阅读 · 0 评论 -
java基础| LinkedList各种方法API
LinkedList各种方法API示例: public static void main(String[] srgs) { //创建存放int类型的linkedList LinkedList<Integer> linkedList = new LinkedList<>(); /************************** linkedList的基本操作 **********************.原创 2020-08-15 22:15:18 · 608 阅读 · 0 评论 -
源码| Copy-On-Write容器
Copy-On-Write容器1. COW思想这里的COW是Copy-On-Write的简称,即写时复制,是一种用于程序设计中的优化策略。1.1 COW原理COW的基本思路:当读取共享数据时,直接读取,不需要有其他操作(比如阻塞等待、复制等)。当写共享数据时,将旧数据复制出来一份作为新数据,只修改新数据,修改完新数据之后将新数据的引用赋值给原来数据的引用。在整个写数据的过程中,所有读取共享数据的操作都是读的旧数据。COW容器只有写操作与写操作之间是互斥的,读读和读写都不互斥。原创 2020-08-12 23:35:26 · 234 阅读 · 0 评论 -
集合| 彻底打通HashSet到HashMap的add方法
转载自https://blog.youkuaiyun.com/lqadam/article/details/72912239HashSet的add方法的问题昨天敲题,自己写了一个类,然后用Set过滤重复,碰到了equals和hashCode的问题,加之之前面试的时候问到过相关的内容,觉得自己学得还是浅,所以带着疑问有看了看HashMap的代码,将几个问题总结一下.关于HashSet 传入对象,怎么过滤首先,我们知道所有的Set里面都套了一个Map,使用Map的Key存值,Value存放一个固定的Ob.转载 2020-08-04 22:01:47 · 435 阅读 · 0 评论 -
源码| 线程池的实现原理
线程池的实现原理一.概述线程池,顾名思义就是存放线程的池子,池子里存放了很多可以复用的线程。如果不用类似线程池的容器,每当我们需要执行用户任务的时候都去创建新的线程,任务执行完之后线程就被回收了,这样频繁地创建和销毁线程会浪费大量的系统资源。因此,线程池通过线程复用机制,并对线程进行统一管理,具有以下优点:降低系统资源消耗。通过复用已存在的线程,降低线程创建和销毁造成的消耗;提高响应速度。当有任务到达时,无需等待新线程的创建便能立即执行;提高线程的可管理性。线程是稀缺资源,如果无限原创 2020-08-04 00:32:44 · 197 阅读 · 0 评论 -
源码|AQS源码分析
AQS源码分析AbstractQueuedSynchronizer是Java并发包java.util.concurrent的核心基础组件,是实现Lock的基础。AQS实现了对同步状态的管理,以及对阻塞线程进行排队、等待通知等。1. AQS类结构属性// 属性private transient volatile Node head;// 同步队列头节点private transient volatile Node tail;// 同步队列尾节点private volatile int stat原创 2020-07-27 23:23:29 · 169 阅读 · 0 评论 -
数据结构| 单链表的实用操作(JAVA实现)
定义链表节点结构:public class ListNode { int val; ListNode next; ListNode(int x) { val = x; } }有序单链表的去重:思路:这是一个简单的问题,仅测试你操作列表的结点指针的能力。由于输入的列表已排序,因此我们可以通过将结点的值与它之后的结点进行比较来确定它是否为重复结点。如果它是重复的,我们更改当前结点的 next 指针,以便它跳过下一个结点并直接指向下一个结点之后的结点。public Li原创 2020-06-27 21:32:14 · 210 阅读 · 0 评论 -
力扣题解| 912. 排序数组
912. 排序数组给你一个整数数组nums,请你将该数组升序排列。示例 1:输入:nums = [5,2,3,1]输出:[1,2,3,5]示例 2:输入:nums = [5,1,1,2,0,0]输出:[0,0,1,1,2,5]提示:1 <= nums.length <= 50000 -50000 <= nums[i] <= 50000题解:class Solution { public int[] sortArray..原创 2020-06-21 16:39:19 · 347 阅读 · 0 评论 -
代码规范| 面向对象六大基本原则
开闭原则一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件需求变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化. 软件实体(类、模块、函数等等)应该可以扩展,但是不可修改。我们在设计软件的时候,首先要搞清楚程序当中什么是未来可能变化的,什么是未来不会变化的。对于可能变化的东西,我们要提前给与可以对应的扩展接口。当然实际开发中,即便是我原创 2020-06-15 16:39:33 · 416 阅读 · 0 评论 -
java基础| 面向对象编程基础
啥叫面向过程?就是自顶向下,逐层分解(巴拉巴拉.....)。面向过程vs面向对象:面向过程:优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、 Linux/Unix等一般采用面向过程开发,性能是最重要的因素。 缺点:没有面向对象易维护、易复用、易扩展 面向对象: 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统 更加灵活、更加易于维护 缺点:性能比面向过程低 ...原创 2020-06-06 21:29:40 · 267 阅读 · 0 评论 -
java基础| 如何实现无符号数的右移操作
Java提供了两种右移运算符:>> 和 >>>。其中,>>被称为有符号右移运算符,>>>被称为无符号右移运算符。他们的功能时将参与运算的对象对应的二进制数右移指定的位数。二者不同点在于>>在执行右移操作时,若参与运算的数字为正数,则在高位补零;若为负数,则在高位补1。而>>>则不同,无论参数运算的数字为正数还是负数,在执行运算时,都会在高位补0。 在对char, bute, short...原创 2020-06-03 21:19:54 · 1279 阅读 · 0 评论 -
java源码| HashMap源码分析
hash和HashMap基础知识hash算法: 把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。常用 HASH 函数:直接取余法、乘法取整法、平方取中 法。hash冲突 : 因为不同的输入可能会散...原创 2020-06-01 19:19:58 · 189 阅读 · 0 评论 -
java源码| Thread源码解析
针对java源码Thread类进行解析(学习中,解析的不好请给出评论意见,膝盖送给各位大佬)内容持续更新中。。。Thread类:/* * Copyright (c) 1994, 2016, Oracle and/or its affiliates. All rights reserved. * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * * * * * * * * * * *原创 2020-05-17 21:23:28 · 308 阅读 · 0 评论 -
java基础| clone方法解析
题外话 熟悉jav开发的都知道,java是纯面向对象的编程语言,和c++有很大的不同,其中取消指针类型就是一个很大的不同之处。由于在java语言中取消了指针这个概念,但是这并不妨碍java对指针概念的应用(表面上我们假装不用指针,实际上我们都知道用指针真香哎!)。在java中,实质撒谎嗯每个new语句返回的都是一个指针的引用,只不过在大部分情况下我们都不需要关心如何去操作这个指针而已。 按值传递和按引用传递 在java中处理基本数据类型时,都是采用按值传递(传递的是输入参数的...原创 2020-05-17 18:14:28 · 414 阅读 · 0 评论