自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 带你一步步从源码角度深入理解Java线程池(简单易懂)

如果经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。线程池通过提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。1、使用线程池的好处:①提高响应速度(减少了创建新线程的时间)②降低资源消耗(重复利用线程池中线程,不需要每次都创建)③便于线程进行管理,线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。2、线程池的体系结构java.util.concurre

2020-07-19 15:04:13 4717 2

原创 天天用注解,你知道注解到底是怎样实现的吗?

注解,也叫元数据,是一种代码级别的说明。它是JDK1.5引入的一个特性,与类、接口、枚举类所在同一个层次。它可以声明在包、类、方法、成员变量、构造器、局部变量、方法参数等的上面,用来对这些元素进行说明、注释。也可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。1、注解的作用分类(1)生成文档相关的注释说明:通过代码里标识的注解可以生成文档相关的注释说明。下面我们就来演示一下,首先我们编

2020-07-16 22:20:31 15261 17

原创 枚举类都不知道,还敢说自己会Java?

本文主要针对面试中经常被问到的枚举类的热点、难点由浅入深进行深入分析

2020-07-15 15:59:56 6041 10

原创 深入理解String、StringBuffer和StringBuilder

本文主要针对面试中经常被问到的String的热点、难点进行深入分析,祝你备战秋招,直通BAT

2020-07-12 11:12:53 57961 32

原创 面试官:反射都不会,还敢说自己会Java?

