JAVA基础
cforeach
这个作者很懒,什么都没留下…
展开
-
java语言中可以直接操作堆外内存的DirectByteBuffer
DirectByteBuffer是java中直接进行堆外内存管理的API,堆外内存可以直接和系统内存进行交互,从而减少一次JVM内存-系统内存之间的交互,提高I/O效率。所以需要学习一下这个类的构造函数、了解背后的设计思想,提高自己对java语言的理解,从而写出更优雅的代码。1.入口通过ByteBuffer.allocateDirect方法进行构造2.DirectByteBuffer的构造函数2.1 准备内存2.1.1SharedSecrets类static void reserveMem原创 2021-11-26 22:34:23 · 1023 阅读 · 0 评论 -
linux TOP命令详解
top命令经常用来监控Linux的系统状况,比如cpu、内存的使用,程序员基本都知道这个命令,但比较奇怪的是能用好它的人却很少,例如top监控视图中内存数值的含义就有不少的曲解。本文通过一个运行中的WEB服务器的top监控截图,讲述top视图中的各种数据的含义,还包括视图中各进程(任务)的字段的排序。top进入视图top视图01这个视图一共四个参数:系统当前时间、系统运行时间、当前连接用户数、系统最近1分钟、5分钟、15分钟负载情况13:28:38 :系统当前时间23days 4:01 系统原创 2021-11-26 11:03:10 · 215 阅读 · 0 评论 -
MYSQL隐式转换的坑
数据库表主键id数据类型是String,类似111000222111这种的。今天下午进行了一下删除操作,`select * from a_res_user where id = 12110011011610201001627614752497;结果删除了600多条数据。。。。。还好是测试库,然后带着一万只草拟在思考这是为什么,后来感觉是MYSQL隐式转换的问题,然后就百度了一下相关的文章,大体意思是 你传入的int类型数字会以最左匹配原则匹配出对应的字符串集合作为结果集,比如库里有7条数据 1111原创 2021-08-02 18:10:50 · 121 阅读 · 0 评论 -
java基础-unmodifiableList初探
unmodifiableList问题描述:当一个集合在创建成功到使用完成的期间内,内容不允许修改,需要对其进行操作。如图示:package cn.com.pep.res.back.YoZo;import cn.com.pep.res.back.YoZo.vo.UserResBean;import cn.com.pep.res.back.YoZo.vo.YozoResult;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson原创 2021-07-01 17:26:18 · 503 阅读 · 0 评论 -
java日志系统
1.JDK Logging为什么要用日志类如果没有日志类,我们代码运行过程中查看运行变量、运行结果就只能通过sout的方式,这样会有2个问题:第一是上线前要统一的删掉这些输出代码,但是下次调试的时候还要每个地方再去加上,很不方便;2.日志输出无法统一管理格式、级别,也无法把日志输出到指定的文件,便于日志采集管理。2.CommonsLoggingCommons Logging是一个第三方日志库,它是由Apache创建的日志模块。Commons Logging的特色是,它可以挂接不同的日志系原创 2021-03-24 20:25:43 · 184 阅读 · 0 评论 -
Java和C++的区别有哪些
1.Java是运行在虚拟机上,先编译后解释成机器语言字节码文件,最后运行在操作系统上,c++可以直接编译成字节码文件在系统上运行2.Java中内存回收是由JVM管理的,c++不是3.Java由于需要jvm编译,所以使用场景没有c++更偏底层...原创 2021-03-02 12:53:47 · 108 阅读 · 0 评论 -
静态与非静态的区别
1.静态方法、静态变量会随着JVM虚拟机启动而加载,JVM虚拟机销毁前会一直在内存中metadata中存在,非静态是实例化的时候创建内存空间,使用完毕后回收内存空间2.静态方法可以直接使用类名调用3.静态方法只能调用静态的全局变量...原创 2021-03-02 12:52:52 · 627 阅读 · 0 评论 -
Java中==和equals的区别
1.==是运算符,equals是方法2.==比较基本类型时,比较的是栈里面值内容是否相等,比较引用类型时,比较的是对象引用的地址值是否相等3.object中的equals实现与==是一样的,重写了equals方法后比较的是内容是否相等...原创 2021-02-01 19:11:12 · 79 阅读 · 0 评论 -
Spring中的事物
spring支持编程式事物和声明式事物管理两种方式:编程式事物:使用transactionTemplate实现声明式事物:建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事物处理的功能编织到拦截到方法中,也就是目标方法开始之前加入一个事物,在执行完目标方法之后根据情况提交或者回滚事物。当多个spring事物存在的时候,spring定义了下面7个传播行为来处理这些事物行为:propagation_required:如果当前没有事物,就创建一个新事物,如果当前存在事物,就加入该原创 2020-12-09 13:01:24 · 261 阅读 · 0 评论 -
MySql不使用索引的几种情况
1.查询语句中有or(关联的列都要加索引)2.如果列类型是字符串,那么要在条件中把数据使用引号括起来3.如果mysql判断使用全表扫描比使用索引快,则不使用索引4.like没有使用最左匹配原则原创 2020-12-09 12:51:59 · 398 阅读 · 0 评论 -
消息队列7连问
一.为什么要用消息队列·剖析其实面试官是在问:消息队列都有哪些使用场景,项目中是怎么用的消息队列的使用场景\项目中如何使用的1.解耦项目中有一张表,里面某一个字段是和其他项目组打通的,从其他项目同步过来的字段,因为并不是需要同步更新,所以使用的mq进行消息的同步,我们系统作为消费者消费消息,生产者不用对每一个系统都进行硬编码了。2.异步用户一个请求,后台自己系统写库需要100ms,但是还要向其他ABC三个系统数据库写入,分别需要300Ms,如果是同步,则用户等待时长为1m,异步则原创 2020-12-06 09:10:45 · 181 阅读 · 0 评论 -
多线程(中)
一.原子性、可见性、有序性原子性:涉及到共享变量访问的操作,除了执行线程之外的任意操作都是不可分割的,那么该操作就是原子操作。即,其他线程不会看到该操作执行了部分的中间结果。原子性的实现方式:利用锁的排他性,同一时刻只有一个线程在操作一个共享变量利用CAS保证Java语言规范中,保证了除了long和double型意外的任何变量的写操作都是原子操作Java语言规范中规定,volatile关键字修饰的变量可以保证其写操作的原子性注意事项:1.原子性针对的是多个线程的共享变量,原创 2020-12-05 16:30:29 · 138 阅读 · 0 评论 -
多线程-上
1.进程与线程的区别1.进程是一个执行中的程序,是系统进行资源分配和调度的一个独立单位2.线程是进程的一个实体,一个进程中一般拥有多个线程。线程之间共享地址空间和其他资源(所以通信和同步等操作,线程比进程更加容易)3.线程一般不拥有系统资源,但是也有一些必不可少的资源(使用ThreadLocal存储、线程级别的缓存?)4.线程上下文切换比进程上下文切换要快很多5.线程上下文切换比进程上下文切换要快很多的原因:1.进程切换时,涉及到当前进程的CPU环境的保存和新被调度运行的CPU环境的原创 2020-12-05 14:57:55 · 93 阅读 · 0 评论 -
三大集合-下篇
1.treemap有哪些特性?treemap底层使用红黑树实现,treemap中存储的键值对按照键来排序。1.如果key存入的是字符串等类型,那么会按照字典默认顺序排序。2.如果传入的是自定义引用类型,比如user,那么该对象必须实现compare接口或者创建treemap的时候指定一个比较器comparator2.ArrayList和LinkedLIst有哪些区别?1.ArrayList底层使用了动态数组实现,实质上是一个动态数组2.linkedLIst底层使用了双向链表实现,可以原创 2020-12-05 12:48:21 · 107 阅读 · 1 评论 -
三大集合-上篇
一.Java中常见集合有哪些?java中常见的集合可以概括如下1.Map接口和Cllection接口是所有集合框架的父接口2.collection接口的子接口包括List接口和Set接口3.Map接口的实现类主要有:HashMap、TreeMap、Hashtable、LinkedHashMap、ConcurrentHashMap以及Properties等4.LIst的接口主要实现类有ArrayLIst、LinkedLIst、Stack、Vector等二.HashMap和Hash.原创 2020-12-05 12:21:22 · 303 阅读 · 0 评论 -
其他基础相关
一.Java序列化与反序列化的过程1.序列化:把Java对象转化成字节序列的过程2.反序列化:把字节队列恢复成Java对象的过程为什么要用序列化:1.把对象的字节永久的保存到硬盘上2.网络传输如何实现序列化:1.实现Seriesible接口2.实现Externarizble接口二.equals方法和hashCode方法的关系同一个对象在往Set集合里面放进去的时候,会调用.hashcode方法进行寻址,如果不重写该方法,会造成同样的对象的hashcode不一样,导致2原创 2020-12-05 11:59:43 · 85 阅读 · 0 评论 -
多线程(下)
1.线程池Java中线程池有了解吗?Java.util.concurrent.threadpoolexcutor就是一个线程池。客户端调用threadpoolexcutor.submit(Runable task)提交任务,线程池内部维护的工作线程的数量就是该线程池的线程池大小,有三种形态:1.当前线程池大小:表示线程池中实际工作线程的数量2.最大线程池大小:表示线程池中允许存在的构造线程的数量上限3.核心线程大小:表示一个不大于最大线程池大小的工作者线程数量上限线程池的优势:1原创 2020-12-05 09:09:48 · 92 阅读 · 0 评论 -
Java中泛型的理解
泛型的概念:将所有的数据类型作为参数,在类实例化的时候传过来的参数泛型的作用:1.使用泛型能写出更加灵活通用的代码泛型的设计主要参照了C++的模板,旨在能让人写出更加通用化,更加灵活的代码。模板/泛型代码,就好像做雕塑时的模板,有了模板,需要生产的时候就只管向里面注入具体的材料就行,不同的材料可以产生不同的效果,这便是泛型最初的设计宗旨。2.泛型将代码安全审核提前到编译期3.泛型可以省去类型强制转换...转载 2021-03-02 12:54:13 · 62 阅读 · 0 评论 -
StringBuffer和StringBuilder的区别
1.String是不可变类,任何对String的修改都会创建新的对象,频繁拼接的情况下会造成频繁的创建、回收对象,导致GC。2.StringBuffer是可变类,线程安全,支持并发,但是单线程下效率不如StringBuilder3.StringBuilder设计为StringBuffer在单线程情况下的替代者...原创 2020-12-04 15:48:02 · 74 阅读 · 0 评论 -
Java中的值传递和引用传递
值传递:意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象。引用传递:意味着传递的并不是实际的对象,而是对象的引用。因此,外部对对象的改变会反映到所有的对象上。public class Test{ public static void main(String[]args){ StringBuffer sb = new StringBuffer("Hello"); System.out.println("Before change, sb = "+ sb);...原创 2020-12-04 15:25:48 · 134 阅读 · 0 评论 -
JIT编译器
JIT编译器全名 just in time compile 也就是即时编译器,把经常运行的代码作为“热点代码”编译成与本地平台相关的机器码,进行各层次的优化。JIT编译器除了有缓存的功能外,还会对代码进行各种优化,包括逃逸分析、锁消除、锁膨胀、方法内联、空值检查消除、类型检查消除异己公共子表达式消除等。逃逸分析:逃逸分析的基本行为就是分析对象动态作用域,当一个对象在方法中被定义之后,他可能会被外部方法所引用,例如作为调用参数传递到其他地方中,称为方法逃逸。JIT编译器的优化包括如下:同步省略原创 2020-12-04 14:37:16 · 148 阅读 · 0 评论 -
Exception和Error的区别
1.Exception是程序正常运行过程中预料到可能会出现的错误,并且应该被捕获并进行相应的处理,是一种异常现象。2.Error是正常情况下不可能发生的错误,Error会导致JVM处于不可恢复的状态,不需要捕获处理,比如说OutOfMemoryError3.Exception分为运行时异常和编译时异常编译时异常:表示当前调用的方法内部抛出了一个异常,所以编译器检测到这段代码运行时可能会出现异常,所以要求我们必须对异常进行相应的处理,可以捕获异常或者抛给上层调用方。运行时异常:表示在运行时出现原创 2020-12-04 12:41:27 · 1541 阅读 · 0 评论 -
Java中的反射机制
反射机制是指在运行中,对于任意一个类,都能够知道这个类的所有属性和方法。对于任意一个对象,都能够调用它的任何一个方法和属性。即动态获取信息和动态调用对象方法的功能称为反射机制。反射机制的作用:在运行时判断任意一个对象所属的类在运行时构造一个类的对象在运行时判断任意一个类所具有的成员变量和方法在运行时调用任意一个对象的方法,生成动态代理与反射相关的类:Class:表示类,用于获取类的相关信息Field:表示成员变量, 用于获取实例变量和静态变量等Method: 表示方法 ,原创 2020-12-04 12:28:47 · 120 阅读 · 0 评论 -
Java中的元注解都有哪些
Java中提供了4个元注解,元注解的作用是负责注解其他注解@Target说明注解所修饰的对象范围TYPE\FIELD\METHOD\CONSTRUCTOR\TYPE_USE@Retention(保留策略)保留策略定义了该注解被保留的时间的长短SOURCE、CLASS、RUNTIME@Documented该注解用于描述其他类型的annotation应该被作为被标注的程序员的公共API@Inherited阐述了某个被标注的类型是被继承的注解的作...原创 2020-12-04 12:01:40 · 226 阅读 · 0 评论 -
Java中的8种基本数据类型及其取值范围
Java中8种基本数据类型分别为int 4字节float 4字节long 8字节short 2字节double 8字节char 2字节byte 1字节boolean 无规定原创 2020-12-04 11:54:14 · 592 阅读 · 0 评论 -
抽象类和接口的区别
1.抽象类可以有抽象方法和非抽象方法2.接口中的方法在JDK1.8中只能是抽象的,1.8版本增加了default实现3.抽象类是单继承,接口是多实现4.抽象类中可以有普通的成员变量,接口中的变量必须是static final类型的,必须被初始化,没有常量二者如何选择?分别在什么场景下使用?根据二者的不同之处,当我们仅仅需要定义一些抽象方法而不需要额外的具体方法或者变量的时候,我们可以使用接口。反之,需要使用抽象类,因为抽象类可以有抽象方法和变量。如果两个接口存在同样的..原创 2020-12-04 11:50:49 · 132 阅读 · 0 评论 -
JDK,JRE,JVM的区别和联系
三者的概念:JDK(java development kit):是一个开发工具包,是Java开发环境的核心组件,并且提供编译、调试和运行一个Java程序所需要的所有工具,可执行文件和二进制文件,是一个平台特定的软件。JRE(Java runtime evironment):是指java运行时环境,是JVM的实现,提供了运行Java程序的平台。JRE包含了JVM,但是不包含Java编译器、调试器之类的开发工具。JVM(Java vritural machine):是指java虚拟机,当原创 2020-12-04 11:32:01 · 108 阅读 · 0 评论 -
Java基础-面向对象
面向对象是一种思想,可以讲复杂问题简单化,让我们从执行者变为了指挥者。面向对象的三大特性为:封装,继承与多态。封装:将事物封装成一个类,减少耦合,隐藏细节。 保留特定的接口与外界联系,当接口内部发生改变时,不会影响外部调用方。继承:从一个已知的类中派生出一个新类,新类可以拥有已知类的行为和属性,并且可以通过覆盖、重写来增强已知类的能力。多态:多态的本质就是一个程序存在多个同名的不同方法,主要通过三种方式来实现:通过子类对父类对覆盖来实现通过在一个类中对方法的重载来实现通过将子类对象作原创 2020-12-04 09:12:42 · 75 阅读 · 0 评论