
java
程序员大宝101
硕士、大厂技术专家、面试官。
面试辅导
技术指导
展开
-
允许跨域。
@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) { httpServletResponse.setHeader("Access-Control-Allow-Origin", httpServ...原创 2019-11-05 10:20:31 · 293 阅读 · 0 评论 -
【2018.07.29】NIO的案例
//client端的代码package com.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;impo...原创 2018-07-29 19:08:31 · 167 阅读 · 0 评论 -
【1】happens before的规则
[1]单个线程中,先执行的操作hb后发生的操作。 [2]锁的unlock hb 锁的Lock。 [3]volatile写hbvolatile读。 [4]a hb b ,b hb c ,a hb c。 [5]start hb 线程的后续操作。 [6]A线程,执行了B线程的thread.interrupt方法,hb 被中断线程的代码检测到终端时间的发生。 [7]一个对象的初始化,hb对象的...原创 2018-03-27 19:52:43 · 149 阅读 · 0 评论 -
JAVA面试题
【1】接口和抽象类的区别: (1) 接口可以多继承,抽象类只能单继承 (2) 抽象类的子类,可以不全部实现 【2】HTTP和HTTPS的主要区别 【3】 Cookie和Session的区别 【4】二叉树的分层遍历 前序中序和后序遍历 https://blog.youkuaiyun.com/apandi_/article/details/52916523 分层遍历 https://blog...原创 2018-04-01 14:56:47 · 192 阅读 · 0 评论 -
【countdownlatch】countdownlatch的原理解析
CountdownLatch的实现原理如下 设置构造函数的 【1】构造函数public Countdownlatch(int count){ if(count<0){ throw new IllegalArgumentException("count<0"); } this.sync = new Sync(count);}【2】aw...原创 2018-03-25 20:42:19 · 602 阅读 · 0 评论 -
【RPC】面试题
【1】为什么要RPC,RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据. 【2】UDP和TCP关系 https://blog.youkuaiyun.com/xiaobangkuaipao/article/details/76793702 【3】 基本类型的变...原创 2018-03-30 23:30:41 · 3382 阅读 · 0 评论 -
【1】Java并发编程的艺术
【1】volatitle:的实现原理 (1)Lock前缀指令、在多核处理器下会引发很多事情: 将当前处理器缓存行的数据刷新到系统内存中 (2)写回到内存的操作会使在其他CPU里缓存了改内存地址的数据,设置为无效。 如果对声明了volatile的变量执行写操作,JVM会向处理器发送一条Lock前缀指令。这个变量所在的缓存行的数据写回到系统内中。在多处理下,为了解决缓存一致性问题。每个处...原创 2018-03-21 10:45:24 · 142 阅读 · 0 评论 -
【AQS】asbstractQueuedSynchronizer的细说
【1】上办部分 【2】下半部分原创 2018-03-25 10:56:54 · 132 阅读 · 0 评论 -
【1】红黑树的演变过程
https://blog.youkuaiyun.com/chen_zhang_yu/article/details/52415077 写的非常好前言 红黑树,对不少人来说是个比较头疼的名字,在网上搜资料也很少有讲清楚其演变来源的,多数一上来就给你来五条定义,红啊黑啊与根节点距离相等之类的,然后就开始进行旋转、插入、删除这些操作。一通操作下来,连红色和黑色怎么来的,是什么含义,有什么作用都云里雾里的...转载 2018-03-25 08:57:42 · 320 阅读 · 1 评论 -
【2】每日一道算法题。设计包含min函数的栈。
题目:定义栈的数据结构。要求添加一个min函数,能够得到栈的最小的元素。 要求min,pop,push的时间复杂度都是O(1)。class Node{ private int data; private int minData; private Node next; public Node(int data){ this.data = dat...原创 2018-03-24 19:30:49 · 151 阅读 · 0 评论 -
【1】每日一到算法题。数组反转。
【一】解法一 public static int [] reverseArray1(int [] arra){ if(arra==null||arra.length==0){ return null; } int length = arra.length; for(int i=0;i...原创 2018-03-24 19:21:32 · 393 阅读 · 0 评论 -
【concurrenthashmap的实现原理】
【1】提供了更好的写并发能力,降低了对读一致性的要求。 允许多个修改操作并发进行,关键在于使用了锁分离技术。它使用多个锁来控制对hash表的不同部分的修改。concurrenthashmap内部使用segment来表示这些不同的部分。每个段其实都是一个晓得hashtable。他们有自己的锁。 【2】需要跨段的方法size()。containsValue(),他们可能需要锁住整张表而不仅仅是某某...原创 2018-03-24 17:12:23 · 1097 阅读 · 0 评论 -
【3】归并排序
// 合并的核心模块 private void merge(int[] array, int low, int mid, int hight) { if (low >= hight) { return; } int[] auxArray = new int[hight - low + 1]; i...原创 2018-03-29 23:25:06 · 156 阅读 · 0 评论 -
【集合】集合的关系图
https://www.cnblogs.com/jing99/p/7057245.html【1】创建一个新类的方法有哪些? 1 new 关键字 2 利用反射 Class类的newInstancce()方法 3 Constructor.newInstance() 可以传入的参数 4 clone方法 5 反序列化 6 intern()方法...原创 2018-03-24 09:57:59 · 4028 阅读 · 0 评论 -
【面试题】Java面试题
【1】i+1package 面试算法;import java.util.ArrayList;public class return返回值 { static Test b=new Test(333); public static void main(String[] args) { Integer i = Integer.MAX_VALUE; ...原创 2018-05-23 11:47:36 · 1945 阅读 · 0 评论 -
jdk1.6中,Hashmap的扩容,是不存在问题的!
以前在研究jdk源码的时候,就觉得hashmap的扩容,是没有问题的。后来一直忙于找工作,就没有实际的验证。 今天,有时间,去官网,下载了jdk。下载地址如下。...原创 2018-06-01 08:36:01 · 404 阅读 · 0 评论 -
【6】Java并发编程学习笔记之———安全性、活跃性以及性能问题
并发编程中我们需要注意的问题有很多,很庆幸前人已经帮我们总结过了,主要有三个方面,分别是:安全性问题、活跃性问题和性能问题。下面我就来一一介绍这些问题。安全性问题相信你一定听说过类似这样的描述:这个方法不是线程安全的,这个类不是线程安全的,等等。那什么是线程安全呢?其实本质上就是正确性,而正确性的含义就是程序按照我们期望的执行,不要让我们感到意外。在第一篇《可见性、原子性和有序性问题:并发编...原创 2019-08-19 08:41:03 · 244 阅读 · 0 评论 -
【5】用“等待-通知”机制优化循环等待
由上一篇文章你应该已经知道,在破坏占用且等待条件的时候,如果转出账本和转入账本不满足同时在文件架上这个条件,就用死循环的方式来循环等待,核心代码如下:**// 一次性申请转出账户和转入账户,直到成功while(!actr.apply(this, target)) ;**如果 apply() 操作耗时非常短,而且并发冲突量也不大时,这个方案还挺不错的,因为这种场景下,循环上几次或者几...原创 2019-08-04 21:43:23 · 369 阅读 · 0 评论 -
【02】Java并发编程学习笔记之——互斥锁(原子性问题解决方案)(上)
在第一篇文章中我们提到,一个或者多个操作在 CPU 执行的过程中不被中断的特性,称为“原子性”。理解这个特性有助于你分析并发编程 Bug 出现的原因,例如利用它可以分析出 long 型变量在 32 位机器上读写可能出现的诡异 Bug,明明已经把变量成功写入内存,重新读出来却不是自己写入的。那原子性问题到底该如何解决呢?你已经知道,原子性问题的源头是线程切换,如果能够禁用线程切换那不就能解...转载 2019-07-01 08:50:34 · 386 阅读 · 0 评论 -
【03】Java并发编程学习笔记之——互斥锁(原子性问题解决方案)(下)
在上一篇文章中,我们提到受保护资源和锁之间合理的关联关系应该是 N:1 的关系,也就是说可以用一把锁来保护多个资源,但是不能用多把锁来保护一个资源,并且结合文中示例,我们也重点强调了“不能用多把锁来保护一个资源”这个问题。而至于如何保护多个资源,我们今天就来聊聊。1保护没有关联关系的多个资源 在现实世...原创 2019-07-14 18:52:24 · 217 阅读 · 0 评论 -
【Java基础笔记】
1 ArrayList和Vector的区别是什么?[1]ArrayList是线程不安全的,Vector是线程安全的;[2] 需要扩容的时候,ArrayList默认变为原来的1.5倍率,Vector变为原来的两倍。[3] 构造函数来说,Vector可以设置,每次扩容的增量,但是ArrayList不可以。2ArrayList和CopyOnWriteArrayList 的区别是什么?https...原创 2019-06-27 20:19:27 · 143 阅读 · 0 评论 -
LetCode:239。滑动窗口。
1. 求一个字符串最大的子字符串。1.1 查找某个字符串的最大子字符串。子字符串:任意取出N个字符,即为字符串的字串(不一定是连续的)。1.2 比较规则两个字串比较,先从字符串第一个位置的字符,比较,哪个大,该字符串,大,如果相同,则比较下一个。直到比较出大小。如果一个字符串的长度用尽,仍未比较出大小,则长度长的字符串更大。举例如下:字符串: abecd“ed” 和“bcd”:...原创 2019-07-07 20:40:17 · 155 阅读 · 0 评论 -
[1]redis脚本Lua脚本
[1]解决redis中分布式锁,设置 过期的问题。 String key = "name"; String script = "local rs=redis.call('setnx',KEYS[1],ARGV[1]);if(rs<1) then return 'F';end;redis.call('expire',KEYS[1],tonumber(ARGV[2]...原创 2019-06-26 15:30:29 · 173 阅读 · 0 评论 -
【01】Java并发编程学习笔记之——(内存模型)
如何解决其中的可见性和有序性导致的问题,这也就引出来了今天的主 角——Java 内存模型。什么是 Java 内存模型?导致可见性的原因是缓存,导致有序性的原因是编译优化,那解决可见性、 有序性最直接的办法就是禁用缓存和编译优化,但是这样问题虽然解决了,我们程序的性 能可就堪忧了。合理的方案应该是按需禁用缓存以及编译优化。本质上可以理解为,Java 内存模型规范了 JVM 如何提供按需禁用缓...原创 2019-06-17 09:03:16 · 203 阅读 · 0 评论 -
Transizet关键字总结
文章总结:对象序列化的方式有两种:实现Serializable和Externalizable接口[1]实现Serializable接口的类,static修饰的变量,不可以被序列化,因为变量是存储在堆内存中的,因此序列化某个实例对象,并不会包含该静态变量。[2] 实现Serializable接口的类,transizet修饰的变量,不会被序列化。对于实现Externlizable接口的取值:...原创 2019-04-08 16:37:33 · 170 阅读 · 0 评论 -
【2019-04-06】Java知识点总结
【1】JVM 类加载的过程1.1 JVM把class字节码文件,加载到内存,并对数据进行校验、解析和初始化。将class文件字节码内容,加载到内存中,将静态数据结构,转换成方法区中的运行时数据结构,在堆中生成一个java.lang.Class对象,作为方法区类数据的访问入口。这个过程,需要类加载器参与。1.2 加载,连接,和初始化【1】加载阶段,JVM需要完成三件事:[1]通过类的全...原创 2019-04-08 08:15:22 · 108 阅读 · 0 评论 -
【1】dubbo学习笔记(一)
1、分布式基础理论1.1、什么是分布式系统?《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”分布式系统(distributed system)是建立在网络之上的软件系统。1.2 架构演变历程如下图:1.2.1单应用当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据...原创 2019-04-01 00:50:50 · 480 阅读 · 0 评论 -
存储引擎
【1】Mysql存储引擎介绍https://www.cnblogs.com/wangdake-qq/p/7358322.html转载 2018-11-11 10:15:23 · 112 阅读 · 0 评论 -
resclient插件如何,上传文件?
1 我们测试接口,除了上传字段以外。有时候,还需要上传文件。上传文件如何用resclient插件,上传文件?首先。打开resclient.选择。form格式2 file的名字,要跟接口中,接受的参数一致。public Result upLoadSignUpPicture(@RequestParam(value = “file”, required = false) Multi...原创 2018-11-06 19:23:01 · 1955 阅读 · 0 评论 -
【线程同步的方式,有哪几种】
【1】同步代码方法 sychronized 关键字修饰的方法 【2】同步代码块 sychronized 关键字修饰的代码块 【3】使用特殊变量域volatile实现线程同步 volatile关键字为域变量的访问提供了一种免锁机制 【4】使用重入锁实现线程同步。reentrantlock类是可冲入、互斥、实现了lock接口的锁 他与sychronized方法具有相同的基本行为和语义...原创 2018-03-23 20:06:51 · 2172 阅读 · 0 评论 -
【3】排序算法,快排序。
package paixu;public class Java { public static void main(String[] args) { int [] test = {1,4,75,6,88,6}; quickSort(test); for(int i=0;i<test.length;i++){ ...原创 2018-03-29 18:18:54 · 144 阅读 · 0 评论 -
Java中有哪些锁,区别是什么
【1】公平所和非公平所。 公平锁:是指按照申请锁的顺序来获取锁, 非公平所:线程获取锁的顺序不一定按照申请锁的顺序来的。//默认是不公平锁,传入true为公平锁,否则为非公平锁ReentrantLock reentrantLock = new ReetrantLock();【2】共享锁和独享锁 独享锁:一次只能被一个线程所访问 共享锁:线程可以被多个线程所持有。 Read...原创 2018-03-29 18:18:06 · 8607 阅读 · 0 评论 -
数字反序列输出
两种方法 第一种: Scanner sc = new Scanner(System.in); System.out.println(“请输入一个整数:”); int num=sc.nextInt(); int result=0;//存反转的数字 while(true)原创 2017-09-05 10:57:04 · 360 阅读 · 0 评论 -
Hibernate
Hibernate编程基本步骤: 1.搭建环境: (即导入hibernate相关的jar包、JDBC驱动包和准备好总配置文件) 2.编写一个POJO,一般实现java.io.Serializable接口 3.为对应POJO编写一个映射文件(*.hbm.xml) 一般与pojo放在同一包下。 ——分协议 4.在总配置文件中注册映射文件 如: 注意用/隔开 或通过Configurat原创 2017-07-26 18:03:43 · 156 阅读 · 0 评论 -
Struts-软件国际化
软件在多个软件本地化,就叫做国际化。什么叫本地化:一个软件哎某个国家或地区使用时,采用该国家或者地区的语言,数字,货币日期等习惯。 软件本地化:l10n 软件国际化:i18n。原创 2017-07-23 09:39:22 · 244 阅读 · 0 评论 -
web项目配置方式
1.新建一个javaweb项目,preferences→server→RuntimeException→add。tomocat配置上 2.右键项目→debug建立联系 3.右键→properties→java BuildPath→add_library 两个项目如何建立联系 1.项目上点击右键,Deployment_Assembly、点击add.选择原创 2017-07-09 14:40:35 · 387 阅读 · 0 评论 -
struts2——result类型
result类型: type= dispatcher class =ServletDispatcherResult 传递参数的方法:request.setAttribute()type=redirect class=ServletRedirectResult 传递参数的方法:sessiontype=redirectAction <result type="redirect原创 2017-07-16 11:29:00 · 322 阅读 · 0 评论 -
Struts2
1.企业级web框架。精简开发流程 2.优点很多 入门: 基本的开发步骤: (1)配置环境,(相关的jar包)。 (2)配置web.xml。(web部署描述文件,配置) (3)struts.xml(放在src下) (4)创建Action。可以不继承任何的类,通常继承ActionSupport。 (5)注册action. (6)创建相关的页面 (7)测试action。访问actio原创 2017-07-15 11:16:28 · 238 阅读 · 0 评论 -
JavaMail核心API和主要的编程步骤(3)
复杂邮件的编写1.复杂邮件的含义指的是:邮件的内容比之前的复杂。有单纯的文本。到现在的html内容,图片,附件。 与简单代码的区别主要在一个地方://简单邮件,设置邮件的内容message.setText("Hello Javamail!");复杂邮件复杂的多 2.设置复杂邮件内容的步骤包括 (1)创建若干个MimeBodyPart对象,并给每一个MimeBodyPart。添加内容MimeB原创 2017-06-25 17:37:38 · 384 阅读 · 0 评论 -
Filter案例(字符过滤器)
两种情况都需要配置web.xml 如果是tomcat服务其为8.0版本的字符过滤其如下所示 1. package com.rupeng.web;import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfi原创 2017-06-23 17:35:54 · 677 阅读 · 0 评论