一、反射机制1.1 框架  在学习Java的路上,相信你一定使用过各种各样的框架。所谓的框架就是一个半成品软件,已经对基础的代码进行了封装并提供相应的API。在框架的基础上进行软件开发,可以简化编码。学习使用框架并不需要了解反射,但是如果想要自己写一个框架,那么就要对反射机制有很深入的了解。1.2 什么是反射机制?  在运行状态中,对于任意一个类或对象,都能够获取到这个类的所有属性和方法(...

2020-04-29 15:50:03 39112 61

原创 转发和重定向的过程和区别

转发 req.getRequestDispatcher("/要跳转的地址").forward(req, resp);转发的过程:(以servlet和jsp为例)浏览器首先发送一个请求到服务器端,服务器端发现匹配的 servlet,并指定它去执行,当这个 servlet 执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的jsp页面,整个流程都是在服务器...

2019-10-22 09:13:15 12659 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 9027 9

原创 Java面试之String、StringBuffer和StringBuilder的区别和原理

首先我们先来谈谈String:String对象一旦创建,其值是不能修改的,如果要修改,会重新开辟内存空间来存储修改之后的对象,即修改了String的引用。因为String的底层是用数组来存值的,数组长度不可改变这一特性导致了上述问题。‌如果我们在实际开发过程中需要对某个字符串进行频繁的修改,使用String就会造成内存空间的浪费,应该怎样解决这个问题呢?‌答案就是可...

2019-10-17 13:33:59 11144 2

原创 99%程序员都不知道的Java对象布局

你整天new对象,但是你知道对象在内存中是怎样布局的吗?你知道对象中包含了哪些信息吗?

2020-08-11 13:19:06 1897

原创 这决对是我见过最坑的一道笔试题

这绝对是我见过的最坑的一道笔试题!

2020-07-27 13:49:04 1749 9

原创 天天用迭代器和foreach,那它俩到底是怎样工作的呢?

天天用迭代器和foreach,那它俩到底是怎样工作的呢?

2020-07-21 18:38:53 4041 3

原创 深入理解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 2823

原创 面试官:Comparable和Comparator都不知道,我招你干啥?

        在实际开发过程中,我们经常会涉及到对对象按某一属性进行比较排序的问题,比如同一类商品按照价格进行排序,或者是学生按照成绩进行排名等等,那么就涉及到对象之间的比较排序问题。 在Java中,实现对象排序的方式有两种:自然排序:java.lang.Comparable定制排序:java.util.Comparator1、自然排序:java.lang.Comparable   &

2020-07-14 00:38:49 4433 6

原创 深入理解Java中的final关键字

在Java中声明类、变量和方法时,可使用关键字final来修饰,表示“最终的”。1、final用来修饰一个类:被修饰的类不能再被其他类继承。例如:String类、StringBuffer类、System类等2、final用来修饰方法:表明被修饰的方法不能再被子类重写。例如:Object类中的getClass()方法3、final用来修饰变量:此时的“变量”就是一个常量,名称大写,且只能被赋值一次。final修饰属性:可以赋值的位置有:显示初始化、代码块中初始化、构造器中初始化。fi

2020-07-12 19:16:17 1712

原创 深入理解Java包装类与自动拆装箱

你真的理解Java包装类和自动拆装箱吗?有些知识你绝对不知道!

2020-06-21 22:36:30 3308 4

原创 阿里面试:我差点倒在了数组上

数组也是Java中一个非常重要的知识点,无论是在日常开发还是面试和笔试中都经常用到。本篇文章对数组进行了深入的总结,希望能够对你有所帮助。

2020-06-17 12:38:57 4327 7

原创 使用反射封装ORM框架,真香!

我们在做开发的过程中,需要经常对数据库进行操作,这时我们就需要使用到ORM框架,例如比较常用的MyBatis和Hibernate。下面我将对ORM框架进行详细的介绍并且封装一个简单的ORM框架。

2020-05-15 11:49:42 3051 5

原创 原来手写SpringIOC如此简单

相信所有学过Java的人都应该学习并使用过Spring框架,它是最受欢迎的企业级Java应用程序开发框架,数以千万的来自世界各地的开发人员都在使用 Spring 框架进行程序开发。而Spring的核心是IOC(控制反转)和AOP(面向切面编程)。下面我将会对SpringIOC做详细的介绍并使用反射技术手写一个SpringIOC。1.什么是SpringIOC?所谓IOC(控制反转),对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象之间的关系。在传统的程序开发中,如果在一个对象中要

2020-05-12 12:58:49 3995 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 2954 5

原创 使用反射机制实现反编译

在上一篇文章中,已经详细的介绍了Java的反射机制,没看过的小伙伴可以去我的上一篇文章看一下,相信你一定有所收获。上一篇文章地址:反射的详细介绍首先我们再来回顾一下Java的反射机制。什么是反射机制?在程序运行状态中,对于任意一个类或对象,都能够获取到这个类的所有属性和方法(包括私有属性和方法),这种动态获取信息以及动态调用对象方法的功能就称为反射机制。简单来讲,通过反射,类对我们是完全透...

2020-05-06 11:45:24 2025

原创 程序员必会的Java多线程与并发编程

1、线程三大特性多线程有三大特性:原子性、可见性、有序性原子性:即一个操作或者多个操作,要么全部执行成功,要么全都不执行。一个很经典的例子就是银行账户转账问题:比如从账户A向账户B转1000元,那么必然包括2个操作:从账户A减去1000元,往账户B加上1000元。这2个操作都必须要具备原子性才能保证转账成功,而不会出现一些意外的情况。可见性:当多个线程访问同一个变量时,如果一个线程修...

2020-04-26 10:25:47 2642

原创 你真的懂得守护进程和优先级吗?

1、守护线程在Java中有两种线程:一种是用户线程,另一种是守护线程。可以通过isDaemon()方法来进行区分,如果返回false,说明该线程是用户线程;如果返回true,则说明该线程是守护线程。守护线程是指为其他线程服务的线程,也就是“后台线程”,一般用来执行后台任务。守护线程最经典的应用就是GC(垃圾回收器)。下面举个例子来演示一下:public class DaemonThread...

2020-04-25 11:35:43 3542 2

原创 面试官:如何终止线程?有几种方式?

在 Java 中有以下 3 种方法可以终止正在运行的线程:使用退出标志,使线程正常退出,也就是当 run() 方法完成后线程终止;使用 stop() 方法强行终止线程,但是不推荐使用这个方法,因为使用此方法不安全,目前该方法已被弃用;使用 interrupt()方法中断线程。第一种:使用标志位终止线程使用标志位终止线程就是定义一个boolean型的标志位 ,在线程的run方法中根据这...

2020-04-23 18:41:22 8333 6

原创 面试必会之多线程之间实现通讯

1、什么是多线程之间通讯? 多线程之间通讯,其实就是多个线程在操作同一个资源,但是操作的动作不同。2、多线程之间通讯需求 需求:第一个线程写入(input)用户,另一个线程取读取(out)用户,实现写一个,读一个的操作。 代码演示如下:共享资源实体类class Res { public ...

2020-04-22 11:38:50 4795

原创 女朋友也能看懂的多线程同步

1、什么是线程安全? 当多个线程同时共享同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题。 案例:现在有100张火车票,有两个窗口同时抢火车票,使用多线程模拟抢票效果。/** * @classDesc: 功能描述:(多线程之买火车票案例-展示线程不安全问题) */class ThreadTrain implement...

2020-04-21 11:41:48 6111

原创 多线程快速入门

1、线程与进程的区别? 每个正在系统上运行的程序都是一个进程。每个进程包含一到多个线程。线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行。也可以把它理解为代码运行的上下文。所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务。通常由操作系统负责多个线程的调度和执行。 使用线程可以把占据时间长的程序中的任务放到后台去处理,程序的运行速度可能加快...

2020-04-17 22:07:12 4225

原创 防止非法链接(Referer)

什么是Referer?Referer是header的一部分,当浏览器向服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理。什么是非法链接?1)直接访问资源(Referer=null)2)B网站盗用A网站的资源怎样防止非法链接?写一个过滤器 获取每次请求头中的Referer 然后判断Referer中的来源值...

