Java开发实习面试笔试题(含答案)
在广州一家中大公司面试(BOSS标注是1000-9999人,薪资2-3k),招聘上写着Java开发,基本没有标注前端要求,但是到场知道是前后端分离人不分离。开始先让你做笔试(12道问答+4道SQL题),接着面试也是八股文之类的,没有问项目,没有做算法,现分享笔试和面试题目给大家做参考。(基础的没复习忘了不会,只会几道感觉已经寄了,最重要的是前端基本不会)
一、笔试内容
1.Java有哪些数据类型,什么是自动装箱和拆箱?
Java有两种类型:基本数据类型和引用数据类型
(1)byte(1字节);short(2字节);int(4字节);long(8字节);float(4字节);double(8字节);char(2字节);boolean(只有两个值true或false);
字节为n, 范围为 -2^(n-1) ~ 2^(n-1) - 1
(2)类(class):如String,Employee等;接口(Interface);数组(Array)
(3)自动装箱是Java编译器自动将基本数据类型转化为对应的包装类对象的过程。例如:
int num = 5;
Integer boxedNum = num; // 自动装箱
拆箱(Unboxing)**是自动将包装类对象转换为基本数据类型的过程。例如:
Integer boxedNum = 5;
int num = boxedNum; // 拆箱
这种机制使得 Java 可以在基本数据类型和其对应的包装类之间进行自动转换,从而简化代码。
2.HashMap和Hashtable有什么区别?
HashMap和Hashtable都是Java中用于存储键值对的哈希表类,区别如下:
(1)线程安全:HashMap不是线程安全的,如果多个线程并发访问HahsMap,并且至少有一个线程做了修改,他必须通过外部同步来保证线程安全,否则可能会导致数据不一致的情况;而Hashtable是线程安全的,他的方法都被synchronized修饰,可以在多线程环境下安全的被访问;
(2)性能:HashMap性能通常优于Hashtable,特别是在单线程环境下;而Hashtable由于方法上都有同步锁,性能较差;
(3)Null值:HashMap允许一个null值(键唯一性)和多个null值;而Hashtable不允许出现null键或null值。
3.String 和 StringBuilder有什么区别?
String 和 StringBuilder 都用于表示和操作字符串,但它们在实现和使用上有一些关键的区别。以下是它们的主要区别:
(1)不可能性和可变性:String是不可变的,一旦被创建,它的内容就不能被更改。如果对String进行修改操作(比如拼接),实际上是创建了一个新的String对象;StringBuilder是可变的,它允许直接修改字符串的内容,而不需要创建新的对象;
(2)性能:由于String不可变,每次修改都会创建一个新的对象,会导致性能的损失;StringBuilder直接修改原值,比String更高效;
(3)线程安全性:String是线程安全的,因为它不可变不会被修改,多个线程可以共享一个String对象;而StringBuilder是线程不安全的,他没有同步机制,多线程环境下同时修改同一个StringBuilder可能会导致数据不一致。
4.int 和 Integer有什么区别?
(1)数据类型:int是Java中的基本数据类型;Integer是Java中的引用类型,是一个包装类;
(2)存储方式:int直接存储数值;Integer是个对象,它内部存储了一个int值;因此int性能更好
(3)可否为null:int不能为null,只能存储一个具体的整数值;Integer可以为null,表示没有值或空的情况
5.error 和 exception有什么区别?
(1)定义和分类:error是指验证的错误,通过是由JVM级别的错误引起的,这些错误通常是无法控制和处理的,比如内存溢出、线程死锁等;exception是指程序中的问题或异常情况,通常是由程序代码中的错误或不符合预期的情况引起的;
(2)继承关系:Error是Throwable类的一个子类,表示JVM无法恢复的严重问题;exception也是Throwable的子类,表示程序中的异常问题,exception可以分为受检查异常(Checked Exception)和运行时异常(Runtime Exception)
(3)能否恢复:Error是不可恢复的,它们代表了无法控制的系统级错误,程序通常无法处理这些错误,JVM 会退出或导致程序崩溃;Exception通常是可恢复的,特别是 Exception 类中的受检查异常。程序员可以捕获并处理这些异常,恢复程序的正常运行。
6.抽象类和接口有什么区别?
抽象类(Abstract Class)和接口(Interface)在 Java 中都用于定义类的公共行为规范,但它们有一些显著的区别。以下是抽象类和接口的主要区别:
(1)继承关系:
-
抽象类:抽象类是一个不能实例化的类,用于定义子类的公共行为和属性。一个类只能继承一个抽象类(Java 不支持多继承)。
-
接口:接口是一个完全抽象的类,只包含常量和抽象方法。一个类可以实现多个接口(Java 支持接口的多实现)。
(2)定义方法:
抽象类:使用 abstract 关键字来声明抽象类,类中可以有普通方法(有实现)和抽象方法(没有实现)。抽象类可以有成员变量、构造方法和其他方法。
public abstract class Animal {public abstract void makeSound(); // 抽象方法public void sleep() { // 普通方法System.out.println("Sleeping");}
}
接口:使用 interface 关键字来声明接口,接口中的方法默认是 public 和 abstract,并且不能包含方法的实现(Java 8 之后,接口可以包含默认方法 default 和静态方法 static)。接口只能有常量(public static final),不能有实例变量。
public interface Animal {void makeSound(); // 抽象方法default void sleep() {System.out.println("Sleeping");}
}
(3)方法实现:
-
抽象类:可以包含已经实现的方法,也可以有抽象方法(没有实现)。抽象方法的子类必须实现所有的抽象方法,除非该子类也是抽象类。
-
接口:接口中的方法默认是 抽象的,必须由实现接口的类来实现方法。Java 8 引入了 默认方法(default method),允许接口中有方法的实现。
7.同步代码(方法)和同步代码块有什么区别?
同步代码和同步代码块在 Java 中用于保证多线程环境下的数据一致性和线程安全。它们的区别主要体现在 作用范围 和 使用方式 上。以下是它们的主要区别:
(1)同步方法是指在方法定义上使用 synchronized 关键字来标识,这意味着在方法执行时,必须保证同一时刻只有一个线程可以执行该方法。
(2)同步代码块是通过 synchronized 关键字来修饰某一段代码,而不是整个方法。它允许在多线程环境中更加灵活地控制同步的范围,只锁定需要同步的部分代码。

