java
文章平均质量分 91
java
我是陈旭原
生命不息 运动不止
展开
-
java8新特性
目录1、lambda表达式2、Stream API3、其他 1、lambda表达式 TestLambda1 public class TestLambda1 { //原来的匿名内部类 @Test public void test1(){ Comparator<String> com = new Comparator<String>(){ @Overrid...原创 2020-04-28 10:04:26 · 200 阅读 · 0 评论 -
关于java中输出流flush()方法
在java开发中,有时我们会进行流的操作,所以可能会经常遇到这样一段代码 out.flush(); out.close(); 有时我们只是大概看懂这些,却不知道其中的原理性东西,下面就来理解一下: flush()这个函数是清空的意思,用于清空缓冲区的数据流,进行流的操作时,数据先被读到内存中,然后再用数据写到文件中,那么当你数据读完时,我们如果这时调用close()方法关闭读写流,这时就可...转载 2018-11-11 11:09:36 · 3149 阅读 · 0 评论 -
BIO与NIO、AIO的区别
IO的方式通常分为几种,同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO。一、BIO 在JDK1.4出来之前,我们建立网络连接的时候采用BIO模式,需要先在服务端启动一个ServerSocket,然后在客户端启动Socket来对服务端进行通信,默认情况下服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒绝请求,如...转载 2018-06-05 09:35:54 · 145 阅读 · 0 评论 -
java.lang.VerifyError: Expecting a stackmap frame at branch target
java.lang.VerifyError: Expecting a stackmap frame at branch target 51 Exception Details: Location: com/suning/ospos/pushapi/controller/PushAuthController.$jacocoInit()[Z @4: ifnonnull Reason:...转载 2018-06-13 14:56:58 · 2839 阅读 · 0 评论 -
如何保证缓存与数据库的双写一致性?
只要用缓存,就可能会涉及到缓存与数据库双存储双写,你只要是双写,就一定会有数据一致性的问题,那么你如何解决一致性问题? 面试题剖析 一般来说,如果允许缓存可以稍微的跟数据库偶尔有不一致的情况,也就是说如果你的系统不是严格要求 “缓存+数据库” 必须保持一致性的话,最好不要做这个方案,即:读请求和写请求串行化,串到一个内存队列里去。 串行化可以保证一定不会出现不一致的情况,但是它也会导致...原创 2019-05-27 11:20:14 · 115 阅读 · 0 评论 -
java面试(关于同步、异步、阻塞、非阻塞的几点理解)
同步与异步 同步与异步是针对应用程序与内核的交互而言的。同步过程中进程触发IO操作并等待或者轮询的去查看IO操作是否完成。异步过程中进程触发IO操作以后,直接返回,做自己的事,IO交给内核来处理,完成内核通知进程IO完成。 阻塞与非阻塞 应用进程请求I/O操作时,如果数据未准备好,如果请求立即返回就是非阻塞,不立即返回就是阻塞。简单说就是做一件事如果不...原创 2018-10-15 21:12:24 · 2644 阅读 · 0 评论 -
java面试总结
1.mysql 存储及查询亿级数据 第一阶段: 1),一定要正确设计索引 2),一定要避免SQL语句全表扫描,所以SQL一定要走索引(如:一切的><!=等等之类的写法都会导致全表扫描) 3),一定要避免limit 10000000,20 这样的查询 4),一定要避免LEFT JOIN之类的查询,不把这样的逻辑处理交给数据库 5),每个表...原创 2018-10-15 20:52:35 · 111 阅读 · 0 评论 -
java面试总结
1.new 一个对象的过程 SubClass sub = new SubClass(); 这句话到底做了什么事情呢? 1.javac编译.java源文件形成.class字节码文件; 2.new SubClass()对象时,先检查有没有父类,有父类,类加载器(ClassLoader)先将父类的Class文件读入内存,创建一个java.lang.Class对象,然...原创 2018-10-14 21:03:30 · 122 阅读 · 0 评论 -
java 面试总结(框架)
1.springmvc和springboot的区别? Spring MVC是什么? (1)Spring MVC是Spring提供的一个强大而灵活的模块式web框架。通过Dispatcher Servlet, ModelAndView 和 View Resolver,开发web应用变得很容易。 (2)SpringMVC是一种基于Java的以请求为驱动类型的轻量级Web框架...原创 2018-10-10 17:15:27 · 323 阅读 · 0 评论 -
java 面试总结(数据库)
1.建立索引的规则 索引是建立在数据库表中的某些列的上面。因此,在创建索引的时候,应该仔细考虑在哪些列上面可以创建索引,在哪些列上面不能创建索引。一般来说,应该在这些列上面创建索引。例如: 1)在经常需要搜索的列上面,可以加快搜索的速度; 2)在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构; 3)在经常用在连接的列上,这些列主要是一些外键,可以加快连接速...原创 2018-10-09 22:56:54 · 110 阅读 · 0 评论 -
java 面试总结(JVM)
1.JVM类加载方法和顺序 找到main() 方法--->初始化静态代码块--->回到main()方法--->执行main()方法里面的程序,创建对象--->执行非静态代码和构造方法--->再回头main()方法执行下面语句 2.JVM的内存模型,各个内存分区的作用以及存储了什么东西? Java内存模型(即Java Memory Model,简称...原创 2018-10-09 15:00:54 · 108 阅读 · 0 评论 -
java 面试总结(异常)
1.所有异常的基类 Throwable是所有异常Exception和错误Error的祖先 2.举例说明运行时异常和非运行时异常 1)运行时异常都是RuntimeException类及其子类异常,就是我们在开发中测试功能时程序终止,控制台出现异常,比如: NullPointerException(空指针异常) IndexOutOfBoundsExc...原创 2018-10-09 14:31:23 · 137 阅读 · 0 评论 -
java面试总结(多线程)
1.什么是线程池? 线程池是一种多线程处理形式,处理过程中将任务提交到线程池,任务的执行交由线程池来管理。 如果每个请求都创建一个线程去处理,那么服务器的资源很快就会被耗尽,使用线程池可以减少创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。 如果用生活中的列子来说明,我们可以把线程池当做一个客服团队,如果同时有1000个...原创 2018-10-08 23:08:28 · 98 阅读 · 0 评论 -
java 面试总结(集合)
1.Set, List, Map 的联系和区别? 答:1)List,Set都是继承自Collection接口,Map则不是 2)List特点:元素有放入顺序,元素可重复,Set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉,(注意:元素虽然无放入顺序,但是元素在set中的位置是由该元素的HashCode决定的,其位置其实是固定的,加入Set的O...原创 2018-10-08 19:41:48 · 177 阅读 · 0 评论 -
什么是java中CAS
本篇的思路是先阐明无锁执行者CAS的核心算法原理然后分析Java执行CAS的实践者Unsafe类,该类中的方法都是native修饰的,因此我们会以说明方法作用为主介绍Unsafe类,最后再介绍并发包中的Atomic系统使用CAS原理实现的并发类。 无锁概念 在谈论无锁概念时,总会关联起乐观派与悲观派,对于乐观派而言,他们认为事情总会往好的方向发展,总是认为坏的...转载 2018-10-30 18:57:50 · 2396 阅读 · 1 评论 -
Java7/8 中的HashMap 和 ConcurrentHashMap
1.导读 本文分析的是源码,所以至少读者要熟悉他们的接口使用,同时,对于并发,读者至少要知道 CAS、ReentrantLock、UNSAFE操作这几个基本知识,文中不会对这些知识进行介绍。Java8 用到了红黑树,不过本文不会进行展开,感兴趣的读者请自行查找相关资料。 2.hash表 在讲HashMap之前,我们先来了解下他们底层实现的一种数据结构——Hash ...原创 2018-11-30 15:39:20 · 173 阅读 · 0 评论 -
加密方式
1.Base64加密方式(可逆) Base64中的可打印字符包括字母A-Z/a-z/数组0-9/ 加号’+’斜杠’/’ 这样共有62个字符 Base64 ios7之后加入系统库 2.MD5加密 Message Digest Algorithm MD5(中文名为消息摘要算法第五版)为计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护 是计算机广泛使用的杂凑算法之一(又译摘要算法...原创 2019-02-23 12:12:57 · 199 阅读 · 0 评论 -
Java中getClassLoader().getResource()和getResource()的区别
在Java中需要加载一个文件时,使用getResource()方法进行加载,会报错 [Caused by: java.lang.NullPointerException: Location is required. 这是对.getClass().getClassLoader().getResource()和.getClass().getResource()的理解不够深入的原因。 经过查询...原创 2019-09-17 15:19:34 · 7101 阅读 · 1 评论 -
有return的情况下try catch finally的执行顺序
结论: 1、不管有没有出现异常,finally块中代码都会执行; 2、当try和catch中有return时,finally仍然会执行; 3、finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的; 4、finally中最好...转载 2019-08-06 17:13:36 · 139 阅读 · 0 评论 -
单点登录原理与简单实现
一、单系统登录机制 1、http无状态协议 web应用采用browser/server架构,http作为通信协议。http是无状态协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联,这个过程用下图说明,三次请求/响应对之间没有任何联系 但这也同时意味着,任何用户都能通过浏览器访问服务器资源,如果想保护服务器的某些资源,必须限制浏览器请求;要限制浏览器请求,必...转载 2019-04-25 09:40:55 · 133 阅读 · 0 评论 -
漫话:如何给女朋友解释什么是共享锁和排他锁
周末,我正在看电视剧,是那个小说改编的《斗破苍穹》,看的正嗨的时候,女朋友气哄哄的走过来。 我不喜欢萧炎,太花心,有那么多老婆 哈哈,喜欢萧炎的妹子给他加的是共享锁,而不...转载 2019-02-26 15:19:20 · 1161 阅读 · 0 评论 -
Java 静态内部类 与 内部类区别
静态内部类的作用:只是为了降低包的深度,方便类的使用,静态内部类适用于包含类当中,但又不依赖于外在的类,不用使用外在类的非静态属性和方法,只是为了方便管理类结构而定义。在创建静态内部类的时候,不需要外部类对象的引用。 非静态内部类有一个很大的优点:可以自由使用外部类的所有变量和方法 一、非静态内部类: 1、变量和方法不能声明为静态的。(类的编译顺序:外部类--静态方法或属性--内部类) 2、...转载 2019-02-23 12:40:48 · 183 阅读 · 0 评论 -
什么是内存溢出以及java中内存泄露5种情况的总结
内存泄漏定义(memory leak):一个不再被程序使用的对象或变量还在内存中占有存储空间。 一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,或者说,给了你一块存储int类型数据的存储空间,但是你却存储long类型的数据,那么结果就是内存不够用,此时就会报错OOM,即所谓的内...转载 2019-02-23 12:33:28 · 1322 阅读 · 0 评论 -
java面试题
Java是一个支持并发、基于类和面向对象的计算机编程语言。下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改。 代码复用。 增强代码的可靠性和灵活性。 增加代码的可理解性。 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。下面的章节我们会逐个分析这些特性。 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法...转载 2019-02-16 21:15:03 · 798 阅读 · 0 评论 -
java中的关键字 transient
先解释下Java中的对象序列化 在讨论transient之前,有必要先搞清楚Java中序列化的含义; Java中对象的序列化指的是将对象转换成以字节序列的形式来表示,这些字节序列包含了对象的数据和信息,一个序列化后的对象可以被写到数据库或文件中,也可用于网络传输,一般当我们使用缓存cache(内存空间不够有可能会本地存储到硬盘)或远程调用rpc(网络传输)的时候,经常需要让我们的实体类实现Se...转载 2018-08-04 10:27:48 · 183 阅读 · 0 评论 -
实现单用户登录的原理和实践 java
最近,公司需要对项目实现单用户登录,以下是实现的原理和具体的操作步骤。原理:每个用户登录成功(主要是登录成功的时间)的日志保存到数据库,同时把登录成功的记录(主要是登录成功的时间)保存到session里,然后在写拦截器拦截每个请求,在处理请求的同时,判断当前用户的session里的登录时间 和数据库当前最新的登录时间是否一致,如果不一致,则说明该用户在其他地方也登录了。项目简介:该套项目是java...转载 2018-06-05 17:25:03 · 1912 阅读 · 0 评论 -
Java中HashMap和TreeMap的区别深入理解
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对。HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)...转载 2018-05-28 14:11:35 · 238 阅读 · 0 评论 -
HashMap的实现原理
1.什么是hash? 将一个任意长度的二进制的值通过映射转化为一个固定的二进制值。2.什么是hash表? hash表底层数据接口其实就是一个数组,它的存储过程是首先是通过hash函数去获取数组下标,然后通过下标去存储响应的value值。3.hash函数的实现? hash函数的实现方法之一就是通过key值对小于数组的最大质数进行求模获取的值。4.hash表处理冲突的方法 h...原创 2018-03-30 15:59:54 · 141 阅读 · 0 评论 -
java类中serialversionuid 作用 是什么?举个例子说明
serialVersionUID适用于Java的序列化机制。简单来说,Java的序列化机制是通过判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体类的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常,即是InvalidCastEx转载 2017-12-05 17:34:28 · 299 阅读 · 0 评论 -
play framework 框架事务分割
框架原生事务控制 for循环事务控制原创 2017-12-01 20:56:41 · 578 阅读 · 0 评论 -
JAVA中静态块、静态变量加载顺序详解
public class test { //1.第一步,准备加载类 public static void main(String[] args) { new test(); //4.第四步,new一个类,但在new之前要处理匿名代码块 } st转载 2017-11-30 09:42:59 · 255 阅读 · 0 评论 -
java中的静态变量、静态方法与静态代码块区别
我们知道类的生命周期分为装载、连接、初始化、使用和卸载的五个过程。 其中静态代码在类的初始化阶段被初始化。而非静态代码则在类的使用阶段(也就是实例化一个类的时候)才会被初始化。 静态变量 可以将静态变量理解为类变量(与对象无关),而实例变量则属于一个特定的对象。 静态变量有两种情况: 静态变量是基本数据类型,这种情况下在类的外部不必创建该类的实例就转载 2017-11-30 09:20:07 · 6221 阅读 · 0 评论