2019-10-27 21:00:02 4627 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 11370 15

原创 单例模式之懒汉式和饿汉式

什么是单例模式?单例模式就是在JVM中一个对象只能有一个实例。单例模式有七种写法,常见的单例模式有两种:懒汉式、饿汉式什么是懒汉式?就是需要的才会去实例化,线程不安全。什么是饿汉式?就是当class文件被加载的时候就已经初始化,天生线程安全。懒汉式写法/** * 保证这个类在JVM中只有一个实例化对象 */class Singleton{ private ...

2019-10-24 09:04:46 3178 2

原创 LeetCode70—爬楼梯

题目描述:假设你正在爬楼梯。需要 n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶...

2019-10-18 23:14:01 1625

原创 LeetCode319—灯泡开关

题目描述:初始时有 n 个灯泡关闭。 第 1 轮,你打开所有的灯泡。 第 2 轮,每两个灯泡你关闭一次。 第 3 轮,每三个灯泡切换一次开关(如果关闭则开启,如果开启则关闭)。第 i 轮,每 i 个灯泡切换一次开关。 对于第 n 轮,你只切换最后一个灯泡的开关。 找出 n 轮后有多少个亮着的灯泡。示例:输入: 3输出: 1解释:初始时, 灯泡状态 [关闭, 关闭, 关闭]....

2019-10-16 17:04:45 2641

原创 LeetCode192——Nim 游戏

题目描述:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头,每次你们轮流拿掉 1 - 3 块石头。 拿掉最后一块石头的人就是获胜者。你作为先手。你们是聪明人,每一步都是最优解。 编写一个函数,来判断你是否可以在给定石头数量的情况下赢得游戏。示例:输入: 4输出: false解释: 如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 ...

2019-10-15 14:10:30 1953

原创 Java面试题(基础篇)

1、JDK和JRE有什么区别?JDK:Java 的开发工具包,提供了 Java 的开发环境和运行环境JRE:Java 的运行环境,为 Java 的运行提供了所需环境具体来说:JDK 其实包含了 JRE,同时还包含了编译 Java 源码的编译器 ,还包含了很多 Java 程序调试和分析的工具。简单来说:如果你需要运行 Java 程序,只需安装 JRE 就可以了,如果你需要编写 Jav...

2019-10-15 13:17:54 5647 1

原创 LeetCode75——颜色分类

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶: 一个直观的解决方案是使用计数排序的两趟扫...

2019-10-14 11:42:39 1714

原创 LeetCode11——盛最多水的容器

给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为(i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水...

2019-10-14 11:15:33 1893

原创 最有效的解决Maven项目中的图片、css和js等静态资源不能访问的方法

是不是还在为图片、css和js等资源的配置路径正确,但就是访问不了的问题而苦恼?我来教你一个最有效的解决方法 ,看完之后问题就会迎刃而解。首先查看你的web.xml配置文件是不是这样?<servlet-mapping> <servlet-name>springmvc</servlet-name> <url-patt...

2019-06-22 11:10:33 6290 1

原创 如何在Java项目配置根路径?

1、首先获取项目的根路径<% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";%>2、在页面中配置...

2019-06-21 21:44:48 3769

原创 Controller不能访问的解决方法

首先了解一下spring容器和SpringMVC容器的关系spring容器和springmvc容器的关系是父子容器的关系。spring容器是父容器,springmvc是子容器。在子容器里可以访问父容器里的对象,但是在父容器里不可以访问子容器的对象解决方法:在spring的配置文件application.xml和SpringMVC的配置文件SpringMVC.xml中都需要配置<con...

2019-06-21 21:25:43 7392 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除