java基础
你走开``
hello , my Friend and the world .
展开
-
Docker CMD
Docker CMD最近在学习docker相关的知识,看了一下docker从入门到实践,说实话这本书感觉一般般,CMD这部分写得还行,所以简单记录一下CMD相关的内容。(如果也是学习docker,推荐大家直接上第一本docker书)COPY用于copy文件,用法:COPY <源文件> ... <目标目录>;COPY ["文件1", "文件2", ..., "目标...转载 2019-10-10 20:50:29 · 780 阅读 · 0 评论 -
链表栈
链表栈 , 以链表为基础实现,性能更优.package com.structure.Queue.linkedListStack;import com.structure.linked.LinkedListWithDummyHead;import com.structure.stack.Stack;/** * 以链表为基础实现的栈结构 * 1. 链表更适合栈结构, 增加 修改 删...原创 2018-07-21 11:27:20 · 190 阅读 · 0 评论 -
链表(二)
此链表去链表一的区别: 一: -> 其有head成员属性作为元素 , 在容器遍历等操作时 , 不易理解. 而且需要做一些多余的操作,比如非空判断等 二: -> 其有虚拟头元素 , 该元素的设计是通过浪费一个空间单位, 来使操作更加方便. (三): -> 总结: 是否使用一个多余的空间单位 , 来进行链表结构的维护 四: -> 代码如下...原创 2018-07-20 12:48:23 · 133 阅读 · 0 评论 -
链表(一)
链接结构 , 是无索引的 , 动态扩容的数据结构. 缺点是不能随机访问. 其 构造普遍为如下所示, 包含下一个节点数据,以及自身数据class node<E> { private E e; private node next;}从头 , 至尾 . 链接结构也是线性结构的一种. 如下代码所示 , 是一个简单的链表实现. 其内暂时使用了index索引...原创 2018-07-19 23:34:16 · 105 阅读 · 0 评论 -
循环队列
循环队列是对数组队列的进一步优化, 具体表现为 , 当移除某一元素时, 队列中的首元素索引 +1, 而不是元素集体迁移至索引零.当尾元素至容器尾端时 , 会将新元素保存至队列首段的曾被移除过的索引处保存.如图 首元素索引 : front ; 尾元素索引+1 : tail ; 在队列设计中 , 通过牺牲一个空间用于判断队列的空间剩余. 所以在队列初始化时, 程序内部需要多初始化一个容量...原创 2018-07-19 18:18:31 · 706 阅读 · 1 评论 -
过滤器 与拦截器 与 切面的区别
过滤器 -&gt; 通过集成Filter实现. 缺点如下 1.1 无法获取请求要访问的类与方法,以及参数. 可以获取原始的http请求与相应拦截器 -&gt; 基于springmvc提供的拦截器接口,自定义实现.缺点如下 2.1 可以获取请求访问的类与方法 , 但是无法获取请求参数的值. 具体可根据dispatcherServlet跟踪源码切面 -&gt; 基于spring , 通过as...原创 2018-07-24 14:56:56 · 6477 阅读 · 1 评论 -
类型隐藏以及获取真实类型并使用
此代码的目的, 一: 通过类修饰符,将基类实现类对外隐藏,以实现完全解耦. 且更安全 二: 通过反射机制, 仍然可以访问到该实现类的独有的和重写等的方法. 三: 如果该类是向上转型,通过反射机制,获取的是实现类基类package sky.java.reflact.protectedclass;public class Parent { publ...原创 2018-07-18 20:02:30 · 328 阅读 · 0 评论 -
class与泛型的简单应用 , 以及final与static final的区别
计数器类package sky.java.clazz;public class Count { // static 修改count , 使其在常量池中仅有一份. private static long count; // final修饰变量 , 则其不可修改. 因为count是确定的一个值. 执行完毕后++. private final long id...原创 2018-07-17 23:09:27 · 800 阅读 · 0 评论 -
List迭代器与foreach的使用
foreach , 其实质是调用的collection的迭代器接口 , 所有 , 如果需要自定义容器的遍历规则 , 需要继承迭代器并重写迭代器接口package sky.java.interable;import java.util.Iterator;/** * 模拟容器子类,实现迭代器接口,使用foreach遍历 */public class MyIterableClass i...原创 2018-07-17 15:01:30 · 4192 阅读 · 0 评论 -
浏览器行为:Form表单提交
浏览器行为:Form表单提交1、form表单常用属性?1234action:url 地址,服务器接收表单数据的地址method:提交服务器的http方法,一般为post和getname:最好好吃name属性的唯一性enctype: 表单数据提交时使用的编码类型,默认使用"pplication/x-www-form-urlencoded",如果是使用POST请求,则请求头中的content-t...转载 2018-07-04 14:00:04 · 7439 阅读 · 0 评论 -
匿名内部类的使用
基类package sky.java.innerclass1.nimingneibulei;public class Parent { private int age; public Parent(int age) { this.age = age; } public int value() { return age;...原创 2018-07-10 23:38:02 · 200 阅读 · 0 评论 -
内部类的向上转型以及隐藏实现
内部类的实现的接口package sky.java.innerclass1.inner1;public interface Ainter { void hello();}package sky.java.innerclass1.inner1;public interface Binter { void say();}内部类的外部类package s...原创 2018-07-10 00:25:43 · 434 阅读 · 0 评论 -
自定义List容器,自定义容器迭代器
自定义迭代器接口 package sky.java.innerclass;/** * 迭代器 */public interface Selector { boolean end(); void next(); Object current();}自定义容器 , 与容器内迭代器实现package sky.java.innerclass;...原创 2018-07-09 23:37:57 · 474 阅读 · 0 评论 -
CopyOnWriteArraySet 与CopyOnWriteArraySet 的使用 高并发 读写分离
CopyOnWriteArrayList是ArrayList 的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。 这一般需要很大的开销,但是当遍历操作的数量大大超过可变操作的数量时,这种方法可能比其他替代方法更 有效。在不能或不想进行同步遍历,但又需要从并发线程中排...转载 2018-06-29 17:10:42 · 2322 阅读 · 0 评论 -
链表队列
package com.structure.linked;import com.structure.Queue.Queue;/** * 基于时间复杂度的分析, * 1. 添加/修改/删除. 头 -> O(1) * 2. 添加/修改/删除. 其他 -> 0(n) * 改进: * 1. 将尾部node增加为其成员变量tail. 则有效降低时间...原创 2018-07-21 14:19:18 · 162 阅读 · 0 评论 -
Java 面试题
基本概念 操作系统中 heap 和 stack 的区别栈(stack)与堆(heap)都是Java用来在内存中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。 在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放...转载 2018-07-29 23:20:32 · 313 阅读 · 0 评论 -
JVM难学?那是因为你没认真看完这篇文章
一:虚拟机内存图解JAVA程序运行与虚拟机之上,运行时需要内存空间。虚拟机执行JAVA程序的过程中会把它管理的内存划分为不同的数据区域方便管理。虚拟机管理内存数据区域划分如下图:数据区域分类:方法区 (Method Area)虚拟机栈 (VM Sta...转载 2018-07-29 23:21:02 · 861 阅读 · 0 评论 -
基于aqs,自定义lock对象
package com.code.constructor.lock;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;import java.util.co...原创 2019-06-23 23:02:22 · 297 阅读 · 0 评论 -
Java并发之AQS详解
一、概述 谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)! 类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch...。 以下是本文的目录大纲:...转载 2019-06-23 18:29:38 · 231 阅读 · 0 评论 -
自定义lock锁
主要方法: lock(加锁) unlock(解除锁)package com.code.constructor.lock;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;public class ...原创 2019-06-23 17:06:39 · 337 阅读 · 0 评论 -
浅谈偏向锁、轻量级锁、重量级锁
为了换取性能,JVM在内置锁上做了非常多的优化,膨胀式的锁分配策略就是其一。理解偏向锁、轻量级锁、重量级锁的要解决的基本问题,几种锁的分配和膨胀过程,有助于编写并优化基于锁的并发程序。内置锁的分配和膨胀过程较为复杂,限于时间和精力,文中该部分内容是根据网上的多方资料整合而来;仅为方便查阅,后面继续分析JVM源码的时候也有个参考。如果对各级锁已经有了基本了解,读者大可跳...转载 2019-06-25 21:06:21 · 397 阅读 · 0 评论 -
Java并发编程:深入剖析ThreadLocal
想必很多朋友对ThreadLocal并不陌生,今天我们就来一起探讨下ThreadLocal的使用方法和实现原理。首先,本文先谈一下对ThreadLocal的理解,然后根据ThreadLocal类的源码分析了其实现原理和使用需要注意的地方,最后给出了两个应用场景。以下是本文目录大纲:一.对ThreadLocal的理解二.深入解析ThreadLocal类三.ThreadLocal的应用场景若...转载 2018-09-19 21:54:21 · 133 阅读 · 0 评论 -
Java transient关键字使用小记
哎,虽然自己最熟的是Java,但很多Java基础知识都不知道,比如transient关键字以前都没用到过,所以不知道它的作用是什么,今天做笔试题时发现有一题是关于这个的,于是花个时间整理下transient关键字的使用,涨下姿势~~~好了,废话不多说,下面开始:1. transient的作用及使用方法 &nbs...转载 2018-09-16 19:55:46 · 156 阅读 · 0 评论 -
Set 不重复实现原理
Java中的set是一个不包含重复元素的集合,确切地说,是不包含e1.equals(e2)的元素对。Set中允许添加null。Set不能保证集合里元素的顺序。在往set中添加元素时,如果指定元素不存在,则添加成功。也就是说,如果set中不存在(e==null ? e1==null : e.queals(e1))的元素e1,则e1能添加到set中。下面以set的一个实现类HashSet为例,...转载 2018-09-16 19:08:55 · 262 阅读 · 0 评论 -
Java URL处理
Java URL处理URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。表示为互联网上的资源,如网页或者FTP地址。本章节我们将介绍Java是如处理URL的。URL可以分为如下几个部分。protocol://host:port/path?query#fragmentprotocol(协议)可以是 HTTP...转载 2018-09-16 17:25:45 · 870 阅读 · 0 评论 -
JAVA多线程实现的四种方式
Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。 1、继承Thread类创建线程Thread类本质上是实现了Runnable...转载 2018-09-12 13:57:39 · 122 阅读 · 0 评论 -
Comparable和Comparator的区别
初次碰到这个问题是之前有一次电话面试,问了一个小时的问题,其中有一个问题就问到Comparable和Comparator的区别,当时没答出 来。之后是公司入职时候做的一套Java编程题,里面用JUnit跑用例的时候也用到了Comparator接口,再加上JDK的大量的类包括常见的 String、Byte、Char、Date等都实现了Comparable接口,因此要学习一下这两个类的区别以及用法。...转载 2018-09-12 10:48:23 · 156 阅读 · 0 评论 -
PropertiesConfiguration学习与使用
PropertiesConfiguration学习与使用前言:假设有这样的需求,需要按照文件的顺序读取Properties文件,这时该怎么做。直接使用java.util.Properties是做不到的,因为Properties继承自Hashtable;随便搜索一下就可以得到一个,继承Properties,自己维护一个LinkedHashSet的解法。这个方...转载 2018-08-09 16:08:21 · 8248 阅读 · 2 评论 -
自定义valid实现自定义数据校验操作
需要自定义注解 , 且指定校验class , 且具备valid注解必备的成员属性与方法package com.imooc.demo.invalid;import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.ElementType;import java...原创 2018-07-22 22:56:01 · 4390 阅读 · 0 评论 -
EJB到底是什么?
1. 我们不禁要问,什么是”服务集群”?什么是”企业级开发”? 既然说了EJB 是为了”服务集群”和”企业级开发”,那么,总得说说什么是所谓的”服务集群”和”企业级开发”吧!这个问题其实挺关键的,因为J2EE 中并没有说明白,也没有具体的指标或者事例告诉广大程序员什么时候用EJB 什么时候不用。于是大家都产生一些联想,认为EJB”分布式运算”指得是”负载均衡”提高系统的运行效...转载 2018-07-27 01:08:22 · 142 阅读 · 0 评论 -
Java中Annotation用法
Annotation Annotation其实是代码里的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行相应的处理。通过使用Annotation,程序开发人员可以在不改变原有逻辑的情况下,在源文件嵌入一些补充信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证或者进行部署。 Annotation提供了一条为程序元素设置元数据的方法,从某些方面来看,Annot...转载 2018-06-12 15:10:31 · 599 阅读 · 0 评论 -
Java8获取参数名及Idea/Eclipse/Maven配置
在Java8之前,代码编译为class文件后,方法参数的类型固定,但是方法名称会丢失,方法名称会变成arg0、arg1….。而现在,在Java8开始可以在class文件中保留参数名,这就给反射带来了极大的遍历。像mybatis等需要使用反射机制获取方法参数的时候就可以不用像以前一样需要使用类似于@Para之类的注解。功能测试代码参考自,点击进入编写测试类import java.lan...转载 2018-05-08 16:03:29 · 424 阅读 · 0 评论 -
对List集合中的元素进行排序
Collections对List集合中的数据进行排序有时候需要对集合中的元素按照一定的规则进行排序,这就需要用到Java中提供的对集合进行操作的工具类Collections,其中的sort方法先看一个简单的例子:[java] view plain copy print?public static void main(String[] args) { List<Integer> nums转载 2017-07-18 19:48:11 · 346 阅读 · 0 评论 -
HashMap实现原理分析
1. HashMap的数据结构数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。 数组数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1);数组的特点是:寻址容易,插入和删除困难;链表链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N)。链表的特点是:寻址困难,插入和删除容易。哈希表那么转载 2017-07-18 09:19:05 · 179 阅读 · 0 评论 -
【Java基础】InputStream 、 InputStreamReader和BufferedReader
在Java中,上述三个类经常用于处理数据流,下面介绍一下三个类的不同之处以及各自的用法。InputStream : 是所有字节输入流的超类,一般使用它的子类:FileInputStream等,它能输出字节流;InputStreamReader : 是字节流与字符流之间的桥梁,能将字节流输出为字符流,并且能为字节流指定字符集,可输出一个个的字符;BufferedReader : 提供通用的缓冲方转载 2017-07-29 14:44:55 · 1285 阅读 · 0 评论 -
java提高篇(四)-----抽象类与接口
java提高篇(四)—–抽象类与接口 <div class="article_manage clearfix"> <div class="article_l"> <span class="link_categories"> 标签: <a href="http://www.c转载 2017-07-16 21:30:49 · 496 阅读 · 0 评论 -
Java IO流学习总结
Java流操作有关的类或接口:Java流类图结构: 流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。 IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流 字符流和字节流字符流的由来: 因为数据编码的不同,而有了对转载 2017-07-16 21:14:43 · 341 阅读 · 0 评论 -
java中的几种对象(PO,VO,DAO,BO,POJO)
一、PO :(persistant object ),持久对象可以看成是与数据库中的表相映射的java对象。使用Hibernate来生成PO是不错的选择。二、VO :(value object) ,值对象通常用于业务层之间的数据传递,和PO一样也是仅仅包含数据而已。但应是抽象出的业务对象,可以和表对应,也可以不,这根据业务的需要.PO只能用在数据层,VO用在商业逻辑层和表示层。各层操作属于该层自转载 2017-07-05 13:09:44 · 210 阅读 · 0 评论 -
内部类详解
可以将一个类的定义放在另一个类的定义内部,这就是内部类。 内部类是一个非常有用的特性但又比较难理解使用的特性(鄙人到现在都没有怎么使用过内部类,对内部类也只是略知一二)。第一次见面 内部类我们从外面看是非常容易理解的,无非就是在一个类的内部在定义一个类。public class OuterClass { private String name ; priva转载 2017-06-13 14:48:31 · 418 阅读 · 0 评论 -
pojo . vo . bo
pojo :普通java对象 –对应数据库中的字段的数据载体. vo : 值对象 –对应视图层的显示的数据载体. bo : 业务层对象. –对应的是业务层的业务数据载体.三者在各自层中互相转换.三者可以在属性中有包含关系. 比如 : bo中含有pojo作为其属性.原创 2017-07-11 10:01:12 · 477 阅读 · 0 评论