Java基础面试题
Java 基础 40语言特性 12Q1:Java 语言的优点?① 平台无关性,摆脱硬件束缚,”一次编写,到处运行”。
② 相对安全的内存管理和访问机制,避免大部分内存泄漏和指针越界。
③ 热点代码检测和运行时编译及优化,使程序随运行时间增长获得更高性能。
④ 完善的应用程序接口,支持第三方类库。
Q2:Java 如何实现平台无关?JVM: Java 编译器可生成与计算机体系结构无关的字节码指令,字节码文件不仅可以轻易地在任何机器上解释执行,还可以动态地转换成本地机器代码,转换是由 JVM 实现的,JVM 是平台相关的,屏蔽了不同操作系统的差异。
语言规范: 基本数据类型大小有明确规定,例如 int 永远为 32 位,而 C/C++ 中可能是 16 位、32 位,也可能是编译器开发商指定的其他大小。Java 中数值类型有固定字节数,二进制数据以固定格式存储和传输,字符串采用标准的 Unicode 格式存储。
Q3:JDK 和 JRE 的区别?JDK: Java Development Kit,开发工具包。提供了编译运行 Java 程序的各种工具,包括编译器、JRE 及常用类库,是 J ...
MySQL及Redis面试题
MySQL 33逻辑架构 13Q1:MySQL 的逻辑架构了解吗?第一层是服务器层,主要提供连接处理、授权认证、安全等功能。
第二层实现了 MySQL 核心服务功能,包括查询解析、分析、优化、缓存以及日期和时间等所有内置函数,所有跨存储引擎的功能都在这一层实现,例如存储过程、触发器、视图等。
第三层是存储引擎层,存储引擎负责 MySQL 中数据的存储和提取。服务器通过 API 与存储引擎通信,这些接口屏蔽了不同存储引擎的差异,使得差异对上层查询过程透明。除了会解析外键定义的 InnoDB 外,存储引擎不会解析 SQL,不同存储引擎之间也不会相互通信,只是简单响应上层服务器请求。
Q2:谈一谈 MySQL 的读写锁在处理并发读或写时,可以通过实现一个由两种类型组成的锁系统来解决问题。这两种类型的锁通常被称为共享锁和排它锁,也叫读锁和写锁。读锁是共享的,相互不阻塞,多个客户在同一时刻可以同时读取同一个资源而不相互干扰。写锁则是排他的,也就是说一个写锁会阻塞其他的写锁和读锁,确保在给定时间内只有一个用户能执行写入并防止其他用户读取正在写入的同一资源。
在实际的数据库系统中,每时每刻都在发生 ...
前端的一些笔记
div填充整个页面
解决小白边
1234body{ margin: 0; padding: 0;}
div位置移动12345.box-card1 { width: 520px; margin-left: 430px; margin-top: 140px;}
背景图填充整个div123456.login{ height: 100%; width: 100%; position: fixed; background-image: url("https://cdn.jsdelivr.net/gh/839777408/tupian/img/3标签.jpg");}
Druid数据源的使用
目前市场上最主流的数据源,是阿里巴巴计算平台事业部出品,为监控而生的数据库连接池。
官网地址:https://github.com/alibaba/druid
中文文档:https://github.com/alibaba/druid/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
整合Druid的两种方式:
导入相关依赖进行自定义配置
使用starter场景启动器自动配置
自定义方式导入依赖123456<!-- https://mvnrepository.com/artifact/com.alibaba/druid --><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.4</version></dependency>
基本配置123456spring: datasource: dr ...
单元测试
JUnit5 的变化Spring Boot 2.2.0 版本开始引入 JUnit 5 作为单元测试默认库
作为最新版本的JUnit框架,JUnit5与之前版本的Junit框架有很大的不同。由三个不同子项目的几个不同模块组成。
JUnit 5 = JUnit Platform + JUnit Jupiter + JUnit Vintage
JUnit Platform: Junit Platform是在JVM上启动测试框架的基础,不仅支持Junit自制的测试引擎,其他测试引擎也都可以接入。
JUnit Jupiter: JUnit Jupiter提供了JUnit5的新的编程模型,是JUnit5新特性的核心。内部包含了一个测试引擎,用于在Junit Platform上运行。
JUnit Vintage: 由于JUint已经发展多年,为了照顾老的项目,JUnit Vintage提供了兼容JUnit4.x,Junit3.x的测试引擎。
注意:
SpringBoot 2.4 以上版本移除了默认对 Vintage 的依赖。如果需要兼容JUnit4,则需自行引入(不能使用JUnit4的功能 ...
Mybatis问题解决
There is no getter for property前两天工作中遇到这个异常,一开始还以为是实体类漏写set/get方法,经排查不是。
异常大概如下:
1org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'user' in 'class top.nanzx.entity.User'
dao层代码大概如下:
12@Select("SELECT * FROM users WHERE id = #{user.id}")User getUser(User user)
解决:
12@Select("SELECT * FROM users WHERE id = #{user.id}")User getUser(@Par ...
前后端分离项目的部署
Windows环境部署前端
axios.defaults.baseURL = "http://localhost:8080",配置的是前端访问后端接口的服务。
前端部署还需考虑一个问题:打包之后项目资源引用路径,比如我们打包后链接是否需要带项目名称等。按照Vue官方的部署说明,我们需要添加一个vue.config.js文件:module.exports = { publicPath: '/' }。
执行打包命令:npm run build,把打包出来的dist文件夹内的所有文件(不包括dist文件夹)都复制到nginx的html文件夹中。
启动nginx,然后浏览器输入http://localhost,就可以访问到我们的vue项目,nginx默认端口是80。
我们点击任意刷新界面,这时候出现了404,这是因为刷新之后nginx就找不到路由了。
vue项目的入口是index.html文件,nginx路由的时候都必须要先经过这个文件,所以我们得给nginx定义一下规则,让它匹配不到资源路径的时候,先去读取index.ht ...
博客项目的总结
花了四天左右用刚学的前后端分离实现了一个博客,由于只是尝试新技术,所以做得很简陋。
项目地址:http://47.107.129.136/
浏览器异常:TypeError问题描述封装好的request.js:
12345678910111213141516171819202122232425262728import axios from 'axios'export function request(config) { // 1.创建axios的实例 const instance = axios.create({ baseURL: 'http://127.0.0.1:8181', timeout: 5000 }) // 2.axios的拦截器 // 2.1.请求拦截的作用 instance.interceptors.request.use(config => { return config }, err => { console.log(e ...