
Java
文章平均质量分 96
有头发的代码匠
请相信:你的付出,即使不在今天,也会在未来的某一天璀璨绽放。愿所有的努力都会开花,所有的远方都能到达!
展开
-
99%程序员都不知道的Java对象布局
你整天new对象,但是你知道对象在内存中是怎样布局的吗?你知道对象中包含了哪些信息吗?原创 2020-08-11 13:19:06 · 2023 阅读 · 0 评论 -
这决对是我见过最坑的一道笔试题
这绝对是我见过的最坑的一道笔试题!原创 2020-07-27 13:49:04 · 1842 阅读 · 9 评论 -
天天用迭代器和foreach,那它俩到底是怎样工作的呢?
天天用迭代器和foreach,那它俩到底是怎样工作的呢?原创 2020-07-21 18:38:53 · 4147 阅读 · 3 评论 -
带你一步步从源码角度深入理解Java线程池(简单易懂)
如果经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。线程池通过提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。1、使用线程池的好处:①提高响应速度(减少了创建新线程的时间)②降低资源消耗(重复利用线程池中线程,不需要每次都创建)③便于线程进行管理,线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。2、线程池的体系结构java.util.concurre原创 2020-07-19 15:04:13 · 4797 阅读 · 2 评论 -
天天用注解,你知道注解到底是怎样实现的吗?
注解,也叫元数据,是一种代码级别的说明。它是JDK1.5引入的一个特性,与类、接口、枚举类所在同一个层次。它可以声明在包、类、方法、成员变量、构造器、局部变量、方法参数等的上面,用来对这些元素进行说明、注释。也可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。1、注解的作用分类(1)生成文档相关的注释说明:通过代码里标识的注解可以生成文档相关的注释说明。下面我们就来演示一下,首先我们编原创 2020-07-16 22:20:31 · 15544 阅读 · 17 评论 -
枚举类都不知道,还敢说自己会Java?
本文主要针对面试中经常被问到的枚举类的热点、难点由浅入深进行深入分析原创 2020-07-15 15:59:56 · 6133 阅读 · 10 评论 -
深入理解Java中的BigInteger和 BigDecimal,再也不怕面试了
Integer类作为int的包装类,能存储的最大整型值为2^31-1 ,Long类最大为2^63-1,虽然比Integer类大了很多,但是也是有限的。如果想要表示更大的整数,不管是基本数据类型还是它们对应的包装类都无法实现。Java中提供了两个用于高精度计算的类:BigInteger和BigDecimal,这两个类包含的方法、提供的操作与基本类型及其对应的包装类相同,并提供了java.lang.Math的所有相关方法。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数原创 2020-07-14 11:48:07 · 3437 阅读 · 0 评论 -
面试官:Comparable和Comparator都不知道,我招你干啥?
在实际开发过程中,我们经常会涉及到对对象按某一属性进行比较排序的问题,比如同一类商品按照价格进行排序,或者是学生按照成绩进行排名等等,那么就涉及到对象之间的比较排序问题。 在Java中,实现对象排序的方式有两种:自然排序:java.lang.Comparable定制排序:java.util.Comparator1、自然排序:java.lang.Comparable &原创 2020-07-14 00:38:49 · 4487 阅读 · 6 评论 -
深入理解Java中的final关键字
在Java中声明类、变量和方法时,可使用关键字final来修饰,表示“最终的”。1、final用来修饰一个类:被修饰的类不能再被其他类继承。例如:String类、StringBuffer类、System类等2、final用来修饰方法:表明被修饰的方法不能再被子类重写。例如:Object类中的getClass()方法3、final用来修饰变量:此时的“变量”就是一个常量,名称大写,且只能被赋值一次。final修饰属性:可以赋值的位置有:显示初始化、代码块中初始化、构造器中初始化。fi原创 2020-07-12 19:16:17 · 1818 阅读 · 0 评论 -
深入理解String、StringBuffer和StringBuilder
本文主要针对面试中经常被问到的String的热点、难点进行深入分析,祝你备战秋招,直通BAT原创 2020-07-12 11:12:53 · 61560 阅读 · 32 评论 -
深入理解Java包装类与自动拆装箱
你真的理解Java包装类和自动拆装箱吗?有些知识你绝对不知道!原创 2020-06-21 22:36:30 · 3869 阅读 · 4 评论 -
阿里面试:我差点倒在了数组上
数组也是Java中一个非常重要的知识点,无论是在日常开发还是面试和笔试中都经常用到。本篇文章对数组进行了深入的总结,希望能够对你有所帮助。原创 2020-06-17 12:38:57 · 4385 阅读 · 7 评论 -
使用反射封装ORM框架,真香!
我们在做开发的过程中,需要经常对数据库进行操作,这时我们就需要使用到ORM框架,例如比较常用的MyBatis和Hibernate。下面我将对ORM框架进行详细的介绍并且封装一个简单的ORM框架。原创 2020-05-15 11:49:42 · 3255 阅读 · 5 评论 -
原来手写SpringIOC如此简单
相信所有学过Java的人都应该学习并使用过Spring框架,它是最受欢迎的企业级Java应用程序开发框架,数以千万的来自世界各地的开发人员都在使用 Spring 框架进行程序开发。而Spring的核心是IOC(控制反转)和AOP(面向切面编程)。下面我将会对SpringIOC做详细的介绍并使用反射技术手写一个SpringIOC。1.什么是SpringIOC?所谓IOC(控制反转),对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象之间的关系。在传统的程序开发中,如果在一个对象中要原创 2020-05-12 12:58:49 · 4133 阅读 · 4 评论 -
面试官:Class类中各个方法有什么区别?
Class类中有很多方法,今天我们就来介绍几个在面试中经常被问到并且非常容易混淆的方法。1.getFields()和getDeclaredFields()的区别Class类中getFields()和getDeclaredFields()都是用来获取成员变量的方法,那么它们之间有什么区别呢?我们首先使用代码来进行演示,然后我们再根据运行结果进行分析。1.1定义一个实体类Personpublic class Person { public String name; public int原创 2020-05-08 19:12:04 · 3043 阅读 · 5 评论 -
使用反射机制实现反编译
在上一篇文章中,已经详细的介绍了Java的反射机制,没看过的小伙伴可以去我的上一篇文章看一下,相信你一定有所收获。上一篇文章地址:反射的详细介绍首先我们再来回顾一下Java的反射机制。什么是反射机制?在程序运行状态中,对于任意一个类或对象,都能够获取到这个类的所有属性和方法(包括私有属性和方法),这种动态获取信息以及动态调用对象方法的功能就称为反射机制。简单来讲,通过反射,类对我们是完全透...原创 2020-05-06 11:45:24 · 2110 阅读 · 0 评论 -
面试官:反射都不会,还敢说自己会Java?
一、反射机制1.1 框架 在学习Java的路上,相信你一定使用过各种各样的框架。所谓的框架就是一个半成品软件,已经对基础的代码进行了封装并提供相应的API。在框架的基础上进行软件开发,可以简化编码。学习使用框架并不需要了解反射,但是如果想要自己写一个框架,那么就要对反射机制有很深入的了解。1.2 什么是反射机制? 在运行状态中,对于任意一个类或对象,都能够获取到这个类的所有属性和方法(...原创 2020-04-29 15:50:03 · 39374 阅读 · 61 评论 -
程序员必会的Java多线程与并发编程
1、线程三大特性多线程有三大特性:原子性、可见性、有序性原子性:即一个操作或者多个操作,要么全部执行成功,要么全都不执行。一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作都必须要具备原子性才能保证转账成功,而不会出现一些意外的情况。可见性:当多个线程访问同一个变量时,如果一个线程修...原创 2020-04-26 10:25:47 · 2720 阅读 · 0 评论 -
你真的懂得守护进程和优先级吗?
1、守护线程在Java中有两种线程:一种是用户线程,另一种是守护线程。可以通过isDaemon()方法来进行区分,如果返回false,说明该线程是用户线程;如果返回true,则说明该线程是守护线程。守护线程是指为其他线程服务的线程,也就是“后台线程”,一般用来执行后台任务。守护线程最经典的应用就是GC(垃圾回收器)。下面举个例子来演示一下:public class DaemonThread...原创 2020-04-25 11:35:43 · 3631 阅读 · 2 评论 -
面试官:如何终止线程?有几种方式?
在 Java 中有以下 3 种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程终止;使用 stop() 方法强行终止线程,但是不推荐使用这个方法,因为使用此方法不安全,目前该方法已被弃用;使用 interrupt()方法中断线程。第一种:使用标志位终止线程使用标志位终止线程就是定义一个boolean型的标志位 ,在线程的run方法中根据这...原创 2020-04-23 18:41:22 · 8505 阅读 · 6 评论 -
面试必会之多线程之间实现通讯
1、什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。2、多线程之间通讯需求 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户,实现写一个,读一个的操作。 代码演示如下:共享资源实体类class Res { public ...原创 2020-04-22 11:38:50 · 4837 阅读 · 0 评论 -
女朋友也能看懂的多线程同步
1、什么是线程安全? 当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。 案例:现在有100张火车票,有两个窗口同时抢火车票,使用多线程模拟抢票效果。/** * @classDesc: 功能描述:(多线程之买火车票案例-展示线程不安全问题) */class ThreadTrain implement...原创 2020-04-21 11:41:48 · 6182 阅读 · 0 评论 -
多线程快速入门
1、线程与进程的区别? 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。 使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快...原创 2020-04-17 22:07:12 · 4302 阅读 · 0 评论 -
防止非法链接(Referer)
什么是Referer?Referer是header的一部分,当浏览器向服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。什么是非法链接?1)直接访问资源(Referer=null)2)B网站盗用A网站的资源怎样防止非法链接?写一个过滤器 获取每次请求头中的Referer 然后判断Referer中的来源值...原创 2019-10-27 21:00:02 · 4983 阅读 · 1 评论 -
深入理解Servlet
1、Servlet : 用java语言编写的动态资源开发技术。2、Servlet 特点:1)普通的java类,继承HttpServlet类,覆盖doGet、doPost等方法。2)Servlet类只能交给tomcat服务器运行。3、怎样使用Eclipse开发Servlet?1)编写一个servlet类,继承HttpServletpublic class Servlet e...原创 2019-10-25 09:36:39 · 11481 阅读 · 15 评论 -
单例模式之懒汉式和饿汉式
什么是单例模式?单例模式就是在JVM中一个对象只能有一个实例。单例模式有七种写法,常见的单例模式有两种:懒汉式、饿汉式什么是懒汉式?就是需要的才会去实例化,线程不安全。什么是饿汉式?就是当class文件被加载的时候就已经初始化,天生线程安全。懒汉式写法/** * 保证这个类在JVM中只有一个实例化对象 */class Singleton{ private ...原创 2019-10-24 09:04:46 · 3223 阅读 · 2 评论 -
转发和重定向的过程和区别
转发 req.getRequestDispatcher("/要跳转的地址").forward(req, resp);转发的过程:(以servlet和jsp为例)浏览器首先发送一个请求到服务器端,服务器端发现匹配的 servlet,并指定它去执行,当这个 servlet 执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的jsp页面,整个流程都是在服务器...原创 2019-10-22 09:13:15 · 12736 阅读 · 10 评论 -
Cookie和Session的底层实现原理
一、CookieCookie的特性:会话数据保存在浏览器客户端Cookie的底层实现原理:1)服务器创建cookie对象,把会话数据存储到cookie对象中。 new Cookie("name","value");2)服务器发送cookie信息到浏览器 response.addCookie(cookie);3)浏览器从响应头中得到服务器发送的C...原创 2019-10-19 14:31:36 · 9194 阅读 · 9 评论 -
如何在Java项目配置根路径?
1、首先获取项目的根路径<% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%>2、在页面中配置...原创 2019-06-21 21:44:48 · 3904 阅读 · 0 评论