一切福田,不離方寸,從心而覓,感無不通。

Category Archives: Backend

Java面试准备

基础 Java相关 Java创建对象有几种方式? 有6种方式:使用new创建、使用反射机制、使用clone方法、使用反序列化、使用方法句柄、使用Unsafe分配内存。 使用new创建

使用反射机制 运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance()实例方法。 (1)使用Class类的newInstance方法可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。

(2)使用Constructor类的newInstance方法 和Class类的newInstance方法很像,java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。

这两种newInstance方法就是大家所说的反射。实际上Class的newInstance方法内部调用Constructor的newInstance方法。 使用clone方法 无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将签名的对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。 要使用clone方法,我们需要先实现Cloneable接口并实现其定义的clone方法。如果只实现了Cloneable接口,并没有重写clone方法的话,会默认使用Object类中的clone方法,这是一个native的方法。

  使用反序列化 当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。其实反序列化也是基于反射实现的。

  使用方法句柄 通过使用方法句柄,可以间接地调用构造函数来创建对象

使用了MethodHandles.lookup().findConstructor()方法获取构造函数的方法句柄,然后通过invoke()方法调用构造函数来创建对象。 使用Unsafe分配内存 在Java中,可以使用sun.misc.Unsafe类来进行直接的内存操作,包括内存分配和对象实例化。然而,需要注意的是,sun.misc.Unsafe类是Java的内部API,它并不是Java标准库的一部分,也不建议在生产环境中使用。

