Java基础知识点
byds520
Java技术专家
展开
-
git分支合并
1,从master 合并到 test上git checkout mastergit pullgit checkout testgit pullgit merge master// 修复冲突,执行git commit - m "fixed: conflict"之后 再推送到 test分支上git push -u origin test2,从test合并到master上则 是反过来的操作。(代码确保最新的,merge操作,需要在“想合并到”的分支上执行)...原创 2020-06-03 20:38:30 · 172 阅读 · 0 评论 -
Dock命令总结
1,停止所有容器:docker stop $(docker ps -a -q)2,删除所有容器:docker rm $(docker ps -a -q)3,查看所有容器的ID:docker ps -a -q(其中docker ps 列出容器,-a:显示所有的容器,包括未运行的,-q:静默模式,只显示容器编号)4,删除本地一个或多个镜像:docker rmi (-f 强制删除, 如 docker rmi -f image1 image2等)5,构建镜像:docker build ( ...原创 2020-05-31 22:49:20 · 435 阅读 · 0 评论 -
Filter、Interceptor、Aspect区别与应用
Filter:和框架无关,可以控制最初的http请求,但是更细一点的类和方法控制不了。可以拦截到方法的请求和响应(ServletRequest request, ServletResponse response)并对请求响应做出像响应的过滤操作,比如设置字符编码,鉴权操作等Interceptor:可以控制请求的控制器和方法,但控制不了请求方法里的参数拦截器可以方法执行之前(pre...原创 2020-04-16 13:59:34 · 255 阅读 · 0 评论 -
为什么 Mysql 选择B+树而不是B-树
B树(也就是B-树)B+树(B-树的变种)B-树与B+树区别B+树查询时间复杂度固定是logn,B-树查询复杂度最好是 O(1)。B+树相邻接点的指针可以大大增加区间访问性,可使用在范围查询等B-树每个节点 key 和 data 在一起,则无法区间查找。B+树更适合外部存储,也就是磁盘存储。由于内节点无 data 域,每个节点能索引的范围更大更精确B-树每个节点即保存...原创 2020-04-14 14:01:27 · 414 阅读 · 0 评论 -
Spring循环依赖检测、解决方法
核心利用二级和三级缓存1,一级缓存:用于存放完全初始化好的 bean2,二级缓存:存放原始的 bean 对象(尚未填充属性),用于解决循环依赖 */3,三级级缓存:存放 bean 工厂对象,用于解决循环依赖循环依赖发生的时机:实例化与填充属性/方法的过程中检测循环依赖的过程如下:1,A 创建过程中需要 B,于是A 将自己放到三级缓里面,去实例2,B 实例化的时...原创 2020-04-14 12:19:48 · 2435 阅读 · 0 评论 -
三种分布式锁的区别
1,基于数据库(性能较差,锁表的风险,非阻塞,失败需要轮询耗CPU)核心思想:在数据库中创建一个表,表中包含方法名等字段,并在方法名字段上创建唯一索引想要执行某个方法,就使用这个方法名向表中插入数据,成功插入则获取锁执行完成后删除对应的行数据释放锁。2,基于REDIS(过期时间不好控制,非阻塞,失败需要轮询耗CPU)使用setnx加锁,并使用expire命令为锁添加一个超时时...原创 2020-04-14 10:13:46 · 760 阅读 · 0 评论 -
JAVA垃圾回收判断、垃圾回收算法、垃圾回收器比较
如何判断垃圾1,引用计数法 (会有循环引用问题)2,可达性分析算法(无法与GC Root建立直接或间接的连接)GC Root有哪些1,虚拟机栈中引用的对象,如:对象地址2,方法区中类静态属性引用的对象,如:static变量3,方法区中常量引用的对象,如:final static4,本地方法栈中引用的对象,如:调用native,虚拟机只是简单地动态连接并直接调用指定的本地方法...原创 2020-04-14 03:44:54 · 214 阅读 · 0 评论 -
mvn如何解决依赖冲突
1,项目X会使用(Y,G,Z),Y、G依赖Z的不同版本,而且当前使用的与另一个版本不兼容,2,我们正在使用哪个Z版本?依赖机制如下:a,将使用库的版本(如项目Y),其节点最接近依赖关系树中的根(项目X)。b,如果同一库(如项目Y)有多个版本,则选择取决于POM文件中的依赖关系顺序。3,解决冲突1,最简单的解决方案是 在X的POM文件中将正确库的引入调整到错误库之前,如G调整...原创 2020-04-14 02:10:11 · 237 阅读 · 0 评论 -
Java类加载过程机制
加载机制:JVM把class文件加载到内存,并对数据进行校验、准备、解析、初始化,最终形成JVM可以直接使用的Java类型的过程。1,加载阶段加载是类加载过程中的一个阶段,不要将这2个概念混淆了。相对于类生命周期的其他阶段而言,加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,因为开发人员既可以使用系统提供的类加载器来完成加载,也可以自定义自己的类加载器来完成加载...原创 2020-04-14 01:43:03 · 109 阅读 · 0 评论 -
NIO、BIO、AIO介绍
目前有三种IO共存。分别是BIO、NIO和AIO。BIO 全称Block-IO 是一种同步且阻塞的通信模式。是一个比较传统的通信方式,模式简单,使用方便。但并发处理能力低,通信耗时,依赖网速。(线程发起io请求后,一直阻塞(阻塞io),直到数据就绪后,用户线程将数据写入socket空间,或从socket空间读取数据)NIO,全程 Non-Block IO ,一种非阻塞同步的通信模式。...原创 2020-04-14 00:50:46 · 291 阅读 · 0 评论 -
Java基础知识、hashmap、AQS、ThredPoolExecutor
1,StringBuild、StringBuffer、String 区别,Integer a= 130 与 Integer Integer b= 130 相等么,120呢?为什么(-128,127做了缓存,所以是同一个对象,主要是基于效率考虑,防止频繁创建)2,了解java的集合有哪些ArrayList,Vector,LinkedList,HashSet(底层HashMap),Linked...原创 2020-04-13 18:55:18 · 164 阅读 · 0 评论 -
Java锁、内存区域划分、类初始化顺序
1,volatile 变量的内存可见性是基于内存屏障(Memory Barrier)实现。内存屏障,又称内存栅栏,是一个 CPU 指令。 在程序运行时,为了提高执行性能,编译器和处理器会对指令进行重排序,JMM 为了保证在不同的编译器和 CPU 上有相同的结果,通过插入特定类型的内存屏障来禁止特定类型的编译器重排序和处理器重排序,插入一条内存屏障会告诉编译器和 CPU:不管什么指令都不能和这...原创 2020-04-13 01:13:47 · 179 阅读 · 0 评论 -
Spring AOP切入点指示符的含义及使用(execution、within、args等)
execution:用于匹配方法执行的连接点;execution(* com.test.method.des..*.*(..))1, execution()表达式的主体2, 第一个“*”符号 表示返回值的类型任意3, com.test.method.des AOP所切的服务的包名,即,需要进行横切的业务类4, 包名后面的“..” 表示当前包及子包5, 第二个“*...原创 2019-03-11 15:41:47 · 4339 阅读 · 0 评论 -
文件名中包含空格的处理
将空格替换成 -find . -type f -name “* *" -print |while read name; do na=$(echo $name | tr ' ' ‘-') if [[ $name != $na ]]; then echo “$name => $na" mv "$name" "$na"fidone或者将 find . ...原创 2019-02-25 16:37:00 · 3720 阅读 · 0 评论 -
javascript scrollbar滚动条相关属性
window.innerHeight 表示浏览器可见或可用高度window.pageXOffset 和 window.pageYOffset 属性返回文档在窗口左上角水平和垂直方向滚动的像素。pageXOffset 和 pageYOffset 属性相等于 scrollX 和 scrollY 属性。// 所有浏览器,除了 IE9 及更早版本水平滚动: " + window.page...原创 2018-11-26 16:09:28 · 4629 阅读 · 0 评论 -
nginx try_files的使用及理解
语法: try_files file ... uri 或 try_files file ... = code默认值: 无作用域: server location主要按参数顺序检查文件是否存在,返回第一个找到的文件,文件:$uri 文件夹 :$uri/最后一个参数,用来回退URI且必须存在,否则将会出现内部500错误。一般最后一个参数使用@fallback进行重定向指定代理或文件...原创 2018-11-13 13:00:43 · 18283 阅读 · 0 评论 -
git使用一些经验技巧
commands usage git checkout –b 新建一个branch来做整理的工作,保持原来的branch作为工作记录 git rebase –i 在新建的branch上,用rebase -i接squash的方法,将所有零碎的commit合成一个 git reset –soft HEAD~1 这一步只将object store还原到working_...原创 2018-10-19 19:01:03 · 230 阅读 · 0 评论 -
同步,异步,阻塞,非阻塞的区别
同步异步:指的是需不需要等待返回结果;同步:需要不断轮询数据是否准备好了,或者一直在等待数据准备好异步:发送一个请求就立即返回,然后去干别的事情,当数据准备号了会通知进行相关处理。(同步的实时性比较号,异步的并发性能比较号)阻塞和非阻塞:是指需不需要阻塞线程阻塞:当前线程不执行别的事情,一直再等待非阻塞:当前线程可以干别事情,间隔一段时间检查一下上次的数据有没有准备好;它们修饰的对象不一样,阻塞非...原创 2018-07-06 01:36:44 · 1847 阅读 · 0 评论 -
JAVA(-Xms,Xmx,Xmn-XX:newSize,-XX:MaxnewSize,-XX:PermSize,-XX:MaxPermSize)区别
1、-Xms:表示java虚拟机堆区内存初始内存分配的大小,通常为操作系统可用内存的1/64大小即可,但仍需按照实际情况进行分配。2、-Xmx:表示java虚拟机堆区内存可被分配的最大上限,通常为操作系统可用内存的1/4大小。开发过程中,通常会将-Xms 与-Xmx两个参数的配置相同的值,其目的是为了能够在java垃圾回收机制清理完堆区后不需要重新分隔计算堆区的大小而浪费资源。Java堆区的进一步...原创 2018-07-04 14:29:18 · 40476 阅读 · 5 评论 -
常见的HTTP状态码
常见的HTTP状态码2** (请求成功)表示成功处理了请求的状态代码。200 (成功) 服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。 201 (已创建) 请求成功并且服务器创建了新的资源。 202 (已接受) 服务器已接受请求,但尚未处理。 203 (非授权信息) 服务器已成功处理了请求,但返回的信息可能来自另一来源。 204 (无内容) 服务器成功...原创 2018-06-20 22:23:10 · 163 阅读 · 0 评论 -
Java高级面试问题
1大型网站如何优化,如何提高访问速度2缓存设置原则3分布式事务介绍4减库存操作如何保证重复消费问题5B2B,B2C,C2C模式的区别6线程池优化7缓存和数据库之间如何保证一致性?就是缓存和数据库更新如何做到事务性8如用户恶意请求不存在的商品,如何解决9分布式事务如何实现,如何解决重复消费问题10springboot,服务之间如何通信?Dubbo,zookeeper11,设计模式:单例,动态代理,b...原创 2018-04-19 14:22:26 · 287 阅读 · 0 评论 -
ArrayList,Vector,LinkedList,HashSet,LinkedHashSet,TreeSet比较
List是一种有序的Collection, 元素可以重复ArrayList是实现了基于动态数组的数据结构,使用可增长的长数组实现的.(扩容增加50%,不可以设置,默认空间10)LinkedList基于链表的数据结构,使用双链表实现的,对于随机访问,ArrayList优于LinkedList,因为LinkedList需要移动指针,对于新增和删除LinkedList占优势,因为ArrayList需要移...原创 2018-03-15 20:37:21 · 752 阅读 · 0 评论 -
HashMap的实现原理及其特点
1) HashMap可以接受null键值和值,而HashTable则不能,HashMap是非synchronized的;存储的是键值对。2) HashMap是基于hashing原理,使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象,当我们给put方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到buck...原创 2018-03-15 20:43:08 · 23365 阅读 · 0 评论 -
Java多线程以及进程间的通信方式
Java 线程通信:1共享变量,如volatite等2wait/notify机制,最好搭配同步锁3Lock/Condition机制 //condition.await();condition.signalAll();4管道 //PipedOutputStream out; PipedInputStream in; out.connect(in); //只能建立一次Java进程通信1.管道、命名...原创 2018-03-22 20:22:28 · 6139 阅读 · 0 评论 -
Java封装/继承/多态
多态:就是有多种形态,如定义个car,可以通过继承/重写,实现各种各样的car继承:作用是代码的复用,父类的方法可以在子类中使用。并且通过继承,子类还可以进行扩展,实现自己的特性。封装:就是一个对象,他有很多属性,如一个Person有name, age, sex等各种属性。重载:是方法名字一样,但方法参数不一样。重写:方法名字一样,参数也一样。通过继承,子类重写父类方法...原创 2018-03-29 19:00:23 · 132 阅读 · 0 评论 -
Java垃圾回收机制
在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。不失一般性,如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。特点是实现简单,而且效率较高,但是它无法解决循环引用的问题,因此在Java中并没有采用这种方式...原创 2018-03-29 19:36:40 · 112 阅读 · 0 评论 -
几种排序算法比较
插入、冒泡排序的速度较慢,但参加排序的序列局部或整体有序时,这种排序能达到较快的速度。在这种情况下,快速排序反而慢了。较小情况(如n<60)当n较小时,对稳定性不作要求时宜用选择排序,对稳定性有要求时宜用插入或冒泡排序。若待排序的记录的关键字在一个明显有限范围内时,且空间允许是用桶排序。较大情况:当n较大时,关键字元素比较随机,对稳定性没要求宜用快速排序。当n较大时,关键字元素可能出现本身是...原创 2018-03-20 19:35:10 · 526 阅读 · 0 评论 -
Java类加载和初始化顺序
一个类(class)要被使用必须经过装载,连接,初始化这样的过程。在装载阶段,类装载器(Bootstrap ClassLoader 或自定义的ClassLoader) 把编译形成的class文件载入内存,创建类相关的Class对象,这个Class对象封装了我们要使用的类的类型信息。连接阶段又可以分为三个子步骤:验证、准备和解析。验证就是要确保java类型数据格式 的正确性。准备阶段,JVM为静态变...原创 2018-03-31 11:07:47 · 176 阅读 · 0 评论 -
Java信号量Semaphore的使用
Semaphore是用来保护一个或者多个共享资源的访问,Semaphore部维护了一个计数器,其值为可以访问的共享资源的个数。一个线程要访问共享资源,先获得信号量,如果信号量的计数器值大于1,意味着有共享资源可以访问,则使其计数器值减去1,再访问共享资源。如果计数器值为0,线程进入休眠。当某个线程使用完共享资源后,释放信号量,并将信号量内部的计数器加1,之前进入休眠的线程将被唤醒并再次试图获得信号...原创 2018-03-21 15:57:37 · 216 阅读 · 0 评论 -
Spring事务介绍
开启事务<tx:annotation-driven transaction-manager="defaultTransactionManager" proxy-target-class="true" />脏读:一个事务读取到另一事务未提交的更新数据不可重复读:在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事务已提交的更新数据. 相反, "可重复读...原创 2018-04-08 18:09:51 · 116 阅读 · 0 评论 -
Hibernate与MyBatis比较总结
Hibernate 简介Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的S...原创 2018-04-08 18:15:39 · 259 阅读 · 0 评论 -
Java中String/StringBuffer/StringBuilder比较
运行速度比较:StringBuilder > StringBuffer > StringString是对字符串常量操作(String是final class),StringBuilder与StringBuffer是对字符串变量操作Java中对String对象的操作实际上是不断创建新的对象并且将旧的对象回收的过程,所以执行速度慢。而StringBuilder和StringBuffer是直...原创 2018-04-01 10:59:37 · 121 阅读 · 0 评论 -
泛型中? super T和? extends T的区别
<? super T>表示包括T在内的任何T的父类<? extends T>表示包括T在内的任何T的子类详解:<? extends T>List<? extends Number> nums = new ArrayList<? extends Number>();List<? extends Number> nums = ne...原创 2018-04-01 23:34:19 · 195 阅读 · 0 评论 -
Java基础: 什么是指令重排序/as-if-serial/内存屏障/happens-before
Java基础知识指令重排序在执行程序时,为了提高性能,编译器和处理器会对指令做重排序。编译器优化重排序:编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。指令级并行的重排序:如果不存l在数据依赖性,处理器可以改变语句对应机器指令的执行顺序。内存系统的重排序:处理器使用缓存和读写缓冲区,这使得加载和存储操作看上去可能是在乱序执行。但是,可以通过插入特定类型的Memory Barrie...原创 2018-03-28 15:55:26 · 4480 阅读 · 0 评论 -
Java中栈和堆
Java在内存中分为5个空间,1.寄存器,2.本地方法区,3.方法区,4.栈,5.堆基础点:1. 基本数据类型、局部变量都是存放在栈内存中的,用完就消失。2. new创建的实例化对象及数组,是存放在堆内存中的,用完之后靠垃圾回收机制不定期自动消除。本地变量:一种是原始类型(boolean,byte,short,char,int,long,float,double),会被存储到栈中,一种是对象的引用...原创 2018-03-28 16:19:02 · 160 阅读 · 0 评论 -
Java并发编程AQS及其实现类
并发之AQS(AbstractQueuedSynchronizer)抽象的队列式的同步器,ReentrantLock/Semaphore/CountDownLatch等中的同步类实现都依赖于它。AQS定义两种资源共享方式:Exclusive(独占,只有一个线程能执行,如ReentrantLock)和Share(共享,多个线程可同时执行,如Semaphore/CountDownLatch)tryAc...原创 2018-03-28 23:24:14 · 427 阅读 · 0 评论 -
Java基础知识: LockSupport的park和unpark
源码:public static void park(Object blocker) { Thread t = Thread.currentThread(); setBlocker(t, blocker); UNSAFE.park(false, 0L); setBlocker(t, null);}public static void unpark(Thread t...原创 2018-03-29 09:58:28 · 1859 阅读 · 1 评论 -
简单的java webservice
1、编写代码2、客户端 编译使用2.1 执行cmd命令编译wsimport -s "src地址" -p "编译出来的文件(java文件)存放的地址(package)" -keep "webservice wsdl 地址 如:http://localhost:8090/service/jdkws?wsdl"编译画面如下:2.2 客户端代码webservice 文件 为 jdkWebService ...原创 2018-03-15 20:16:02 · 294 阅读 · 0 评论