Java核心技术分析
文章平均质量分 55
程序员面试
生命不息 学习不止
展开
-
Java 8 的Stream流那么强大,你知道它的原理吗?
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。本文会对Stream的实现原理进行剖析。转载 2023-05-24 08:47:51 · 134 阅读 · 0 评论 -
程序员面试经验分享
程序员面试经验分享原创 2021-05-26 13:13:57 · 212 阅读 · 0 评论 -
jmap -heap 命令结果分析
先用jps命令找到进程IDjmap -heap pidAttaching to process ID 3764, please wait...Debugger attached successfully.Server compiler detected.JVM version is 25.171-b11using thread-local object allo...原创 2019-12-09 08:42:31 · 750 阅读 · 0 评论 -
Java后端面经总结:拿下蚂蚁金服美团头条 offer 秘诀
笔者在面过 猿辅导,去哪儿,旷视, 陌陌,头条, 阿里, 快手, 美团, 腾讯之后,除了收获一大堆面试问题,还思考到如何成为面试官眼中的”爱技术,爱思考,靠谱,有潜力候选人的”一些”套路”.面试问题(Java 后端)猿辅导1.八皇后问题2.求二叉树的最长距离(任意两个节点的路径 中最长的)3.lru 算法的实现4.设计一个数据结构 满足 put 和 getMedium(中位数)两...转载 2019-10-15 16:44:22 · 391 阅读 · 0 评论 -
java核心技术-目录
一、Java基础二、常用算法三、数据结构四、设计模式五、数据库六、常用框架七、项目架构 --技术选型 --效率提升 --分布式 --服务化 --等等八、项目管理 --开发模式(迭代、原型、瀑布...) --持续集成 --人力、资源、成本管理原创 2016-05-10 15:50:33 · 1329 阅读 · 0 评论 -
【多线程】多线程同步之synchronized和Lock
1、synchronized同步关键字 这里涉及到多个线程对共享资源进行处理,这里就必须要给线程“排队”,使用的关键字是synchronized(同步),在程序中,给对共享资源进行处理的代码部分(整个方法或代码块)添加此关键字。相当于给代码块加锁,取得钥匙的线程对资源操作,完成后将钥匙交予其他线程,这保证了同一个资源某一时间内只有一个线程可以对其修改等操作。 public void func(...原创 2016-07-19 14:54:49 · 429 阅读 · 0 评论 -
【多线程】java 两种创建线程的方法
一. 两种创建线程的方法1,继承Thread类,重写其中的run()方法(1)继承class A extends Thread{public void run(){//线程任务逻辑}}(2)在main()中声明线程Thread t1 = new A();t1.start();注:也可以用内部类的方式直接创建线程Thread t1 = new Thread(...原创 2016-07-22 08:15:14 · 328 阅读 · 0 评论 -
【多线程】 java线程实例(测试阻塞队列&&线程池)
<span style="font-size:14px;">//测试阻塞队列package com.moshenglv.dms.Demo;import java.util.concurrent.BlockingQueue;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.Ti...原创 2016-07-22 08:00:03 · 902 阅读 · 0 评论 -
【多线程】java多线程知识点总结
写在前面:这篇文章是我最近看15个顶级Java多线程面试题及回答这篇帖子,根据文中所列问题在网上找的答案汇总。或许某些解答不尽如人意,欢迎大家来补充和指正。另外感谢这篇帖子的翻译者赵峰以及所有在网络上分享问题答案的朋友们~~ 1. 有T1、T2、T3三个线程,如何怎样保证T2在T1执行完后执行,T3在T2执行完后执行?使用join方法。join方法的功能是使异步执行的...转载 2016-07-18 17:20:34 · 2917 阅读 · 0 评论 -
【java日志】java.util.logging.Logger使用详解
java.util.logging.Logger不是什么新鲜东西了,1.4就有了,可是因为log4j的存在,这个logger一直沉默着,其实在一些测试性的代码中,jdk自带的logger比log4j更方便。 一、创建Logger对象 static Logger getLogger(String name) 为指定子系统查找或创建一个 logg原创 2016-07-22 08:05:01 · 1251 阅读 · 0 评论 -
【java类与对象】Java中创建对象的5种方式
欢迎关注公众号:作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如Spring去创建对象。然而这里有很多创建对象的方法,我们会在这篇文章中学到。Java中有5种创建对象的方式,下面给出它们的例子还有它们的字节码使用new关键字 } → 调用了构造函数 使用Class类的newInstance方法 } → 调用了构造函数 使用Const...原创 2016-07-21 19:13:25 · 4092 阅读 · 0 评论 -
【理解JVM】 深入分析Java ClassLoader原理
一、什么是ClassLoader? 大家都知道,当我们写好一个Java程序之后,不是管是CS还是BS应用,都是由若干个.class文件组织而成的一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文件当中,所以经常要从这个class文件中要调用另外一个class文件中的方法,如果另外一个文...转载 2016-07-21 15:15:17 · 426 阅读 · 0 评论 -
【多线程】BlockingQueue详解
前言: 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据...原创 2016-07-14 10:41:10 · 2694 阅读 · 0 评论 -
【理解JVM】JVM内存管理(2)
1 JVM运行时数据区域详解Java虚拟机会将内存分为几个不同的管理区,这些区域各自有各自的用途,根据不同的特点,承担不同的任务以及在垃圾回收时运用不同的算法。总体分为下面几个部分:程序计数器(Program Counter Register)、JVM虚拟机栈(JVM Stacks)、本地方法栈(Native Method Stacks)、堆(Heap)、方法区(Method原创 2016-07-01 21:39:27 · 346 阅读 · 0 评论 -
【理解JVM】JVM内存管理(1)
1.1 内存结构 1、两个子系统:Class loader子系统和Execution engine(执行引擎)子系统(1)Class loader子系统根据给定的全限定名类名(如java.lang.Object)来装载class文件的内容到Runtime data area中的method area(方法区域)(2)Execution engine子系统执行classes中...原创 2016-07-01 21:13:41 · 399 阅读 · 0 评论 -
【java基础】Hashcode与equals
======================================================================================================1.如果两个对象相等,则hashcode()必须相等。2.如果两个对象相等,a.equals(b)==b.equals(a)==true3.如果两个对象有相同的hashcode值...原创 2015-10-20 09:02:53 · 511 阅读 · 0 评论 -
【java基础】JAVA常用正则表达式
匹配中文字符的正则表达式: [u4e00-u9fa5] 评注:匹配中文还真是个头疼的事,有了这个表达式就好办了 匹配双字节字符(包括汉字在内):[^x00-xff] 评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) 匹配空白行的正则表达式:ns*r 评注:可以用来删除空白行 匹配HTML标记的正则表达式:< (S*?)[^...原创 2016-07-24 20:43:02 · 309 阅读 · 0 评论 -
【理解JVM】JVM内存模型
JVM定义了若干个程序执行期间使用的数据区域。这个区域里的一些数据在JVM启动的时候创建,在JVM退出的时候销毁。而其他的数据依赖于每一个线程,在线程创建时创建,在线程退出时销毁。 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。由于Java 虚拟机的多线程是通过线...转载 2016-07-25 20:32:58 · 3263 阅读 · 0 评论 -
【多线程】博客
http://blog.csdn.net/zzp_403184692/article/category/1245847http://blog.csdn.net/mmc_maodun/article/category/1773509http://blog.csdn.net/luoyuyou/article/category/2175315原创 2016-07-28 09:53:48 · 281 阅读 · 0 评论 -
【Java基础】Java正则表达式入门
一:什么是正则表达式 1.定义:正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。 2.用途:字符串匹配(字符匹配)字符串查找字符串替换字符串分割原创 2016-07-29 10:28:59 · 342 阅读 · 0 评论 -
【Java基础】Java:按值传递还是按引用传递详细解说
前天在做系统的时候被Java中参数传递问题卡了一下,回头查阅了相关的资料,对参数传递问题有了新的了解和掌握,但是有个问题感觉还是很模糊,就是Java中到底是否只存在值传递,因为在查阅资料时,经常看到有人说Java只有值传递,但有人说既有值传递,也有引用传递,对于两个观点个人觉得应该是站的角度不同而得出两个不同的说法,其实两个说法其中的原理是一样的,只要咱们懂得其中的原理,那么至于叫什么也就无所谓了原创 2016-07-30 22:13:14 · 540 阅读 · 1 评论 -
【多线程】java.util.concurrent.Exchanger应用范例与原理浅析
一、简介 Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据。在本文中我将采取由浅入深的方式来介绍分析这个工具类。首先我们来看看官方的api文档中的叙述:A synchronization point at which threads can pair and swap elements within pairs. Each thread pr原创 2016-07-30 22:14:08 · 554 阅读 · 0 评论 -
【Java基础】比较运算符compareTo()、equals()、==之间的区别与应用总结
1、== 和 equals的区别: ==主要是两个变量值的比较,返回值为true 或者是false。对于普通变量,如:int a=10; int b= 10; a==b,返回为 true。而对于下面情况:String a=new String("abc");String b=new String("a原创 2016-07-28 09:50:22 · 588 阅读 · 0 评论 -
【多线程】Java线程及多线程技术及应用
第6 章 Java线程及多线程技术及应用6.1线程基本概念1、进程和线程的基础知识l 进程:运行中的应用程序称为进程,拥有系统资源(cpu、内存)l 线程:进程中的一段代码,一个进程中可以哦有多段代码。本身不拥有资源(共享所在进程的资源)在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程。区别: 1、是否占有资源问题 2、创建或撤销一个进...原创 2016-07-31 15:07:27 · 874 阅读 · 0 评论 -
【JAVA基础】jdk环境变量配置
jdk环境变量配置:(1) 右击“我的电脑”----- “高级”----- “环境变量”(2) 在系统变量里新建JAVA_HOME变量,变量值为C:\Program Files\Java\jdk1.7.0_15(请根据自己的实际值填写)(3) 新建classpath变量,变量值为:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(4) 在path...原创 2016-08-04 17:34:35 · 391 阅读 · 0 评论 -
【理解JVM】JVM系列文章目录
想要深入了解JVM就必须从以下几个方面出发:1、JVM内存管理机制2、JVM垃圾回收机制3、JVM编译原理4、JVM类加载机制5、JVM字节码执行机制6、JVM调优(优化配置、高效并发)原创 2016-08-03 10:21:01 · 620 阅读 · 0 评论 -
【JAVA I/O】JAVA I/O类库基本架构图
11原创 2016-09-10 10:03:04 · 556 阅读 · 0 评论 -
java内部类、静态内部类 小结
在一个类中创建另外一个类,叫做成员内部类。这个成员内部类可以静态的(利用static关键字修饰),也可以是非静态的。由于静态的内部类在定义、使用的时候会有种种的限制。所以在实际工作中用到的并不多。 在开发过程中,内部类中使用的最多的还是非静态地成员内部类。不过在特定的情况下,静态内部类也能够发挥其独特的作用。 一、静态内部类的使用目的。 在定义内部类的时候,可以在其原创 2016-08-27 17:44:25 · 419 阅读 · 0 评论 -
【ThreadLocal】深入JDK源码之ThreadLocal类
学习JDK中的类,首先看下JDK API对此类的描述,描述如下:该类提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal其实就是一个工具类,用来操作线程局部变量,ThreadLocal 实例通常是类中的 private static 字...原创 2016-10-09 22:21:03 · 5351 阅读 · 1 评论 -
【JAVA8】Java Lambda表达式入门
翻译日期: 2014年4月27日翻译人员: 铁锚简介(译者注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。本人建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘.)Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允翻译 2016-09-20 13:43:10 · 518 阅读 · 0 评论 -
【String】String与StringBuffer
在java中有3个类来负责字符的操作。 1.Character 是进行单个字符操作的, 2.String 对一串字符进行操作。不可变类。 3.StringBuffer 也是对一串字符进行操作,但是可变类。 String: 是对象不是原始类型. 为不可变对象,一旦被创建,就不能修改它的值. 对于已经存在的String对象的修改都是重新创建一个新的对象,然后把原创 2016-11-01 11:28:03 · 263 阅读 · 0 评论 -
【深入理解JAVA多线程】(4)Java多线程之原子性、可见性、有序性
Java内存模型是围绕着并发过程中如何处理原子性、可见性、有序性这三个特征来建立的,下面是这三个特性的实现原理:1.原子性(Atomicity)由Java内存模型来直接保证的原子性变量操作包括read、load、use、assign、store和write六个,大致可以认为基础数据类型的访问和读写是具备原子性的。如果应用场景需要一个更大范围的原子性保证,Java内存模型还提供了lock和u...原创 2016-12-07 15:15:24 · 592 阅读 · 0 评论 -
【深入分析Java多线程】(6)线程间通信之wait()、notify()、join()
Wait-Notify场景典型的Wait-Notify场景一般与以下两个内容相关:1. 状态变量(State Variable)当线程需要wait的时候,总是因为一些条件得不到满足导致的。例如往队列里填充数据,当队列元素已经满时,线程就需要wait停止运行。当队列元素有空缺时,再继续自己的执行。2. 条件断言(Condition Predicate)当线程确定是否进入wait或...原创 2016-12-08 20:21:18 · 333 阅读 · 0 评论 -
【深入分析Java多线程】(5)synchronized和volatile分析
一,volatile关键字的可见性要想理解volatile关键字,得先了解下JAVA的内存模型,Java内存模型的抽象示意图如下: 从图中可以看出:①每个线程都有一个自己的本地内存空间--线程栈空间???线程执行时,先把变量从主内存读取到线程自己的本地内存空间,然后再对该变量进行操作②对该变量操作完后,在某个时间再把变量刷新回主内存因此,就存在内存可见性问题,看一个示例...原创 2016-12-08 20:31:13 · 334 阅读 · 0 评论 -
【深入分析JAVA多线程】(1)详解进程、线程以及线程安全
进程(process)和线程(thread)是操作系统的基本概念,但是它们比较抽象,不容易掌握。最近,我读到一篇材料,发现有一个很好的类比,可以把它们解释地清晰易懂。1.计算机的核心是CPU,它承担了所有的计算任务。它就像一座工厂,时刻在运行。2.假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。原创 2016-12-03 10:41:10 · 370 阅读 · 0 评论 -
【深入分析Java多线程】(3)Java多线程之内存模型
Java 内存模型Java 内存模型规范了 Java 虚拟机与计算机内存是如何协同工作的。Java 虚拟机是一个完整的计算机的一个模型,因此这个模型自然也包含一个内存模型——又称为 Java 内存模型。如果你想设计表现良好的并发程序,理解 Java 内存模型是非常重要的。Java 内存模型规定了如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。原始...原创 2016-12-04 10:26:29 · 343 阅读 · 0 评论 -
【深入Java泛型】(1)java泛型-基础
泛型的由来在编写程序时,可能会有这样的需求:容器类,比如java中常见的list等。为了使容器可以保存多种类型的数据,需要编写多种容器类,每一个容器类中规定好了可以操作的数据类型。此时可能会有IntList、LongList、StringList、XXXList等多个List容器类,但是容器类内部的各个方法,除了add、remove、get方法操作的数据类型不同意外,几乎全部相同。原创 2016-12-23 10:30:24 · 399 阅读 · 0 评论 -
【深入Java泛型】(2)java泛型-类型擦除
一、概述 Java泛型在使用过程有诸多的问题,如不存在List<String>.class, List<Integer>不能赋值给List<Number>(不可协变),奇怪的ClassCastException等。 正确的使用Java泛型需要深入的了解Java的一些概念,如协变,桥接方法,以及这篇笔记记录的类型擦除。Java泛型的处理几乎都在编译器...原创 2016-12-23 22:32:01 · 418 阅读 · 0 评论 -
【深入Java泛型】(3)java泛型-桥接方法
Bridge Method直译过来就是桥接方法。从字面意思可以很容易的理解出这个方法是在连接两个东西。那到底是在连接什么呢?废话少说,上代码: abstract class A<T> { abstract T get(T t); } class B extends A<String> { @Override ...原创 2016-12-23 22:33:16 · 1433 阅读 · 2 评论 -
【深入Java泛型】(4)Java泛型-协变、逆变
很多小伙伴都仅仅知道泛型是限制类型的,其他的就不太清楚了,下面给大家详细讲解一下泛型,以及协变和逆变。泛型作用:1.限制类型;2.提高代码规划,减少沟通成本,一看就知道集合中是什么东西。泛型声明:在声明类的时候,在类的后面<泛型名称>泛型定义用法:类型<限制类型>泛型好处:1.从数组中取出来,可以使用点语法;2.给数组添加元素,有提示。很...原创 2016-12-23 22:34:07 · 966 阅读 · 0 评论