![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java面试宝典
文章平均质量分 50
希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
阿杰同学
希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
展开
-
史上最全的Spring面试题汇总
一、Spring概述基础1、Spring是什么?有什么特点?(1)Spring是一个轻量级Java开发框架,最早有Rod Johnson创建。(2)Spring设计目标:Spring为开发者提供一个一站式轻量级应用开发平台;(3)Spring设计理念:在JavaEE开发中,支持POJO和JavaBean开发方式,使应用面向接口开发,充分支持OO(面向对象)设计方法;Spring通过IoC容器实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IoC容器,实现解耦;(4)Spring框原创 2021-10-15 11:07:34 · 1588 阅读 · 0 评论 -
Redis面试宝典
1.八股文带你吊打面试官之Redis我们很多小伙伴平时会看很多面试八股文,但是经常遇到一个问题,结论是知道了,但是面试官继续深剖,问我们底层实现,这时我们懵圈了,因此我专门出一期面试突击专题,帮助各位小伙伴快速的准备好面试。2.如何准备Redis面试?①把Redis常用的数据结构了解一遍,并且把他和我们常用的Java语言数据类型关联起来,这样就更容易理解了。②面试官经常问:Redis为什么这么快?读请求并发量存在瓶颈如何优化?写请求并发量存在瓶颈如何优化?数据存储容量存在瓶颈如何优化?如何实现自动故原创 2021-10-16 10:06:40 · 178 阅读 · 0 评论 -
java开发多线程案例
ExecutorService exec = Executors.newCachedThreadPool();List iii = new ArrayList<>();iii.add(“1”);iii.add(“2”);iii.add(“3”);iii.add(“4”);for (String ii : iii) {Runnable runnable = new Runnable() {@Overridepublic void run() {// TODO Auto-gene原创 2020-11-19 10:32:30 · 112 阅读 · 0 评论 -
Java工程师面试题总结及参考答案(一)
1、 JVM结构原理、GC工作机制详解转载于:https://blog.csdn.net/tonytfjing/article/details/44278233一、JVM结构根据《java虚拟机规范》规定,JVM的基本结构一般如下图所示:从左图可知,JVM主要包括四个部分:1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。(右图表示了从java源文件到JVM的整个过程,可配合理解。 关于类的加载机制,可以参考http://blog.csdn.n原创 2020-08-11 11:11:23 · 549 阅读 · 0 评论 -
IDEA文件夹目录分层显示
IDEA文件夹目录分层显示原创 2023-05-13 15:38:11 · 5542 阅读 · 0 评论 -
Java设计模式:策略Strategy模式,以电影票折扣策略为例
多态:多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,能够在特定的情况下。表现不同的状态,从而相应着不同的属性和方法。通俗的说,同一操作作用于不同的对象,能够有不同的解释,产生不同的执行结果。在执行时,能够通过指向基类的指针,来调用实现派生类中的方法。/** * 折扣策略。 * * @author zhangfly * */public interface DiscountStrategy { public double getDiscountPrice(.原创 2022-02-28 19:39:00 · 1161 阅读 · 0 评论 -
Java从天气网爬取历史天气数据
private static String URL = "http://lishi.tianqi.com"; private static String BaseURL = "http://www.tianqi.com"; public static Map<String,Object> getWeather(String city){ Map<String,Object> map = new HashMap<>(); ...原创 2022-01-24 09:25:49 · 779 阅读 · 2 评论 -
解决ThreadLocal在线程池中被重复使用的问题
什么会出现上面的情况呢,明明是第二个查询设置了PageHelper.startPage,但是为什么会影响第一个查询呢. 如果看过PageHelper.startPage源码的小伙伴就会知道PageHelper.startPage的底层是使用ThreadLocal进行实现的,分页参数只会在当前的线程有效. 这么说好像没啥问题对吧.但是我们的web服务器tomcat其实是使用的线程池去接收浏览器的请求的,那么在线程池中线程是复用的.而我们之前设置了PageHelper.startPage的线程也会随着当前任务结原创 2022-06-01 17:35:45 · 1104 阅读 · 0 评论 -
技巧集:nginx作代理时,查看请求被转发到哪台服务器
使用Nginx代理多台服务器实行负载的时候,如何查看某一个请求被转发到哪台服务器上呢?pstream demo {server 127.0.0.1:8781;server 127.0.0.1:8087;} server { listen 80; server_name demo.testcas.com; #charset koi8-r; #access_log logs/host.access.log mai原创 2022-04-21 16:36:11 · 3617 阅读 · 0 评论 -
mybatis xml注释sql 的注意事项
说明:在mybatis 的sql里不是不能写注释,而是注释不能有#{},mybatis仍旧会把#{}算成一个带注入的参数如代码段2所示,mysql数据库更换为oracle数据库时,#{date}需要明确jdbcType,而该代码段中仅将适用于mysql的sql注释,依旧会报同样的错,最好是将注释的sql删除。注意事项1、where语句等用到大于小于等符号时候,需要使用 <![CDATA[ > ]]>或者 <![CDATA[ < ]]>进行识别。2、如果sql文中有原创 2022-04-22 16:26:40 · 1854 阅读 · 0 评论 -
redis和memcached的区别和使用场景
Redis 和 Memcached 都是基于内存的数据存储系统。Memcached是高性能分布式内存缓存服务,其本质上就是一个内存key-value数据库。Redis是一个开源的key-value存储系统。与Memcached类似,Redis将大部分数据存储在内存中,支持的数据类型包括:字符串、哈希表、链表、集合、有序集合以及基于这些数据类型的相关操作。区别1、Redis和Memcache都是将数据存放在内存中,都是内存数据库。不过memcache还可用于缓存其他东西,例如图片、视频等等;2、Redi原创 2022-01-06 19:10:47 · 1261 阅读 · 0 评论 -
SQLserver 查询某个表中所有字段并用逗号拼接
查询某个表中所有字段SELECT a.name, b.name, * FROM sys.columns a JOIN sys.types b ON b.user_type_id = a.user_type_id WHERE a.object_id = OBJECT_ID( 'dbo.T_User' )查询某个表中所有字段并逗号拼接select stuff((select ','+ 'p.'+a.nameFROM sys.columns a JOIN sys.types b原创 2022-05-13 14:18:43 · 2993 阅读 · 0 评论 -
BigDecimal在计算中丢失精度问题
首先我们先用一段代码复现问题根源,如下所示:public static void main(String[] args) { BigDecimal bigDecimal=new BigDecimal(88); System.out.println(bigDecimal); bigDecimal=new BigDecimal("8.8"); System.out.println(bigDecimal); bigDecimal=new BigDecimal(8.8);原创 2022-05-06 09:27:46 · 2395 阅读 · 0 评论 -
Map循环遍历的常用方法
常用Map循环遍历的方法 Map<String, Object> map = new HashMap<String, Object>(); map.put("1", "a"); map.put("2", "b"); map.put("3", "c"); System.out.println(map.containsKey("4")); //构造测试数据 List<Map<原创 2022-04-22 15:10:29 · 873 阅读 · 0 评论 -
都什么年代了你还在用Date
传统的 Date这篇文章就主要来谈一谈 Java 中处理日期时间用什么 API 比较好。我本来不准备写这篇文章的,因为我觉得 Java17 都特么出来了,大家对 Java8 提供的时间日期 API 都很熟悉了。但是经过我调研,很多中小公司还在用老版本的 Date 来处理时间日期,视 Java8 提供的时间日期 API 于无物,所以还是想来推荐一下新一代的时间日期 API,希望对大家有帮助。老版本的 Date 相信大家都很熟悉了,这里就简单介绍几个点 SimpleDateFormat sdf =原创 2022-04-27 10:17:40 · 185 阅读 · 0 评论 -
JAVA 获取当前时间(年月日时分秒)
获取当前时间(年月日时分秒)Date d = new Date();SimpleDateFormat sbf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");System.out.println(sbf.format(d));或System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())); 2020-04-28 14:23:05获取当前时间戳原创 2022-01-24 10:53:37 · 38618 阅读 · 0 评论 -
测试工具ApacheJMeter使用教程-详解
首先了解一下jmeret主要的配置元件1、测试计划:是使用 JMeter 进行测试的起点,它是其它 JMeter测试元件的容器2、线程组:代表一定数量的用户,它可以用来模拟用户并发发送请求。实际的请求内容在Sampler中定义,它被线程组包含。3、配置元件:维护Sampler需要的配置信息,并根据实际的需要修改请求的内容。4、前置处理器:负责在请求之前工作,常用来修改请求的设置5、后置处理器:负责在请求之后工作,常用获取返回的值。一个接口的调通1.首先 选择添加 ---------原创 2022-04-19 18:40:55 · 4097 阅读 · 0 评论 -
java8 Stream的实现原理 (从零开始实现一个stream流)
1.从零开始实现stream流1.1 java8 stream介绍java8新增了stream流的特性,能够让用户以函数式的方式、更为简单的操纵集合等数据结构,并实现了用户无感知的并行计算。1.2 从零开始实现一个stream流相信很多人在使用过java8的streamAPI接口之后,都会对其实现原理感到好奇,但往往在看到jdk的stream源码后却被其复杂的抽象、封装给弄糊涂了,而无法很好的理解其背后的原理。究其原因,是因为jdk的stream源码是高度工程化的代码,工程化的代码为了效率和满足各式原创 2022-01-22 10:35:27 · 2019 阅读 · 0 评论 -
SpringBoot Maven升级自带的jar包版本
当SpringBoot自带jar 包版本较低时如图:想要升级jar包到更高版本,需要在pom.xml文件中做修改:要先去掉默认配置 添加的依赖才会生效 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <!-- 去掉springboot默认配置 -->原创 2022-04-27 11:33:30 · 3406 阅读 · 0 评论 -
9张图+32个案例带你轻松玩转Java stream
Java8 中增加了 Stream 处理,可以配合 Lambda 表达式来使用,让操作集合非常便利。虽然我们平时经常使用 Stream,但用到的方法其实非常少,这篇文章就来完整的介绍 Stream 的使用Stream 提供的方法非常多,按照调用当前方法是否结束流处理,可以分为中间操作和结束操作。对于中间操作,又可以分为有状态的操作和无状态操作:无状态的操作是指当前元素的操作不受前面元素的影响。有状态的操作是指当前元素的操作需要等所有元素处理完之后才能进行。对于结束操作,又可以分为短路操作和非.原创 2022-03-01 19:56:06 · 136 阅读 · 0 评论 -
Sqlserver 死锁查询以及批量解锁方法
(1)下面是查询死锁进程(2)杀死死锁进程或者kill 62;原创 2022-06-07 11:08:53 · 9041 阅读 · 0 评论 -
月薪3万Java优秀简历模板
好的简历模板可以让自己在众多面试者中脱颖而出 也是挣马内的第一步 今天博主就给大家分享一波博主珍藏的一些模板 此处只展示几个例子 需要call我 记得一键三连呦阅览近万简历,对简历设计表达有充分理解,一份成功简历是求职路有力助手,不用过多花哨模板,简洁大方,主题鲜明,把应有的优势表达出来。...原创 2022-04-12 18:57:53 · 1747 阅读 · 5 评论 -
mkdir与mkdirs的区别
项目中需要在代码中读取或创建文件保存路径,用到了mkdir,查看还有个mkdirs方法,这里记录一下两者的区别。1、关于两者的说明如下:boolean mkdir() : 创建此抽象路径名指定的目录。boolean mkdirs() : 创建此抽象路径名指定的目录,包括创建必需但不存在的父目录。2、结合自己的理解及具体实践如下: mkdir():只能创建一层目录, 如:File file = new File("e:/test");file.mkdir();这样会在e:/路径下创建t原创 2021-12-08 15:18:15 · 6940 阅读 · 1 评论 -
21 个刁钻的 HashMap 面试题
1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transient Node<K,V>\[\] table;2:HashMap 的工作原理?HashMap 底层是 hash 数组和单向链表实现,数组中的每个元素都是链表,由 Node 内部类(实现 Map.Entry存储对象时,将 K/V 键值传给 put() 方法:①、调用 hash(K) 方法计算 K 的 hash 值,然后结合数组长度,原创 2021-12-30 10:42:52 · 325 阅读 · 1 评论 -
mysql中like % %模糊查询
1,%:表示任意0个或多个字符。可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。比如 SELECT * FROM [user] WHERE u_name LIKE ‘%三%’将会把u_name为“张三”,“张猫三”、“三脚猫”,“唐三藏”等等有“三”的记录全找出来。另外,如果需要找出u_name中既有“三”又有“猫”的记录,请使用and条件SELECT * FROM [user] WHERE u_name LIKE ‘%三%’ AND u_name LIKE ‘%猫%’原创 2021-12-23 16:06:16 · 4734 阅读 · 0 评论 -
final finally 和 finalize的区别
final finally 和 finalize的区别1、final修饰符(关键字)被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。将变量或方法声明为final,可以保证他们在使用的过程中不被修改。2、finally是在异常处理时提供finally块来执行任何清除操作不管有没有异常被抛出、捕获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是在try块内容发生c原创 2021-12-14 15:04:07 · 84 阅读 · 0 评论 -
梳理一下我理解的aop
先记录一下AOP的几个概念:AOP:首先,AOP是Aspect-Originted Programming,即面向切面编程。我觉得可以这样地简单理解,aop就是为了你更清楚的逻辑,让你的业务逻辑代码更清晰,不用去想其他事,像日志啊,权限啊这些和业务逻辑无关的东西。那要怎么用这些又很重要的功能呢?我们不用改变原来的代码,只要在另一个个地方,把这些要附加的功能打包好,然后运行的时候切进你要用这些功能的地方,aop其实大概就是这样。好的那就来看看下面的几个名词:advice:翻译成增强、通知,其实就是你要原创 2021-12-21 17:22:40 · 214 阅读 · 0 评论 -
十大经典排序算法(动图演示)
算法概述算法分类十种常见排序算法可以分为两大类:比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。算法复杂度相关概念稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。时间复杂度:对排序数据的总的原创 2021-12-24 17:21:07 · 175 阅读 · 0 评论 -
HashMap中为啥要重写hashcode和equals方法
1. equals方法如果使用==判断俩个对象是否相等,这个只是从地址看是否相等,而与我们的需求是不符合的。即使俩个对象地址是不同的,如果它的属性是相同的,那么可判定这俩个对象相等。未重写equals方法:public class Person { public static void main(String[] args) { Person p1 = new Person(); Person p2 = new Person(); Sy原创 2021-12-30 17:04:56 · 2062 阅读 · 1 评论 -
java设计模式面试专题及答案
java设计模式面试专题及答案1.请列举出在 JDK 中几个常用的设计模式?单例模式(Singleton pattern)用于 Runtime,Calendar 和其他的一些类中。工厂模式(Factory pattern)被用于各种不可变的类如 Boolean,像 Boolean.valueOf。观察者模式(Observer pattern)被用于 Swing 和很多的事件监听中。装饰器设计模式(Decoratordesign pattern)被用于多个 Java IO 类中。2.什么是设计原创 2021-12-14 15:24:08 · 195 阅读 · 0 评论 -
TCP四次挥手,输入网址到页面加载的过程
输入URL到页面加载的全过程域名解析建立TCP连接(三次握手)浏览器发送HTTP请求报文服务器回复HTTP响应报文浏览器将资源缓存到本地释放TCP连接(四次挥手)域名解析通过DNS将域名解析成IP地址。在解析过程中,按照浏览器缓存、系统缓存、路由器缓存、ISP(运营商)DNS缓存、根域名服务器、顶级域名服务器、主域名服务器的顺序,逐步读取缓存,直到拿到IP地址注意:1、用户浏览器、操作系统都有缓存,本地域名服务器也有自己的缓存。不过缓存都有自己的时效。2、浏览器向本地域名服务器的原创 2021-12-21 15:44:00 · 652 阅读 · 0 评论 -
Thread中start()和run()的区别
Thread中start()和run()的区别start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法。start()不能被重复调用。run() : run()就和普通的成员方法一样,可以被重复调用。单独调用run()的话,会在当前线程中执行run(),而并不会启动新线程!class MyThread extends Thread{ public void run(){ ... } };原创 2021-12-14 14:47:33 · 989 阅读 · 0 评论 -
Mybatis 的 ${} #{}的区别是什么
Mybatis 的 ${} #{}的区别是什么${} 相当于直接拼接SQL,类似于 JDBC 的 Statement 用法,String sql = "select * from table where xxx = " + xxx + " and yyy = " + yyy;这种方式缺陷是有被 SQL 注入的风险,并且数据库每次都会重新编译此SQL,因为每次都认为是一个新的 SQL。==#{} 相当于预编译 SQL,对应 JDBC 的 PreparedStatement,就是 ? ==占位符形原创 2021-11-24 17:00:39 · 582 阅读 · 0 评论 -
遍历List集合的三种方法
遍历List集合的三种方法List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");list.add("ccc");方法一:超级for循环遍历for(String attribute : list) { System.out.println(attribute);}方法二:对于ArrayList来说速度比较快, 用for循环, 以size为条件遍历:for(in原创 2021-12-14 14:52:33 · 7953 阅读 · 0 评论 -
Java编程题 (一)
一个球从100米高度自由落下,每次落地后反弹回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高import java.text.*;public class Text_10 { public static void main(String[] args) { /* * 一个球从100米高度自由落下,每次落地后反弹回原高度的一半; * 再落下,求它在第10次落地时,共经过多少米?第10次反弹多高 *原创 2021-12-14 15:15:29 · 428 阅读 · 0 评论 -
Redis为什么那么快
Redis是一个单线程应用,所说的单线程指的是Redis使用单个线程处理客户端的请求。 虽然Redis是单线程的应用,但是即便不通过部署多个Redis实例和集群的方式提升系统吞吐, 从官网给出的数据可以看出,Redis处理速度非常快。Redis性能非常高的原因主要有以下几点:内存存储:Redis是使用内存(in-memeroy)存储,没有磁盘IO上的开销单线程实现:Redis使用单个线程处理请求,避免了多个线程之间线程切换和锁资源争用的开销非阻塞IO:Redis使用多路复用IO技术,在poll,e原创 2021-12-10 17:37:33 · 663 阅读 · 0 评论 -
JVM内存结构
JVM的内存结构大概分为:堆(Heap):线程共享。所有的对象实例以及数组都要在堆上分配。回收器主要管理的对象。方法区(Method Area):线程共享。存储类信息、常量、静态变量、即时编译器编译后的代码。方法栈(JVM Stack):线程私有。存储局部变量表、操作栈、动态链接、方法出口,对象指针。本地方法栈(Native Method Stack):线程私有。为虚拟机使用到的Native 方法服务。如Java使用c或者c++编写的接口服务时,代码在此区运行。程序计数器(Program Co.原创 2021-12-24 10:52:14 · 1551 阅读 · 0 评论 -
java 8两个List集合取交集、并集、差集、去重并集
public class ListTest { public static void main(String[] args) { ArrayList<String> listA = Arrays.asLis(t("a", "b", "c", "d", "e").toString().split(",")); ArrayList<String> listB = Arrays.asLis(t( "b", "c", "d", "e", "原创 2021-12-07 10:58:05 · 1926 阅读 · 0 评论 -
同步异步是啥?
定义:同步和异步关注的是 消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西是,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后调用者可用继续执行后续操作,被调用者通过状体来通知调用者,或者通过回掉函数来处理这个调用。比方说:你去商城买东西,你看上了一款手机,能和店家说你一个这款手机,他就去仓库拿货,你得在店里等着,不能离开,这叫做同步。现在原创 2021-11-24 10:25:36 · 655 阅读 · 0 评论 -
nginx负载均衡的5种策略
nginx负载均衡的5种策略要理解负载均衡,必须先搞清楚正向代理和反向代理。反向代理和正向代理区别一 什么是代理代理其实就是一个中介,A和B本来可以直连,中间插入一个C,C就是中介。刚开始的时候,代理多数是帮助内网client访问外网server用的后来出现了反向代理,"反向"这个词在这儿的意思其实是指方向相反,即代理将来自外网客户端的请求转发到内网服务器,从外到内二 正向代理正向代理类似一个跳板机,代理访问外部资源比如我们国内访问谷歌,直接访问访问不到,我们可以通过一个正向代理原创 2021-12-14 10:26:46 · 14998 阅读 · 1 评论