8.创建线程的方式有哪些,你喜欢哪一种,为什么?
(1)继承Thread类并重写run( ) 方法;
(2)实现Runnable接口并实现run方法;
(3)实现Callable接口并实现call( )方法。两个接口的区别为:Runnable接口的run方法没有返回值,而Callable接口是个泛型,它的call方法有返回值,可以利用Futrue来获取结果;Callable接口的call方法允许抛出异常,而Runable接口的run方法的异常只能在内部处理(try-catch),不能向上抛。
(4)创建线程池,使用submit方法提交任务,shutdown方法关闭线程池。
创建线程池比较常用,因为它避免了频繁的创建和销毁线程的开销,可以复用线程,适用于高并发的场景;
9.数据库的优化?
(1)表设计优化
- 选择合适的数据类型,尽量使用最小的数据类型(比如使用INT替代BIGINT,使用CHAR替代VARCHAR)来减少存储和查询成本;
- 分区表:对于数据量极大的表可以考虑分区表,将表按某些规则分割成多个小表,提高查询效率;
- 主从复制、读写分离:如果数据库读的操作比较多,为了避免写操作所造成的性能影响,可以采用读写分离的架构;
(2)索引优化:
- 创建适当的索引,避免过多的索引,查照索引的创建原则;
- 覆盖索引:使用索引覆盖查询,避免回表,调高效率;
(3)SQL语句优化:
- 尽量明确指定需要的列,避免使用SELECT *,以减少不必要的数据传输;
- SQL语句要避免造成索引失效的写法;
- 尽量用union all 替代 union ,union多了一次过滤,效率较低;
- 避免子查询,特别是当子查询返回大量数据时,可以考虑JOIN或WITH子句替代
10.怎么选择表中的前50条数据?
SELECT * FROM table_name LIMIT 50;
11.final, finally, finalize有什么区别?
final、finally 和 finalize 都是 Java 中的关键字或术语,但它们的功能和使用场景完全不同。下面是这三者的区别:
1. final
final 是一个修饰符,用于声明常量、方法、类或变量,表示这些元素是不可更改或不可继承的。它有四种主要用途:
-
修饰变量(常量): 当
final修饰变量时,表示该变量的值一旦赋值就不能更改(即常量)。如果是引用类型的变量,final表示引用不可修改,但引用对象的内容可以修改。
final int MAX_VALUE = 100;
MAX_VALUE = 200; // 编译错误,因为 MAX_VALUE 是常量,不能改变其值
修饰方法: 当 final 修饰方法时,表示该方法不能被子类重写(Override)。
public class Parent {public final void show() {System.out.println("This is a final method.");}
}public class Child extends Parent {@Overridepublic void show() { // 编译错误,无法重写父类中的 final 方法System.out.println("Child method.");}
}
修饰类: 当 final 修饰类时,表示该类不能被继承。
public final class MyClass {// 类的内容
}// 编译错误,无法继承 final 类
public class SubClass extends MyClass {
}
修饰参数: 当 final 修饰方法参数时,表示该参数的值在方法内部不能改变。
public void myMethod(final int value) {value = 10; // 编译错误,value 是 final,不能修改
}
2. finally
finally 是一个用于异常处理的块,它总是会执行,不管是否发生异常。finally 主要用于释放资源、清理操作等,无论是否发生异常,都确保资源被正确释放。
finally语句块通常与try-catch配合使用,确保某些资源的清理操作(如文件关闭、数据库连接关闭等)始终会执行,即使try块中发生了异常。-
public void myMethod() {try {// 可能抛出异常的代码int result = 10 / 0;} catch (ArithmeticException e) {System.out.println("Error: " + e.getMessage());} finally {System.out.println("This will always execute, whether or not an exception occurs.");} }输出:
-
Error: / by zero This will always execute, whether or not an exception occurs.如果
try或catch中有return语句,finally块仍然会执行,且在finally块执行之后再返回结果。
3. finalize
finalize 是 Object 类的一个方法,用于在对象被垃圾回收之前执行清理操作。该方法在垃圾回收器准备销毁对象之前调用,通常用于释放资源,如关闭文件流或数据库连接等。它不是强制执行的,不一定每次都会被调用。
finalize()方法通常不建议使用,因为垃圾回收的时机不确定,而且无法保证一定会被调用。现在更多推荐使用try-with-resources语句和AutoCloseable来进行资源管理。-
public class MyClass {@Overrideprotected void finalize() throws Throwable {System.out.println("finalize() method called. Resource cleanup...");super.finalize();} }finalize()可能会被 JVM 在垃圾回收时自动调用,或者由开发者显式调用,但这不应作为释放资源的主要方法,因为垃圾回收的时机不确定。
12. char 和 varchar有什么区别?
char 和 varchar 都是用于存储字符数据的 SQL 数据类型,但它们有一些显著的区别,主要体现在 存储方式、占用空间 和 性能 等方面。以下是它们的详细区别:
1. 存储方式
-
char:用于存储定长(固定长度)的字符串。无论实际存储的数据的长度如何,都会使用指定的长度来存储数据。即使存储的字符串长度小于定义的长度,char也会在末尾填充空格(通常是空格字符)。- 例如,定义
char(10),如果插入的数据是"abc",它会自动补充 7 个空格,使得存储的实际数据变为"abc "。
- 例如,定义
-
varchar:用于存储变长(可变长度)的字符串。它只会根据实际存储的数据的长度来占用空间,不会填充空格。- 例如,定义
varchar(10),如果插入的数据是"abc",它只会占用 3 个字符的空间,而不会填充空格。
- 例如,定义
2. 占用空间
-
char:无论实际存储的字符串长度是多少,它都会占用固定的字节数。比如定义char(10),不管你存储的是 3 个字符还是 10 个字符,它都会占用 10 个字符的空间。 -
varchar:只会根据实际存储的数据长度来占用空间,不会浪费空间。例如,定义varchar(10)存储 3 个字符时,只会占用 3 个字符的空间。
3. 性能
-
char:由于是定长字段,因此在读取数据时,数据库知道每个字段的长度是固定的,因此读取速度可能比varchar更快,尤其是在存储大量小数据(如固定格式的字符数据)时。 -
varchar:由于是变长字段,数据库需要存储每个字符串的实际长度,因此可能会有一些额外的开销。不过,当存储的字符串长度差异很大时,varchar更节省空间,性能表现会更好。
13.一个接口可以实现另一个接口吗?
在 Java 中,一个接口 不能实现 另一个接口,但它可以 继承 另一个接口。
14. 一个类可以继承多个类吗?
在 Java 中,一个类 不能继承多个类。这是 Java 的一个重要特性,称为 单继承。也就是说,一个类只能继承自一个直接父类。
15.String a = new String("123"); 这条语句创建了几个String Object?
在 Java 中,语句 String a = new String("123"); 如果字符串常量池已经存在就创建一个,不存在就创建了 两个 String 对象,分别是:
-
一个字符串常量对象:
"123"是一个字符串常量。每当你在代码中使用字符串字面量(如"123")时,Java 会检查字符串常量池中是否已经存在该字符串。如果没有,它会创建一个新的字符串对象并将其存储在字符串常量池中。 -
一个新的
String对象:new String("123")会创建一个新的String对象,该对象是通过构造函数显式地创建的,并且该对象的内容是"123"。这个对象是在堆内存中创建的。
"123":在字符串常量池中创建了一个字符串对象(如果之前没有创建过)。new String("123"):在堆内存中创建了一个新的String对象,内容为"123",并且该对象引用了常量池中的"123"。
二、面试内容
1.能说一下你对redis的理解吗,几种数据缓存的应用为什么要使用redis?
对 Redis 的理解
Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,常用作数据库、缓存和消息中间件。它支持多种数据结构,比如 字符串、哈希、列表、集合、有序集合、位图、HyperLogLog 和 地理位置 等,提供了高性能的数据存取能力,广泛应用于 缓存、会话管理、分布式锁、消息队列 等场景。
Redis 主要特点包括:
- 高性能:通过内存存储,Redis 在数据读写方面速度非常快,能够支持每秒数十万次读写操作。
- 支持丰富的数据类型:不仅支持常见的字符串类型,还支持哈希、列表、集合等多种复杂的数据结构。
- 持久化机制:Redis 提供了两种持久化方式(RDB 和 AOF),可以根据需求选择是否持久化数据。
- 分布式特性:支持主从复制、分片和高可用集群等功能,能够在分布式系统中有效地扩展。
- 支持事务:通过 Redis 提供的事务机制,可以保证多个命令的原子性执行。
为什么要使用 Redis 进行数据缓存
Redis 被广泛用作缓存系统,原因如下:
-
高性能:
- Redis 作为一个基于内存的数据存储,读取和写入操作速度极快,适用于需要高并发和快速响应的场景。例如,缓存数据库查询结果或频繁访问的数据时,Redis 能显著提高性能,减少数据库压力。
-
减少数据库负载:
- 在高并发系统中,数据库可能成为性能瓶颈。通过将热数据缓存在 Redis 中,可以有效减轻数据库的压力,避免频繁的磁盘访问和复杂查询,减少数据库负载,提高整个系统的响应速度和吞吐量。
-
支持丰富的数据结构:
- Redis 提供了多种数据结构(如哈希、列表、集合、排序集合等),这使得它不仅仅是一个简单的 key-value 存储。可以根据具体需求选择不同的数据结构,提升缓存系统的灵活性。
-
分布式特性:
- Redis 支持主从复制和分布式集群,能够在分布式架构中横向扩展,满足大规模数据缓存的需求。可以通过 Redis Cluster 实现数据的分片,保证数据的高可用性和负载均衡。
-
持久化机制:
- Redis 提供了持久化选项(RDB 快照和 AOF 日志),即使发生故障,数据也不会丢失,适合需要缓存数据持久化的场景。比如,存储用户的购物车数据,尽管是缓存,但如果系统宕机,用户数据依然可以恢复。
2.说一下spring的核心是什么?
-
依赖注入(Dependency Injection,DI)
- 依赖注入是 Spring 框架的核心功能之一,它通过控制反转(IoC,Inversion of Control)来实现。传统的开发中,组件通常会显式地创建其依赖的对象,而 Spring 的 IoC 容器则负责管理对象的生命周期及其依赖关系。
- 简化开发:通过将对象的创建和管理交给 Spring 容器,开发者只需要关注业务逻辑,而无需手动创建和管理对象的实例。
- 解耦:对象之间的依赖关系由 Spring 容器管理,而不是硬编码在代码中,这样可以降低模块之间的耦合度,提高代码的灵活性和可测试性。
依赖注入方式:
- 构造器注入:通过构造器传递依赖对象。
- Setter 注入:通过 setter 方法注入依赖对象。
- 字段注入:直接在字段上使用注解来注入依赖。
-
面向切面编程(Aspect-Oriented Programming,AOP)
- AOP 允许通过横切关注点(如日志、事务管理等)来分离业务逻辑,减少代码重复。Spring 的 AOP 功能使得开发者可以在不修改核心业务代码的情况下添加额外的功能(例如日志记录、性能监控、事务管理等)。
- 切面(Aspect):AOP 的核心组成部分,表示对特定功能(如日志、事务等)的抽象。
- 通知(Advice):定义在切点上执行的操作。
- 切点(Joinpoint):程序执行过程中的某个点,例如方法调用或方法执行之前、之后等。
- 织入(Weaving):将切面应用到目标对象的过程。
-
Spring 的 IoC 容器
- IoC 容器是 Spring 的核心容器,它负责管理 Bean 的创建、配置和生命周期。容器通过配置文件(如 XML 配置文件)或注解(如
@Component、@Autowired等)来扫描和注入依赖。 - Bean:在 Spring 中,管理的对象被称为 Bean。Spring 容器负责这些 Bean 的实例化、配置和管理。
- ApplicationContext:
ApplicationContext是 Spring 容器的一个实现,提供了更强大的功能(如事件传播、国际化支持等)。
- IoC 容器是 Spring 的核心容器,它负责管理 Bean 的创建、配置和生命周期。容器通过配置文件(如 XML 配置文件)或注解(如
3.说一下Linux的一些基本命令?
Linux 是一个功能强大的操作系统,广泛应用于服务器和开发环境中。了解一些基本的 Linux 命令对于日常的系统管理和开发工作非常重要。下面是一些常用的 Linux 基本命令及其功能:
文件和目录操作命令
-
ls:列出目录内容ls:列出当前目录的文件和文件夹。ls -l:显示详细的文件信息(权限、所有者、大小、修改时间等)。ls -a:显示所有文件,包括隐藏文件(以点.开头的文件)。ls -lh:显示详细信息,并且以可读性更高的方式显示文件大小(例如:KB、MB)。
-
cd:改变目录cd <目录路径>:切换到指定目录。cd ..:返回到上一级目录。cd ~:切换到用户的主目录。
-
pwd:显示当前工作目录的路径pwd:打印当前的工作目录路径。
-
mkdir:创建目录mkdir <目录名>:创建一个新目录。
-
rmdir:删除空目录rmdir <目录名>:删除指定的空目录。
-
rm:删除文件或目录rm <文件名>:删除文件。rm -r <目录名>:递归删除目录及其内容。rm -f <文件名>:强制删除文件,不询问确认。
-
touch:创建空文件或更改文件时间戳touch <文件名>:创建一个空文件,或者更新现有文件的访问时间和修改时间。
-
cp:复制文件或目录cp <源文件> <目标文件>:复制文件。cp -r <源目录> <目标目录>:递归复制目录。
-
mv:移动或重命名文件/目录mv <源文件/目录> <目标路径>:将文件或目录移动到指定路径,或者重命名文件。
-
find:查找文件find <路径> -name <文件名>:在指定路径下查找指定名称的文件。find . -name "*.txt":在当前目录及其子目录中查找所有.txt文件。
文件内容查看和操作命令
-
cat:查看文件内容cat <文件名>:查看文件的内容。
-
more:分页显示文件内容more <文件名>:分页显示文件内容,适用于文件内容较多的情况。
-
less:分页显示文件内容(比more更强大)less <文件名>:与more类似,但可以向前和向后滚动,支持更多的交互功能。
-
head:查看文件的开头部分head <文件名>:查看文件的前 10 行。head -n 20 <文件名>:查看文件的前 20 行。
-
tail:查看文件的末尾部分tail <文件名>:查看文件的最后 10 行。tail -n 20 <文件名>:查看文件的最后 20 行。tail -f <文件名>:实时查看文件的新增内容(常用于日志文件)。
-
grep:在文件中查找指定的字符串grep <关键词> <文件名>:查找文件中包含指定关键词的行。grep -r <关键词> <目录>:递归查找目录中的文件。
-
wc:统计文件中的字数、行数和字符数wc <文件名>:输出文件的行数、字数、字符数。wc -l <文件名>:仅统计文件的行数。
文件权限和所有者管理命令
-
chmod:修改文件或目录的权限chmod <权限> <文件名>:修改文件或目录的权限。chmod 755 <文件名>:将文件权限设置为可读、可写、可执行(对于所有者),可读、可执行(对于其他用户)。
-
chown:修改文件或目录的所有者chown <用户>:<用户组> <文件名>:修改文件或目录的所有者和用户组。
-
chgrp:修改文件或目录的用户组chgrp <用户组> <文件名>:将文件或目录的用户组更改为指定组。
系统信息命令
-
ps:查看当前正在运行的进程ps:显示当前终端的进程信息。ps aux:显示所有进程信息。ps -ef:显示所有进程信息(Linux 系统常用格式)。
-
top:实时查看系统资源使用情况top:实时显示进程和系统资源的使用情况(CPU、内存等)。
-
df:查看磁盘空间df:显示文件系统的磁盘空间使用情况。df -h:以人类可读的格式(如 GB、MB)显示磁盘空间。
-
du:查看磁盘使用情况du <目录>:查看目录及其子目录的磁盘使用情况。du -sh <目录>:显示目录的总大小。
-
free:查看内存使用情况free:显示系统的内存使用情况。free -h:以人类可读的格式显示内存使用情况。
-
uptime:查看系统运行时间和负载uptime:显示系统的运行时间、当前时间、用户数和系统负载。
-
hostname:查看或设置主机名hostname:显示当前系统的主机名。hostname <新主机名>:设置系统的主机名。
网络命令
-
ping:测试与目标主机的网络连接ping <IP地址或域名>:发送 ICMP 请求,检查与目标主机的连接是否正常。
-
ifconfig(旧版命令)/ip(新版本命令):查看或配置网络接口ifconfig:显示网络接口的配置信息。ip a:显示网络接口信息。ip addr show:显示 IP 地址和网络接口的信息。
-
netstat:显示网络连接、路由表、接口统计等信息netstat:显示所有网络连接的状态。netstat -tuln:显示所有正在监听的端口。
-
curl:与服务器进行数据交互curl <URL>:发送 HTTP 请求并显示返回的响应。curl -I <URL>:仅获取 HTTP 响应头。
-
ssh:远程登录到服务器ssh <用户名>@<主机IP>:通过 SSH 协议远程登录到指定主机。
进程管理命令
-
kill:终止进程kill <进程ID>:发送信号终止指定的进程。kill -9 <进程ID>:强制终止指定进程。
-
killall:根据进程名终止进程killall <进程名>:终止所有名为<进程名>的进程。
-
bg:将任务放到后台执行bg <作业号>:将暂停的作业放到后台继续执行。
-
fg:将任务放到前台执行fg <作业号>:将后台的作业调到前台。
压缩和解压命令
-
tar:打包和解包tar -cvf <压缩包名> <目录>:将指定目录打包成.tar文件。tar -xvf <压缩包名>:解压.tar文件。
-
gzip/gunzip:压缩和解压.gz文件gzip <文件名>:压缩文件成.gz格式。gunzip <文件名.gz>:解压
4.你会JS吗(不会)
相关文章:
Java开发实习面试笔试题(含答案)
在广州一家中大公司面试(BOSS标注是1000-9999人,薪资2-3k),招聘上写着Java开发,基本没有标注前端要求,但是到场知道是前后端分离人不分离。开始先让你做笔试(12道问答4道SQL题)&…...
什么叫不可变数据结构?
不可变数据结构(Immutable Data Structures)是指一旦创建之后,其内容就不能被修改的数据结构。这意味着任何对不可变数据结构的“修改”操作实际上都会返回一个新的数据结构,而原始数据结构保持不变。 一、不可变数据结构的核心特点 不可变性:一旦创建后,数据结构的内容…...
3D与2D机器视觉机械臂引导的区别
3D与2D机器视觉在机械臂引导中的主要区别如下: 数据维度 2D视觉:仅处理平面图像,提供X、Y坐标信息,无法获取深度(Z轴)数据。 3D视觉:处理三维空间数据,提供X、Y、Z坐标及物体的姿态…...
Effective Go-新手学习Go需要了解的知识
不知不觉从事Golang开发已有4+年了,回顾自己的成长经历,有很多感悟和心得。如果有人问我,学习Golang从什么资料开始,我一定给他推荐"Effective Go"。《Effective Go》是 Go 语言官方推荐的编程风格和最佳实践指南,其结构清晰,内容涵盖 Go 的核心设计哲学和常见…...
解析DrugBank数据库数据|Python
一、DrugBank 数据库简介 DrugBank 是一个综合性的生物信息学和化学信息学数据库,专门收录药物和靶点的详细信息。它由加拿大阿尔伯塔大学的 Wishart 研究组 维护,提供化学、药理学、相互作用、代谢、靶点等多方面的药物数据。DrugBank 结合了实验数据和…...
Day3 25/2/16 SUN
【一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解(马士兵)】https://www.bilibili.com/video/BV13g41157hK?p4&v…...
专题 - Java Stream API
概述 分类 数据源 任何位置。 如:集合、数组、文件、随机数、 Stream 静态工厂等。 支持的数据类型 整型、长整型、双精度浮点型基本数据类型。引用数据类型。流管道的数据处理流程 流管道必须要有终止操作。否则永不执行,只是一个静默的无操作指令。流管道是懒运算的。当执…...
【前端框架】vue2和vue3的区别详细介绍
Vue 3 作为 Vue 2 的迭代版本,在性能、语法、架构设计等多个维度均有显著的变革与优化。以下详细剖析二者的区别: 响应式系统 Vue 2 实现原理:基于 Object.defineProperty() 方法实现响应式。当一个 Vue 实例创建时,Vue 会遍历…...
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3)
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(3) 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.3 创建和使用工具Tools11.3.1 默认工具箱与load_tool11.3.2 创建新工具11.3.3 管理代理的工具箱toolbox11.3…...
路由基础 | 路由引入实验 | 不同路由引入方式存在的问题
注:本文为 “路由基础 | 路由表 | 路由引入” 相关文章合辑。 未整理去重。 路由基本概念 1—— 路由表信息、路由进表以及转发流程、最长掩码匹配原则 静下心来敲木鱼已于 2023-11-26 14:06:22 修改 什么是路由 路由就是指导报文转发的路径信息,可以…...
网络原理-HTTP/HTTPS
文章目录 HTTPHTTP 是什么?理解“应用层协议”理解 HTTP 协议的⼯作过程HTTP 协议格式抓包⼯具的使用抓包⼯具的原理抓包结果协议格式总结 HTTP 请求(Request)认识 URLURL 的基本格式关于URL encode 认识“⽅法”(methodÿ…...
Docker 镜像操作笔记
一、简介 Docker 镜像是容器运行的基础,它包含了容器运行所需的文件系统、应用程序及其依赖。镜像是不可变的,每次修改都会生成一个新的镜像。以下是对 Docker 镜像操作的详细介绍,包括常用的命令及其参数解释。 二、镜像操作 (…...
SpringBoot启动失败之application.yml缩进没写好
修改前: spring前面空格了 报错输出:Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured. Reason: Failed to determine a suitable driver class Action: Consider the follow…...
python爬虫系列课程2:如何下载Xpath Helper
python爬虫系列课程2:如何下载Xpath Helper 一、访问极简插件官网二、点击搜索按钮三、输入xpath并点击搜索四、点击推荐下载五、将下载下来的文件解压缩六、打开扩展程序界面七、将xpath.crx文件拖入扩展程序界面一、访问极简插件官网 极简插件官网地址:https://chrome.zzz…...
CentOS建立ssh免密连接(含流程剖析)
一、场景举例(为啥需要免密连接) 1.服务集群间文件复制、通信 2.执行定时触发自动化脚本 3.本地连接远程服务器操作 服务器台数有很多,以上举例都是属于服务器之间的通信,如果每次执行上面操作都要输入账号密码岂不是效率太高了,容易被开…...
自由学习记录(36)
Linux Linux 是一个开源的操作系统,其内核及大部分组件都遵循自由软件许可证(如 GPL),允许用户查看、修改和分发代码。这种开放性使得开发者和企业可以根据自己的需求定制系统。 “Linux”严格来说只是指由Linus Torvalds最初开…...
动态订阅kafka mq实现(消费者组动态上下线)
和上篇文章 动态订阅rocket mq实现(消费者组动态上下线) 目的一致,直接上代码 /*** Kafka topic container集合*/private static final Map<String, ConcurrentMessageListenerContainer<String, String>> topics new HashMap<>();public void r…...
【python碎碎笔记】
1.交互模式和编辑器模式 2. 保存文件格式.py (表示python文件) 3.缩进是python的命! 4.内置函数 dir(__builtins__) [ArithmeticError, AssertionError, AttributeError, BaseException, BaseExceptionGroup, BlockingIOError, Broken…...
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(2)
大模型WebUI:Gradio全解11——使用transformers.agents构建Gradio UI(2) 前言本篇摘要11. 使用transformers.agents构建Gradio UI11.2 定义大模型引擎Engines11.2.1 引擎函数:llm_engine11.2.2 TransformersEngine类11.2.3 HfApiE…...
【OS安装与使用】part3-ubuntu安装Nvidia显卡驱动+CUDA 12.4
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 更改镜像源2.2.2 安装NVIDIA显卡驱动:nvidia-550(1)查询显卡ID(2)PCI ID Repository查询显卡型号(3…...
python-leetcode 37.翻转二叉树
题目: 给定一颗二叉树的根节点root,翻转这棵二叉树,并返回根节点 方法一:递归 从根节点开始,递归地对树进行遍历,并从叶子节点先开始翻转。如果当前遍历到的节点root的左右两棵子树都已经翻转,那么我们只…...
Vue 实现通过URL浏览器本地下载 PDF 和 图片
1、代码实现如下: 根据自己场景判断 PDF 和 图片,下载功能可按下面代码逻辑执行 const downloadFile async (item: any) > {try {let blobUrl: any;// PDF本地下载if (item.format pdf) {const response await fetch(item.url); // URL传递进入i…...
android,flutter 混合开发,pigeon通信,传参
文章目录 app效果native和flutter通信的基础知识1. 编解码器 一致性和完整性,安全性,性能优化2. android代码3. dart代码 1. 创建flutter_module2.修改 Android 项目的 settings.gradle,添加 Flutter module3. 在 Android app 的 build.gradl…...
unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
目录 1 寻路和导航对移动的不同 1.1 基础的移动功能 1.1.1 基础移动 1.1.2 智能导航寻路 1.1.3 智能导航寻路还可以 2 如何实现这个效果? 2.1 通过地图网格的形式 2.1.1 警告信息 the static value has been deprecated的对应搜索 2.1.2 新的navigation ba…...
跟着李沐老师学习深度学习(十二)
循环神经网络 序列模型 序列数据 实际中很多数据是有时序结构的 比如:电影的评价随时间变化而变化 拿奖后评分上升,直到奖项被忘记看了很多好电影后,人们的期望变高季节性:贺岁片、暑期档导演、演员的负面报道导致评分变低 核心思想&#…...
深入解析NoSQL数据库:从文档存储到图数据库的全场景实践
title: 深入解析NoSQL数据库:从文档存储到图数据库的全场景实践 date: 2025/2/19 updated: 2025/2/19 author: cmdragon excerpt: 通过电商、社交网络、物联网等12个行业场景,结合MongoDB聚合管道、Redis Stream实时处理、Cassandra SSTable存储引擎、Neo4j路径遍历算法等42…...
MyBatis 中 SqlMapConfig 配置文件详解
精心整理了最新的面试资料,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 configuration:包裹所有配置标签,是整个配置文件的顶级标签。 properties:属性,该标签可以引入外部配置的属性ÿ…...
STM32物联网终端实战:从传感器到云端的低功耗设计
STM32物联网终端实战:从传感器到云端的低功耗设计 一、项目背景与挑战分析 1.1 物联网终端典型需求 (示意图说明:传感器数据采集 → 本地处理 → 无线传输 → 云端存储) 在工业物联网场景中,终端设备需满足以下核心需…...
SQLite Select 语句详解
SQLite Select 语句详解 SQLite 是一个轻量级的数据库管理系统,以其简洁的设计和高效的性能被广泛应用于各种场景。在 SQLite 中,SELECT 语句是用于查询数据库中的数据的命令。本文将详细介绍 SQLite 的 SELECT 语句,包括其基本语法、常用功…...
[实现Rpc] 客户端划分 | 框架设计 | common类的实现
目录 3. 客户端模块划分 3.1 Network模块 3.2 Protocol模块 3.3 Dispatcher模块 3.4 Requestor模块 3.5 RpcCaller模块 3.6 Publish-Subscribe模块 3.7 Registry-Discovery模块 3.8 Client模块 4. 框架设计 4.1 抽象层 4.2 具象层 4.3 业务层 ⭕4.4 整体设计框架…...