这种方式有以下几个缺点: 不可移植性:Unsafe类的行为在不同的Java版本和不同的JVM实现中可能会有差异,因此代码在不同的环境下可能会出现不可移植的问题。 安全性问题:Unsafe类的功能是非常强大和危险的,可以绕过Java的安全机制,可能会导致内存泄漏、非法访问、数据损坏等安全问题。 不符合面向对象的原则:Java是一门面向对象的语言,鼓励使用构造函数和工厂方法来创建对象,以确保对象的正确初始化和维护对象的不变性。 Spring MVC相关 什么是SpringMVC? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 Spring MVC 的优点 1.它是基于组件技术的.全部的应用对象,无论控制器和视图,还是业务对象之类的都是 java 组件.并且和Spring提供的其他基础结构紧密集成 2.不依赖于Servlet API(目标虽是如此,但是在实现的时候确实是依赖于Servlet的 3.可以任意使用各种视图技术,而不仅仅局限于JSP 4.支持各种请求资源的映射策略 5.它应是易于扩展的,支持 RESTful 风格 SpringMVC 工作原理? 1.用户发送请求给到前端控制器 DispatchServlet 2.DispatchServlet 收到请求后,调用HandlerMapping处理器映射器查找对应负责处理请求的 Handler 3.HandlerMapping 将找到的具体的处理器 Handler 生成处理器对象以及处理器拦截器(如果有则生成),一起返回给 DispatchServlet 4.DispatchServlet调用HandlerAdapter 处理器适配器,请求执行具体的 Handler 5.HandlerAdapter 将具体 Handler 执行返回的模型和视图返回给到 DispatchServlet 6.此时 DispatchServlet 已经得到具体的 视图名称了,然后向 ViewResolver 发起请求,请求解析视图,返回已经解析好的视图对象 7.DispatchServlet 对视图进行渲染,将 model 与view 进行渲染 8.DispatchServlet 返回响应给到用户浏览器 Spring MVC的主要组件: 前端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了DispatcherServlet能够减少了其它组件之间的耦合度。 处理器映射器 HandlerMapping:根据请求的URL来查找Handler 处理器适配器 HandlerAdapter:负责执行Handler 处理器 Handler:处理器,需要程序员开发 视图解析器 ViewResolver:进行视图的解析,根据视图逻辑名将ModelAndView解析成真正的视图(view) 视图View:View是一个接口, 它的实现类支持不同的视图类型,如jsp,freemarker,pdf等等 MVC是什么?MVC设计模式的好处有哪些? mvc是一种设计模式(设计模式就是日常开发中编写代码的一种好的方法和经验的总结)。模型(model)-视图(view)-控制器(controller),三层架构的设计模式。用于实现前端页面的展现与后端业务数据处理的分离。mvc设计模式的好处: 1.分层设计,实现了业务系统各个组件之间的解耦,有利于业务系统的可扩展性,可维护性。 2.有利于系统的并行开发,提升开发效率。 SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决? 是单例模式,在多线程访问的时候有线程安全问题,解决方案是在控制器里面不能写可变状态量,如果需要使用这些可变状态,可以使用ThreadLocal机制解决,为每个线程单独生成一份变量副本,独立操作,互不影响。 如何解决 […]

龙生   17 Dec 2025
View Details

关于.Net Core中上传文件大小限制(微服务)

由于在工作中遇到了上传大型文件,出现了以下错误

我查询了国内很多同行给的解决方案,这些都对微服务这块没用,于是去浏览了国外的解决方案:https://stackoverflow.com/questions/51158079/microsoft-aspnetcore-server-kestrel-core-badhttprequestexception-request-body-t。里面其中一个方案:在Startup.cs中加以下代码

当然里面还有关于IIS和Web的解决方案,详情可以移步过去看一看   from:https://blog.csdn.net/Cool_ketchup/article/details/118489652

龙生   09 Dec 2025
View Details

JVM学习笔记

大厂面试题 支付宝 支付宝三面:JVM性能调优都做了什么?   小米 有做过JVM内在优化吗?从SQL、JVM、架构、数据库4个方面讲讲优化思路   蚂蚁金服 JVM的编译优化 JVM性能调优都做了什么? JVM诊断调优工具用过哪些? 二面:JVM怎样调优,堆内存、栈空间设置多少合适? 三面:JVM相关的分析工具使用过哪些?具体的性能调优步骤如何?   阿里 如何进行JVM调优?有哪些方法? 如何理解内存泄漏问题?有哪些情况会导致内存泄漏,如何解决?   字节跳动 三面:JVM如何调优,参数怎么调?   拼多多 从SQL、JVM、架构、数据库4个方面讲讲优化思路   京东 JVM诊断调优工具用过哪些? 每秒几十万并发的秒杀系统为什么会频繁发生GC? 日均百万级交易系统如何优化JVM? 线上生产系统OOM如何监控、定位 与解决? 高并发系统如何基于G1垃圾回收器优化性能?   为什么要调优? 防止出现OOM 解决OOM 减少GC、Full GC出现频率   监控的依据 运行日志 异常堆栈 GC日志 线程快照 堆转储快照   性能调优的步骤? 性能监控 一种以非强行或入侵方式收集或查看应用运营性能数据的活动 问题症状 GC频繁 CPU Load过高 OOM 内存泄漏 死锁 响应时间较长 性能分析 一种以侵入方式收集运行性能数据的活动,它会影响应用的吞吐量或响应。 方法 打印GC日志,通过GCViewer或者http://gceasy.io来分析日志信息 灵活运用命令行工具,jstack、jmap、jinfo等 dump出堆文件,使用内存分析工具分析 使用阿里Arthas,或jconsole,JVisualVM来实时查看JVM状态 jstack查看堆栈信息 性能调优 适当增加内存,根据业务背景选择垃圾回收器 优化代码,控制内存使用 增加机器,分散节点压力 合理设置线程池线程数量 使用中间件提高程序效率,比如缓存,消息队列等   性能指标 停顿时间或响应时间 打开一个站点:几秒 数据库查询一条记录(有索引):十几毫秒 机械磁盘一次寻址定位 :4毫秒 从机械磁盘顺序读取1M数据:2毫秒 从SSD顺序读取1M数据:0.3毫秒 从Redis读取一条数据:0.5毫秒 从内存读取1M数据:十几微秒 Java程序本地方法调用:几微秒 网络传输2KB数据:1微秒 启动参数:GC回收最大暂停时间 -XX:MaxGCPauseMillis 吞吐量:单位时间内完成的工作量 在GC中,运行用户代码的时间占总运行时间的比例(总运行时间=程序运行时间+内存回收时间) 启动参数:-XX:GCTimeRatio=n,吞吐量为:1-1/(1+n) […]

龙生   26 Nov 2025
View Details

Java术语

Java Development Kit(JDK):编写Java程序的程序员使用的软件 Java Runtime Environment(JRE):运行Java程序的用户使用的软件 Server JRE:在服务器上运行Java程序的软件 Standard Edition(SE):用于桌面或简单服务器应用的Java平台 Enterprise Edition(EE):用于复杂服务器应用的Java平台 Micro Edition(ME):用于手机和其他小型设备的Java平台 Java FX:用于图形化用户界面的一个替代工具包,在Oracle的Java SE发布版本中提供 OpenJDK:Java SE的一个免费开源实现,不包含浏览器集成或JavaFX Java 2(J2):一个过时的术语,用于描述1998 ~ 2006年之间的Java版本 Software Development Kit(SDK):一个过时的术语,用于描述1998 ~ 2006年之间的JDK Update(u):Oracle的术语,表示bug修正版本 NetBeans:Oracle的集成开发环境

龙生   26 Nov 2025
View Details

Java白皮書的關鍵術語

簡單性 面向對象 分佈式 健壯性 安全性 體系結構中立 可移植性 解釋型 高性能 多綫程 動態性

龙生   18 Nov 2025
View Details

SpringBoot的AOP(@aspect注解)的简单使用

filter、interceptor、AOP的区别
filter作用于servlet
(通常指spring的)interceptor,拦截的对象是URL
AOP作用的对象可以是任何一个方法

龙生   18 Nov 2025
View Details

SpringBoot中使用Aspect实现切面,超详细

Spring中的切面Aspect,这是Spring的一大优势。面向切面编程往往让我们的开发更加低耦合,也大大减少了代码量,同时呢让我们更专注于业务模块的开发,把那些与业务无关的东西提取出去,便于后期的维护和迭代。

龙生   18 Nov 2025
View Details

单例模式的七种写法

什么意思呢?就是当前进程确保一个类全局只有一个实例。

那单例模式有什么好处呢?[1]

单例模式在内存中只有一个实例,减少了内存开支
单例模式只生成一个实例,所以减少了系统的性能开销
单例模式可以避免对资源的多重占用
单例模式可以在系统设置全局的访问点
那单例模式是银弹吗?它有没有什么缺点?

单例模式一般没有接口,扩展很困难
单例模式不利于测试
单例模式与单一职责原则有冲突
那什么情况下要用单例模式呢?

要求生成唯一序列号的环境
在整个项目中需要一个共享访问点或共享数据
创建一个对象需要消耗的资源过多
需要定义大量的静态常量和静态方法(如工具类)的环境

龙生   27 Sep 2025
View Details

Java volatile关键字最全总结:原理剖析与实例讲解(简单易懂)

volatile是Java提供的一种轻量级的同步机制。Java 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量,相比于synchronized(synchronized通常称为重量级锁),volatile更轻量级,因为它不会引起线程上下文的切换和调度。但是volatile 变量的同步性较差(有时它更简单并且开销更低),而且其使用也更容易出错。

龙生   27 Sep 2025
View Details
1 2 282