
java
Java_No2
这个作者很懒,什么都没留下…
展开
-
Java虚拟机必学之四大知识要点
作为一位 Java 程序员,在尽情享受 Java 虚拟机带来好处的同时,我们还应该去了解和思考“这些技术特性是如何实现的”,去了解最底层的原理。只有熟悉 JVM,你才能在遇到 OutOfMemory 等异常时,不会束手无策,不会一脸懵逼地上网找解决办法,最后就算改了几个启动参数解决了问题,也还是云里雾里。这次,我会从我专栏里提取了学习 Java 虚拟机的 X 大知识要点,助力大家深入理解 JVM...原创 2019-06-15 21:52:35 · 299 阅读 · 0 评论 -
Java异常处理最佳实践及陷阱防范
前言不管在我们的工作还是生活中,总会出现各种“错误”,各种突发的“异常”。无论我们做了多少准备,多少测试,这些异常总会在某个时间点出现,如果处理不当或是不及时,往往还会导致其他新的问题出现。所以我们要时刻注意这些陷阱以及需要一套“最佳实践”来建立起一个完善的异常处理机制。正文异常分类首先,这里我画了一个异常分类的结构图。在JDK中,Throwable是所有异常的父类,其下分为”Erro...原创 2019-06-14 21:21:14 · 303 阅读 · 0 评论 -
如何提高使用Java反射的效率?
难道反射真的很慢?那跟我们平时正常创建对象调用方法比慢多少? 估计很多人都没去测试过,只是“道听途说”。下面我们就直接通过一些测试用例来直观的感受一下“反射”。前言在我们平时的工作或者面试中,都会经常遇到“反射”这个知识点,通过“反射”我们可以动态的获取到对象的信息以及灵活的调用对象方法等,但是在使用的同时又伴随着另一种声音的出现,那就是“反射”很慢,要少用。难道反射真的很慢?那跟我们平时...原创 2019-06-14 21:17:08 · 487 阅读 · 0 评论 -
java写入文件的几种方法分享
这篇文章主要介绍了java写入文件的几种方法,需要的朋友可以参考下一、FileWritter写入文件FileWritter, 字符流写入字符到文件。默认情况下,它会使用新的内容取代所有现有的内容,然而,当指定一个true (布尔)值作为FileWritter构造函数的第二个参数,它会保留现有的内容,并追加新内容在文件的末尾。替换所有现有的内容与新的内容。new FileWriter(f...原创 2019-06-14 21:15:26 · 3289 阅读 · 0 评论 -
Java和操作系统交互细节
结合 CPU 理解一行 Java 代码是怎么执行的根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器、控制器、存储设备,以及输入输出设备,如下图所示。我们先来分析 CPU 的工作原理,现代 CPU 芯片中大都集成了,控制单元,运算单元,存储单元。控制单元是 CPU 的控制中心, CPU 需要通过它才知道下一步做什么,也就是执行什么指令,控制单元又包含:指令寄存器(IR ),指...原创 2019-06-14 21:11:02 · 352 阅读 · 0 评论 -
Java对象在内存的结构
一、内存布局对象在内存中存储的结构由三部分组成:对象头、实例数据、对齐填充。对象头MarkWord(标记字段) :哈希码、分代年龄、锁标志位、偏向线程ID、偏向时间戳等信息。Mark Word被设计成了一个非固定的数据结构以便在极小的空间内存储尽量多的信息,它会根据对象的状态复用自己的存储空间。例外:如果是数组的话,还需要有一块区域存放数组大小,因为没办法从元数据确认数组大小,所以要存...原创 2019-06-14 21:10:01 · 314 阅读 · 0 评论 -
Java并发 -- 线程生命周期
1. 初始状态线程已经被创建,但还不允许分配CPU执行该状态属于 编程语言 所特有,仅仅在编程语言层面被创建,在操作系统层面,真正的线程还没有创建2. 可运行状态线程可以分配CPU执行,该状态下真正的操作系统线程已经被创建3. 运行状态当有空闲的CPU时,操作系统会将其分配给处于 可运行状态 的线程,被分配到CPU的线程的状态就转换为 运行状态休眠状态处于 运行状态 的...原创 2019-06-14 21:09:04 · 230 阅读 · 0 评论 -
一线互联网常见的14个Java面试题,你颤抖了吗程序员
跳槽不算频繁,但参加过不少面试(电话面试、face to face面试),面过大/小公司、互联网/传统软件公司,面糊过(眼高手低,缺乏实战经验,挂掉),也面过人,所幸未因失败而气馁,在此过程中不断查缺补漏,养成了踏实、追本溯源、持续改进的习惯,特此将自己经历过、构思过的一些面试题记录下来,如果答案有问题,欢迎拍砖讨论,希望能对找工作或者感兴趣的同学有所帮助,陆续整理中。一、 synchroniz...原创 2019-06-14 21:08:03 · 236 阅读 · 0 评论 -
面试这样回答Java调优,至少加1000块!!!
Java 应用性能优化是一个老生常谈的话题,典型的性能问题如页面响应慢、接口超时,服务器负载高、并发数低,数据库频繁死锁等。尤其是在“糙快猛”的互联网开发模式大行其道的今天,随着系统访问量的日益增加和代码的臃肿,各种性能问题开始纷至沓来。Java 应用性能的瓶颈点非常多,比如磁盘、内存、网络 I/O 等系统因素,Java 应用代码,JVM GC,数据库,缓存等。笔者根据个人经验,将 Java ...原创 2019-06-14 16:56:43 · 325 阅读 · 0 评论 -
来自一位架构师的分享,学习Java多线程的一些总结
Java多线程的应用复杂性之如jvm有限的几个内存方面的操作和规范,就像无数纷繁复杂的应用逻辑建立在有限的指令集上。如何写出线程安全的程序,有各种各样需要遵循的规则,如果硬是去记忆这些写法或者规则,就事倍功半了,最好是先学习原理,抓住问题的主干,再拓展细节,这也是大家公认的学习某种技术的方式。对于多线程的问题,java使用java内存模型 JMM来保证多个线程可以有效地,正确地工作。学习...原创 2019-06-14 16:55:07 · 263 阅读 · 0 评论 -
如何从 Java 8 升级到 Java 12,升级收益及问题处理技巧
核心要点从 Java 8 之后,Java 引入了很多有用的新语言特性,以及新工具和性能改善(尤其是垃圾收集相关的优化)。在选择升级时,我们所面临的选择是升级到最新的 Java(12)并准备每六个月升级一次,还是升级到最新的 LTS(11)版本,这样能够给自己三年的时间再去考虑下一次升级;不要忽略编译器警告。在现代 Java 领域中,废弃的功能要被更严肃地对待,Java 10 和 Java ...原创 2019-06-13 21:30:59 · 3243 阅读 · 0 评论 -
如何做高可用的架构设计?
定义目标既然我们的目标是做到高可用,那么我们就有必要先明确清楚高可用的含义,并通过拆解目标,让目标可以被量化。按照我的理解,可以将目标按照以下三条进行拆解:1. 保持业务高稳定性系统稳定性是高可用的根本目的,通俗的说,系统能持续可用,不会无故宕机,在高压下仍然能正常工作。2. 支持快速定位故障从实际工程的角度看,不出故障的服务是不存在的,所以出了故障要能够快速发现和定位,在外部用户发现前...原创 2019-06-13 21:30:12 · 709 阅读 · 0 评论 -
Java面试题:类加载器
1. Java类加载器Java源代码.java文件通过编译成字节码.class文件后,需要被加载到Java虚拟机的内存空间中使用,这个过程就是类加载。类加载依靠的是Java类加载器Java类加载器是Java运行时环境的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载的,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件的位置与文件系...原创 2019-06-13 21:17:40 · 457 阅读 · 0 评论 -
高性能Java代码的最佳实践
介绍在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法。我们首先将介绍如何定义可度量的性能指标,然后看看有哪些工具可以用来度量和监控应用程序性能,以及确定性能瓶颈。我们还将看到一些常见的Java代码优化方法以及最佳编码实践。最后,我们将看看用于提升Java应用程序性能的JVM调优技巧和架构调整。请注意,性能优化是一个很宽泛的话题,而本文只是对JVM探索的一个起点。性能指标在...原创 2019-06-13 21:16:32 · 392 阅读 · 0 评论 -
面试京东Java架构师,竟然被问这些题,学到了!
前言其实收到jd的面试邀请的时候,我真心有点小激动。因为在地理位置上,jd应该是最合适我也是最想去的。但是我在看到方向的时候其实心里有很多的问题,也做好了被拒的准备。面试过程及感受因为是开车去,所以到亦庄的时候第一个问题是找车位,但是京东周边的马路上是基本不可能找到的了,还看到一个司机因为倒车慢了一点,被另外的小车司机迅速停入,吵吵了半天。最后在一个角落找到一个停车场,需要预约码才能停,门口...原创 2019-06-13 21:09:22 · 955 阅读 · 1 评论 -
15款Java程序员必备的开发工具
如果你是一名Web开发人员,那么用膝盖想也知道你的职业生涯大部分将使用Java而度过。这是一款商业级的编程语言,我们没有办法不接触它。对于Java,有两种截然不同的观点:一种认为Java是最简单功能最强大的编程语言之一,另一种则表示这种编程语言既难用又复杂。下面这些工具或许功能和作用不同,但是有着一个共同的主旨,那就是——它们都是为了给Java编码和开发提供卓越的支持。1. JDK(Jav...原创 2019-06-13 21:01:41 · 1357 阅读 · 0 评论 -
关于Netty我们都需要知道什么?
1.BIO、NIO和AIO的区别?BIO:一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。伪异步IO:将请求连接放入线程池,一对多,但线程还是很宝贵的资源。NIO:一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。AIO:一个有效请求一个线程,客户端的I/O请求都是由...原创 2019-06-13 21:00:43 · 251 阅读 · 0 评论 -
Java学习总结——多线程编程
Java多线程编程一、创建线程的方法一:继承:extends Thread 重写run()方法举个栗子原创 2019-06-13 20:39:18 · 205 阅读 · 0 评论 -
彻底理解Spring容器和应用上下文
有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助了,就给Spring说,我想要个对象——于是Spring就很贴心的给你个对象。听起来似乎很简单,使用起来也不难,但是如果仅仅是这样的拿来主义,倒也洒脱,不用费什么脑子。。。可是,你就真的不关心,Spring是从哪里把对象给你的吗?如果...原创 2019-06-13 16:03:28 · 210 阅读 · 0 评论 -
Java多线程-Callable和Future
Callable和Future出现的原因创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执...原创 2019-06-12 21:36:17 · 203 阅读 · 0 评论 -
Java多线程傻瓜入门介绍
现代计算机能够同时执行多个操作。在硬件改进和更智能的操作系统的支持下,多个操作的功能使您的程序在执行速度和响应速度方面运行得更快。编写利用这种功能的软件既迷人又棘手:它要求您了解计算机引擎盖下发生的情况。进程和线程:以正确的方式命名现代操作系统可以同时运行多个程序。这就是为什么您可以在浏览器(程序)中阅读本文,同时在您的媒体播放器(另一个程序)上听音乐。每个程序都被称为正在执行的进程。操作系...原创 2019-06-12 21:35:31 · 339 阅读 · 0 评论 -
架构师:每月最不愿给java程序员们做讲座了!总监要求,没办法!
在一些互联网公司,一些技术部门,为了提高整体团队的技术实力,公司会采取各种个样的方式与办法,比如从行业内找一些技术大牛来给员工们来一个技术讲座,有的讲座的确干货满满,的确让程序员们受益匪浅,特别是思想上感悟,能提少一些层次,当然请一些技术大牛肯定也是需要成本的,公司采取更多的方式是,让内部员工之间相互技术分享的活动,近期,一名架构师网友就分享了关于他的一些情况。据这名架构师网友说,他们公司用的...原创 2019-06-12 20:43:58 · 518 阅读 · 0 评论 -
论JVM爆炸的几种姿势及自救方法
前言如今不管是在面试还是在我们的工作中,OOM总是不断的出现在我们的视野中,所以我们有必要去了解一下导致OOM的原因以及一些基本的调整方法,大家可以通过下面的事例来了解一下什么样的代码会导致OOM,帮助我们以后在工作中能够通过异常信息来判断是JVM里面哪个区域出现了问题。先介绍一下笔者的相关编码环境。jdk:java version “1.8.0_121”ide:IntelliJ ...原创 2019-06-12 20:41:50 · 149 阅读 · 0 评论 -
JVM 优化
JVM优化配置OOM这 个缩写就是Java程序开发过程中让人最头痛的问题:Out of Memory。在很多开发人员的开发过程中,或多或少的都会遇到这类问题,这类问题定位比较困难,往往需要根据经验来判断可能出现问题的代码。原因主要是 两个:对象没有被释放(多种情况引起,往往是比较隐蔽的引用导致被Hold而无法被回收)。另一种就是真的Memory不够用了,需要增加JVM的 Heap来满足应用程序的...原创 2019-06-12 20:41:02 · 158 阅读 · 0 评论 -
Java 枚举 switch的用法
因有个判断需要处理不同系统类型跳转不同 系统。 考虑用switch + 枚举的方式。 具体使用案例如下:package com.b2b.common.constant; import com.base.utils.base.StringUtils; /** * 系统类型枚举 * @author shijing */public enum SystemType {...原创 2019-06-12 20:40:08 · 295 阅读 · 0 评论 -
Netty 简单样例分析
Netty 是JBoss旗下的io传输的框架,他利用java里面的nio来实现高效,稳定的io传输。作为io传输,就会有client和server,下面我们看看用netty怎样写client和serverClient:需要做的事情:配置client启动类ClientBootstrap bootstrap = new ClientBootstrap(…)根据不同的协议或者模式为c...原创 2019-06-12 20:39:06 · 119 阅读 · 0 评论 -
跨域问题与SpringBoot解决方案
什么是跨域?定义:浏览器从一个域名的网页取请求另一个域名下的东西。通俗点说,浏览器直接从A域访问B域中的资源是不被允许的,如果想要访问,就需要进行一步操作,这操作就叫“跨域”。例如,你从百度的页面,点击一个按钮,请求了新浪的一个接口,这就进行了跨域。不单单只有域名不同就是跨域,域名、端口、协议其一不同就是不同的域,请求资源需要跨域。为什么要跨域?为什么需要跨域,而不直接访问其他域下的资源呢?...原创 2019-06-12 20:23:28 · 4127 阅读 · 3 评论 -
谈谈我们为什么要前后端分离
随着不同终端的兴起,对开发人员的要求越来越高,纯浏览器端的响应式已经不能满足用户体验的高要求,我们往往需要针对不同的终端开发定制的版本,为了提升开发效率,前后端分离的需求越来越被重视,前端主要负责页面的展现和交互逻辑,后端主要负责业务和数据接口,同一份数据接口,我们可以定制开发多个版本。前后端不分离:在之前的开发方法,php代码写在HTML中,不存在纯粹的PHP文件和HTML文件,这就是前后端...原创 2019-06-12 14:58:52 · 355 阅读 · 0 评论 -
Java 面试:投行的 15 个多线程和并发面试题
多线程和并发问题已成为各种 Java 面试中必不可少的一部分。如果你准备参加投行的 Java 开发岗位面试,比如巴克莱银行(Barclays)、花旗银行(Citibank)、摩根史坦利投资公司(Morgan Stanley),你会遇到很多有关多线程的面试题。多线程和并发是投行面试的热门知识点,尤其是在面试有关电子交易开发工作时,他们喜欢用棘手的 Java 线程面试题轰炸面试者。他们希望确保面试者对...原创 2019-06-12 14:50:53 · 282 阅读 · 0 评论 -
Java后端开发三年,你不得不了解的JVM
JAVA程序员,三年是个坎,如果过了三年你还没有去研究JVM的话,那么你这个程序员只能是板砖的工具了。下面来个JVM的解析可好?JVM是Java Virtual Machine(Java虚拟机)的缩写,也就是指的JVM虚拟机,属于是一种虚构出来的计算机,在我们实际的电脑上来进行模拟各种计算机的功能的这么个东西。因为有了JVM的存在,搞JAVA的不再需要去关心什么时候去释放内存,也不会像C++程...原创 2019-06-06 20:50:02 · 248 阅读 · 0 评论 -
Netty 简单样例分析
Netty 是JBoss旗下的io传输的框架,他利用java里面的nio来实现高效,稳定的io传输。作为io传输,就会有client和server,下面我们看看用netty怎样写client和serverClient:需要做的事情:配置client启动类ClientBootstrap bootstrap = new ClientBootstrap(…)根据不同的协议或者模式为c...原创 2019-06-05 21:50:03 · 257 阅读 · 0 评论 -
Java+Netty实现的RESTful框架--netty-rest-server
在工作中用Netty做了几个服务,感觉Netty做出来的程序性能好,资源占用少,但是实现Http服务比较麻烦,于是就参考Spring MVC的注解基于Netty实现了一个轻量级的RESTful框架。该框架提供了控制器注解、全局异常控制器、拦截器等功能。注解名称参考了Spring MVC,编译理解和记忆,主要包括如下注解:@RestController@RequestMapping@Ge...原创 2019-06-05 21:47:47 · 462 阅读 · 0 评论 -
Netty使用实战
一、Netty简介从Java1.4提供了NIO使开发者可以使用Java编写高性能的服务端程序,但使用原生的NIO API就像Linux C中网络编程一样,还是需要做IO处理、协议处理等低层次工作。所以,就像C服务端程序大量使用libevent作为网络应用框架一样,Java社区也不断涌现出基于NIO的网络应用框架。在这其中,Jboss出品的Netty就是个中翘楚。Netty是个异步的事件驱动网...原创 2019-06-05 21:44:40 · 473 阅读 · 0 评论 -
JAVA多线程笔试题
一、题目内容二、我的答案利用了线程池、考虑了超时处理、不知道这样写是否还有其他问题,或者更好更优的解决方案?import java.util.;import java.util.concurrent.;public class Main {public static void main(String[] args) { List<String>...原创 2019-06-05 21:43:27 · 290 阅读 · 0 评论 -
Java多线程的几种写法
Java多线程的在开发中用到的很多,简单总结一下几种写法,分别是继承Thread方法,实现Runnable接口,实现Callable接口;继承Thread方法class TestThread extends Thread{ String name; public TestThread(String name){ this.name=name; } ...原创 2019-06-05 21:39:39 · 4972 阅读 · 0 评论 -
JAVA:一篇文章理清多态
很多人总是喜欢,或者说错误地将JAVA中的多态理解得很复杂,最常见的错误说法就是所谓“方法的多态”,他们会给出类似下面的例子来佐证“多态是指方法的多态”://Enginner和Mechanic是Employee的子类,构造函数参数均为月薪salaryEmployee a=new Enginner(100);Employee b=new Mechanic(100);//getAnnualS...原创 2019-06-05 21:38:55 · 176 阅读 · 0 评论 -
2年java,蚂蚁一面,卒
其实我一个都没答上来。并不是因为我笨,是因为我不会。在大扰的帮助下,现在我会了,求求你再给我一个机会。TreeSet/HashSet 区别顾名思义,首先是结构上的不同1、TreeSet背后的结构是TreeMap,也就是红黑树,能够实现自动排序。它通过equals方法或者compareTo方法进行内容的比较。2、HashSet背后是HashMap,key是无序的,只能做外部排序。既然是Has...原创 2019-06-05 21:34:30 · 317 阅读 · 0 评论 -
整整 Java 线程池
整整 Java 线程池用官方文档来说,线程池解决了两个问题: 一是在执行大量的异步任务时,因为线程池减少了任务开始前的准备工作,如频繁创建线程,启动线程等工作,提升了性能表现;二是提供了一种绑定资源和管理资源的途径,可以进行一些基础的统计分析,比如已经完成的任务数量等。ExecutorService接口,继承自 Executor,通过 execute 方法执行 Runnable 任务。Exe...原创 2019-06-05 19:12:43 · 208 阅读 · 0 评论 -
Java内部类总结
Java内部类总结Java内部类其实在J2EE编程中使用较少,不过在窗口应用编程中特别常见,主要用来事件的处理。其实,做非GUI编程,内部类完全可以不用。内部类的声明、访问控制等于外部类有所不同,要灵活使用内部类来编写程序,还是有相当难度的,Java发明了这种难懂的玩意儿,在其他语言中是没有的,但是在Java中,内部类也相当的重要,尤其做GUI开发时候,事件的响应处理全靠内部类了。内部类所做...原创 2019-06-04 21:35:11 · 187 阅读 · 0 评论 -
系统学习Java高并发
Java服务端或者后端需要大量的高并发计算,所以高并发在JAVA服务端或者后端编程中显的格外重要了。首先需要有几个概念:1. 同步和异步同步异步是来形容方法的一次调用的,同步必须等等方法调用结束后才可以继续后续的操作,而异步方法调用就会返回(真正的执行一般在另外一个线程中)就可以继续后续操作了。2. 并发和并行这两个概念都是表示2个或者多个任务一起执行,而并发侧重的是多任务交替执行,就是...原创 2019-06-04 21:33:55 · 281 阅读 · 0 评论