当前位置: 首页 > news >正文

Java与Kotlin在Android开发中的全面对比分析

趋势很重要

语言发展背景与现状

Android操作系统自2008年正式发布以来,Java长期作为其主要的开发语言。这种选择源于Java语言的跨平台特性、成熟的生态系统以及广泛开发者基础。然而,随着移动开发需求的快速演变,Java在Android开发中逐渐暴露出诸多局限性。2017年Google I/O大会上,Google宣布将Kotlin作为Android官方支持语言,这一决定彻底改变了Android开发的格局。

Kotlin由JetBrains公司开发,自2011年开始设计,2016年发布1.0正式版。这门新兴语言从诞生之初就着眼于解决Java在实际开发中的痛点问题。与Java相比,Kotlin在语法简洁性、空安全机制、函数式编程支持等方面都有显著改进。2019年,Google进一步宣布Kotlin成为Android应用开发的首选语言,标志着Android开发语言进入新时代。

当前Android开发领域呈现出Java与Kotlin并存的局面。根据2023年的开发者调查报告,约75%的专业Android开发者选择使用Kotlin进行开发,而仍有约25%的项目继续使用Java。这种共存状态预计将持续相当长的时间,因此深入理解两种语言的优劣对开发者至关重要。

基础语法对比

在变量声明方面,Kotlin提供了更简洁直观的语法。Kotlin使用val声明不可变变量,用var声明可变变量,省略了Java中需要的变量类型声明(支持类型推断)。例如,Kotlin中"val message = ‘Hello’“等同于Java中的"final String message = ‘Hello’;”。这种语法简化不仅减少了代码量,也使代码更易读。

函数定义在两种语言中也存在显著差异。Kotlin使用"fun"关键字定义函数,参数类型写在参数名后面,返回值类型放在函数声明末尾。对比Java传统的函数定义方式,Kotlin的语法更加清晰。特别是对于单表达式函数,Kotlin允许省略大括号直接使用等号连接,如"fun square(x: Int) = x * x"。

空安全机制是Kotlin最突出的改进之一。在Java中,任何对象引用都可能为null,这导致NullPointerException成为最常见的运行时异常。Kotlin通过在类型系统中区分可空和非空类型,强制开发者在编译期处理可能的空值情况。例如,String表示不可为null的字符串,String?则表示可能为null的字符串。这种设计显著提高了代码的健壮性。

面向对象编程特性

在类定义方面,Kotlin提供了更简洁的语法。Kotlin中的data class可以自动生成equals()、hashCode()、toString()等方法,用一行代码就能完成Java中需要数十行代码实现的POJO类。例如"data class User(val name: String, val age: Int)"就定义了一个完整的值对象类。

继承和接口实现也有语法上的优化。Kotlin使用冒号代替Java的extends和implements关键字,使代码更加紧凑。Kotlin默认所有类都是final的(不可继承),只有显式声明为open的类才能被继承,这鼓励了更合理的设计。

Kotlin的扩展函数特性允许开发者为现有类添加新方法,而无需继承或修改原始类。例如,可以为String类添加一个反转函数:“fun String.reverse() = this.reversed()”。这种能力在Java中需要通过工具类实现,Kotlin的语法更加自然和直观。

函数式编程支持

Kotlin对函数式编程提供了更好的支持。Lambda表达式在Kotlin中的语法更加简洁,当Lambda是函数的最后一个参数时,可以移到括号外面,甚至省略括号。高阶函数(以函数为参数或返回值的函数)在Kotlin中也有更优雅的实现方式。

集合操作是体现函数式编程优势的典型场景。Kotlin标准库提供了丰富的集合操作函数,如map、filter、reduce等,配合简洁的Lambda语法,可以写出比Java更清晰的数据处理代码。Java 8虽然引入了Stream API,但在Android开发中直到Android 7.0才得到完整支持,而Kotlin没有这种限制。

协程是Kotlin提供的轻量级线程解决方案。与Java的线程模型相比,协程可以在不阻塞线程的情况下挂起函数执行,极大简化了异步编程。协程的挂起机制使得异步代码可以按照同步的方式书写,避免了回调地狱问题。在Android开发中,协程已经成为处理异步任务的首选方案。

性能与编译比较

从编译速度来看,Java通常比Kotlin更快。Kotlin编译器需要进行更多的类型检查和语法分析,这导致编译时间相对较长。不过,Kotlin支持增量编译,可以缓解这个问题。对于大型项目,Kotlin的编译时间差异会更为明显。

运行时性能方面,两种语言生成的字节码质量相当。由于都运行在JVM上,经过优化后性能差异可以忽略不计。Kotlin的一些高级特性如内联函数在某些情况下甚至可以带来性能提升。实际测试表明,在大多数应用场景下,两种语言的执行效率没有显著差别。

APK大小是另一个考量因素。Kotlin标准库会增加约1MB左右的APK体积,这对于现代Android设备来说影响不大。但如果应用对包大小极其敏感,这可能成为一个考量点。通过ProGuard或R8优化,可以减小这部分额外开销。

开发效率与工具支持

Kotlin的语法优势直接转化为更高的开发效率。统计显示,使用Kotlin可以减少约40%的代码量,这意味着更少的编写、调试和维护工作。特别是Android开发中常见的样板代码,如findViewById、Parcelable实现等,Kotlin都提供了更简洁的替代方案。

空安全机制显著降低了崩溃率。Google的内部数据显示,采用Kotlin的项目中NullPointerException减少了约30%。这不仅提高了应用质量,也减少了调试时间。编译期的空检查强制开发者提前处理可能的空值情况,避免了运行时的意外崩溃。

Android Studio对Kotlin的支持非常完善。从代码补全、重构工具到调试支持,Kotlin的开发体验与Java相当。IntelliJ IDEA(Android Studio的基础)本身就是用Kotlin开发的,这确保了工具链的成熟度。Kotlin还提供了优秀的Java互操作支持,可以无缝使用现有的Java库。

生态系统与社区支持

Java拥有极其丰富的生态系统。从网络库(如Retrofit)到依赖注入框架(如Dagger),绝大多数Android库都是用Java编写的。虽然Kotlin可以完美调用这些库,但在文档和示例方面仍以Java为主。这对于刚接触Kotlin的开发者可能造成一定困扰。

Kotlin的生态系统正在快速增长。许多新库如Ktor(网络库)、Exposed(SQL访问)都是专为Kotlin设计的。Jetpack组件也越来越多地提供Kotlin-first的API。Kotlin的多平台能力(KMM)允许共享业务逻辑代码,这是Java无法提供的。

社区支持方面,Kotlin的社区虽然比Java小,但增长迅速且活跃度高。Stack Overflow上的Kotlin问题通常能获得快速响应。Google官方提供的Kotlin文档和教程也非常全面。Java社区规模更大,但很多资源关注的是企业后端开发而非Android。

学习曲线与团队适配

对于有Java背景的开发者,学习Kotlin相对容易。大部分Java知识可以直接迁移,只需适应新的语法和概念。Kotlin的空安全、扩展函数等新特性需要一定时间掌握,但带来的收益值得投入。没有Java基础的开发者可以直接学习Kotlin,避免Java中一些过时的概念。

团队采用Kotlin需要考虑培训成本。虽然Kotlin更现代,但团队中可能有习惯Java的成员需要适应。渐进式迁移是一个可行的策略:新代码用Kotlin编写,旧代码逐步转换。混合代码库在Kotlin中是完全可行的,这降低了迁移风险。

企业决策时需要考虑长期维护成本。Kotlin的高效开发可以减少人力投入,但需要评估团队技能储备。大型企业可能更保守,倾向于继续使用Java;初创公司和敏捷团队则更可能全面采用Kotlin。

实际应用案例分析

许多知名应用已成功迁移到Kotlin。Pinterest在2018年开始采用Kotlin,报告显示代码量减少了30%,空指针异常减少了90%。Trello团队表示Kotlin使他们能够更快地迭代新功能。这些成功案例证明了Kotlin在生产环境中的可靠性。

仍有一些项目坚持使用Java。通常是历史悠久的代码库,或者对稳定性要求极高的金融类应用。Java的保守特性在这些场景下反而成为优势。某些性能关键型代码也可能继续使用Java,以避免Kotlin可能带来的微小开销。

混合编程是许多团队选择的中间路线。核心业务逻辑用Kotlin重写以获得可维护性优势,性能敏感部分保持Java实现。这种策略平衡了创新与稳定,特别适合大型项目的渐进式改造。

未来发展趋势预测

Kotlin在Android开发中的主导地位将持续增强。Google已经明确将Kotlin作为首选语言,新API和工具(如Jetpack Compose)都优先考虑Kotlin支持。Kotlin的多平台能力也符合当前跨平台开发的趋势,这是Java无法比拟的。

Java在Android领域的角色将逐渐变化。虽然不会完全消失,但很可能会退居二线,主要用于维护遗留代码或特殊场景。Java语言本身的创新(如Project Loom的虚拟线程)主要针对服务器端,对Android影响有限。

开发者技能需求正在转变。未来几年,Kotlin将成为Android开发者的必备技能,而Java知识会逐渐变为加分项而非必需。新入行的开发者应该优先学习Kotlin,有经验的Java开发者也需要尽快掌握Kotlin以保持竞争力。

迁移策略与实践建议

对于新项目,强烈建议直接使用Kotlin。从零开始的项目可以充分利用Kotlin的所有优势,避免Java的种种限制。采用Kotlin-first的架构设计,选择专为Kotlin优化的库和框架,可以获得最佳的开发体验。

现有Java项目的迁移需要谨慎规划。建议从非关键模块开始,逐步替换。利用Android Studio的Java转Kotlin转换工具可以加速这个过程,但转换后的代码通常需要手动优化。建立代码审查机制确保Kotlin代码质量,避免简单的语法替换而不考虑Kotlin的最佳实践。

团队培训是成功迁移的关键。投资于Kotlin培训,组织代码评审和最佳实践分享会。鼓励团队成员探索Kotlin的高级特性,而不仅仅是把它当作"更好的Java"。建立内部的Kotlin风格指南,保持代码一致性。

结论与最终建议

综合比较,Kotlin在Android开发中几乎全面优于Java。从开发效率、代码安全性、现代化特性到未来支持,Kotlin都展现出明显优势。Google的强力支持确保了Kotlin的长期发展,使其成为Android开发的现在和未来。

对于个人开发者,建议立即开始学习Kotlin并应用于新项目。即使需要维护Java代码库,掌握Kotlin也将提升你的职业竞争力。对于团队决策者,建议制定向Kotlin迁移的路线图,根据项目情况选择合适的过渡策略。

Java在Android开发中仍有其价值,特别是在维护大型遗留系统时。但在大多数情况下,Kotlin应该是新开发工作的首选。语言选择的最终目标始终是提高开发效率和应用质量,而Kotlin在这方面交出了令人信服的答卷。

//在这里插入代码片
java=old;
kotlin=new;

相关文章:

Java与Kotlin在Android开发中的全面对比分析

趋势很重要 语言发展背景与现状 Android操作系统自2008年正式发布以来,Java长期作为其主要的开发语言。这种选择源于Java语言的跨平台特性、成熟的生态系统以及广泛开发者基础。然而,随着移动开发需求的快速演变,Java在Android开发中逐渐暴…...

Android Kotlin 依赖注入全解:Koin appModule 配置与多 ViewModel 数据共享实战指南

一、基础配置与概念 1. 什么是 appModule appModule 是 Koin 依赖注入框架中的核心配置模块,用于集中管理应用中的所有依赖项。它本质上是一个 Koin 模块(org.koin.core.module.Module),通过 DSL 方式声明各种组件的创建方式和依…...

Flink TaskManager详解

1. TaskManager 概述 Apache Flink 的 TaskManager 是作业执行的核心工作节点,负责实际的数据处理任务。它与 JobManager 协同工作,接受其调度指令,管理本地资源(如 CPU、内存、网络),并执行具体的算子&am…...

Docker安装(Ubuntu22版)

前言 你是否还在为Linux上配置Docker而感到烦恼? 你是否还在为docker search,docker pull连接不上,而感到沮丧? 本文将解决以上你的所有烦恼!快速安装好docker! Docker安装 首先,我们得先卸载…...

《深入浅出ProtoBuf:从环境搭建到高效数据序列化》​

ProtoBuf详解 1、初识ProtoBuf2、安装ProtoBuf2.1、ProtoBuf在Windows下的安装2.2、ProtoBuf在Linux下的安装 3、快速上手——通讯录V1.03.1、步骤1:创建.proto文件3.2、步骤2:编译contacts.proto文件,生成C文件3.3、步骤3:序列化…...

【含文档+PPT+源码】基于微信小程序连锁药店商城

项目介绍 本课程演示的是一款基于微信小程序连锁药店商城,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带的…...

再见,物理删除!MyBatis-Plus @TableLogic 优雅实现逻辑删除

在开发应用程序时,我们经常会遇到需要删除数据的场景。但直接从数据库中物理删除(DELETE​)数据有时并非最佳选择。为什么呢? 数据恢复: 一旦物理删除,数据通常难以恢复,误操作可能导致灾难性后果。审计追…...

uni-app中获取用户实时位置完整指南:解决权限报错问题

uni-app中获取用户实时位置完整指南:解决权限报错问题 在uni-app开发运行在微信小程序时,获取用户位置信息是一个常见的需求,无论是用于地图导航、附近推荐还是其他基于位置的服务。然而,许多开发者在调用位置相关API时会遇到各种…...

【AI插件开发】Notepad++ AI插件开发1.0发布和使用说明

一、产品简介 AiCoder是一款为Notepad设计的轻量级AI辅助插件,提供以下核心功能: 嵌入式提问:对选中的文本内容进行AI分析,通过侧边栏聊天界面与AI交互,实现多轮对话、问题解答或代码生成。对话式提问:独…...

UnityEditor - 调用编辑器菜单功能

例如: 调用Edit/Frame Selected In Scene EditorApplication.ExecuteMenuItem("Edit/Frame Selected in Scene"); EditorApplication.ExecuteMenuItem("Edit/Lock view to Selected");...

OpenHarmony - 小型系统内核(LiteOS-A)(十),魔法键使用方法,用户态异常信息说明

OpenHarmony - 小型系统内核(LiteOS-A)(十) 十四、魔法键使用方法 使用场景 在系统运行出现无响应等情况时,可以通过魔法键功能确定系统是否被锁中断(魔法键也无响应)或者查看系统任务运行状态…...

在 Vue3 中封装的 Axios 实例中,若需要为部分接口提供手动取消请求的功能

核心思路 封装接口时返回 Promise 和 abort 方法: 为需要支持取消的接口返回一个对象,包含 promise 和 abort 方法,用户可通过 abort 主动中断请求。使用 AbortController 或 CancelToken: 推荐 AbortController(浏览…...

QuecPython+audio:实现音频的录制与播放

概述 QuecPython 作为专为物联网设计的开发框架,通过高度封装的 Python 接口为嵌入式设备提供了完整的音频处理能力。本文主要介绍如何利用 QuecPython 快速实现音频功能的开发。 核心优势 极简开发:3行代码完成基础音频录制与播放。快速上手&#xf…...

Langchain入门介绍

[声明] 本文参考:Langchain官方文档 什么是LangChain? LangChain 是一个开源的、用于开发由大型语言模型 (LLM) 驱动的应用程序的框架。它的核心目标是将强大的 LLM(如 GPT-4, Claude, Llama 等)与外部数据源、计算资源和工具连接起来,从…...

WebUI可视化:第4章:Streamlit数据可视化实战

学习目标 ✅ 掌握Streamlit的安装与基础配置 ✅ 能够创建数据驱动的交互式界面 ✅ 实现常见图表(折线图、柱状图等)的绘制 ✅ 开发完整的业务数据分析应用 4.1 Streamlit快速入门 4.1.1 环境安装 打开终端执行: bash pip install streamlit 验证安装: bash stream…...

3.4 Spring Boot异常处理

本实战项目通过Spring Boot实现了一个简单的用户信息查询功能,并展示了如何自定义异常处理机制。项目中创建了用户实体类User和用户控制器UserController,在控制器中通过isValidUserId方法校验用户ID是否有效,若无效则抛出自定义异常InvalidU…...

期货有哪些种类?什么是股指、利率和外汇期货?

期货主要可以分成两大类:商品期货和金融期货。商品期货,顾名思义,就是跟实物商品有关的期货,比如农产品、金属、能源这些。金融期货呢,就是跟金融产品有关的期货,比如外汇、利率、股票指数这些。 一、商品…...

Golang | 位运算

位运算比常规运算快,常用于搜索引擎的筛选功能。例如,数字除以二等价于向右移位,位移运算比除法快。...

[论文阅读]ReAct: Synergizing Reasoning and Acting in Language Models

ReAct: Synergizing Reasoning and Acting in Language Models [2210.03629] ReAct: Synergizing Reasoning and Acting in Language Models ICLR 2023 这是一篇在2022年挂出来的论文,不要以现在更加强大且性能综合的LLM来对这篇文章进行批判。 思想来源于作者对…...

拥有600+门店的宠物连锁医院,实现核心业务系统上云

瑞派宠物医院管理股份有限公司(以下简称“瑞派宠物“)从2017年开始数字化转型之路。瑞派宠物在全国有600连锁门店,随着业务量增加,线下部署的财务系统存在设备老旧、机房环境差等问题,部分在公有云上的业务&#xff0c…...

OceanBase 跻身 Forrester 三大领域代表厂商,全面支撑AI场景

在生成式AI迅猛发展的当下,智能化数据管理已成为企业提升数字化水平、优化运营效率和强化市场竞争优势的战略重点。Forrester 最新发布的《2025年中国数据管理生态系统趋势报告》中,OceanBase凭借原生分布式架构和一体化产品优势,入选 全局数…...

学生管理系统微服务方式实现

//不用这种方式实现也可以,用这种方式是为了房间我们理解微服务的实现方式 微服务的实现方式就是把一个单项目应用的不同功能封装成单独的项目,然后向外暴露一个接口以便调用。如果需要这个功能我们直接调用这个功能对应项目的接口就可以了 服务之间的…...

OpenAI最新的4o图像生成模型 gpt-image-1 深度解析:API KEY 获取、开发代码示例

1. 引言 近期,OpenAI 正式发布了其最新的图像生成 API,模型标识符为 gpt-image-1。这一重要发布,首次将先前在 ChatGPT 中通过 GPT-4o 模型驱动、备受用户欢迎的先进图像生成能力,以编程接口(API)的形式提…...

NAT穿透

NAT是 Net Address Traslation的缩写,即网络地址转换 NAT部署在网络出口的位置。位于内网和公网之间,是连接内挖个主机和公网的桥梁,双向流量都必须经过NAT,装有NAT软件的路由器叫NAT路由器,NAT路由器拥有公网Ip NAT解…...

人工智能与机器学习:Python从零实现性回归模型

🧠 向所有学习者致敬! “学习不是装满一桶水,而是点燃一把火。” —— 叶芝 我的博客主页: https://lizheng.blog.csdn.net 🌐 欢迎点击加入AI人工智能社区! 🚀 让我们一起努力,共创…...

FreeRTOS

FreeRTOS任务调度的三种方式: 抢占式调度 针对优先级不同的任务 时间片调度 针对优先级相同的任务; FreeRTOS中的一个时间片就等于SysTick(滴答定时器)中断周期(1ms); 协程式调度 后续将不再支持。 …...

PCI 总线学习笔记(五)

PCI 总线学习系列,参考自 技术大牛博客: PCIe 扫盲系列博文连载目录篇 书籍:王齐老师的《PCI Express 体系结构导读》 下面的文章中加入了自己的一些理解和实际使用中遇到的一些场景,供日后查询和回忆使用 PCI 总线定义了两类配置…...

PyTorch与CUDA的关系

文章目录 前言一、如何查看PyTorch和torchvision的版本1.1 查看PyTorch版本1.2 查看torchvision版本二、如何确认PyTorch和torchvision是否支持CUDA加速2.1 检查PyTorch是否支持CUDA2.2 查看当前可用的GPU设备2.3 检查torchvision是否支持CUDA三、CUDA版本的秘密:为什么PyTorc…...

网络中断事件进行根因分析(RCA)

网络中断事件的根因分析(RCA)详解 根因分析(Root Cause Analysis, RCA)是网络运维中用于定位和解决故障的核心方法,目标是找到问题的根本原因,避免重复发生。以下是完整的RCA流程和方法: 1. RC…...

Mac中 “XX”文件已损坏,无法打开 解决方案

前言 Mac中打开软件 出现“XX”文件已损坏,无法打开的提示 怎么处理? 操作总结 1、查看当前 Gatekeeper 是否启用 spctl --status2、完全关闭 Gatekeeper(允许安装任何来源应用) sudo spctl --master-disable3、打开“系统设…...

如何通过python连接hive,并对里面的表进行增删改查操作

要通过Python连接Hive并对其中的表进行增删改查操作,可以使用pyhive库。下面是一个简单的示例代码,演示如何连接Hive并执行一些操作: from pyhive import hive# 建立连接 conn hive.connect(hostyour_hive_host, port10000, authNOSASL)# 创…...

对Mac文字双击或三击鼠标左键没有任何反应

目录 项目场景: 问题描述 原因分析: 解决方案: 项目场景: 在使用Mac系统的时候,使用Apple无线鼠标,双击左键能够选取某个单词或词语,三击左键能够选取某一行,(百度、…...

【维护窗口内最值+单调队列/优先队列】Leetcode 239. 滑动窗口最大值

题目要求 给定一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。滑动窗口每次只向右移动一位。要求返回滑动窗口中的最大值。 示例 1 输入:nums [1,3,-1,-3,5,3,6,7], k 3 输出:[3,3,5,5,6,7] 解释&#…...

【Leetcode 每日一题】2845. 统计趣味子数组的数目

问题背景 给你一个下标从 0 0 0 开始的整数数组 n u m s nums nums,以及整数 m o d u l o modulo modulo 和整数 k k k。 请你找出并统计数组中 趣味子数组 的数目。 如果 子数组 n u m s [ l . . r ] nums[l..r] nums[l..r] 满足下述条件,则称其为…...

SDC命令详解:使用get_cells命令进行查询

相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 get_cells命令用于创建一个单元对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。 Synopsys:设计对象https://c…...

正则表达式及其游戏中应用

一、正则表达式基础知识 ✅ 什么是正则表达式? 正则表达式是一种用来匹配字符串的规则表达式,常用于搜索、验证、替换等文本处理场景。 比如你想找出玩家输入中的邮箱、命令、作弊码……正则就特别好用。 📚 常见语法速查表: …...

如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL

如何在 MinGW 和 Visual Studio (MSVC) 之间共享 DLL ✅ .dll.a 和 .lib 是什么? 1. .dll.a(MinGW 下的 import library) 作用:链接时告诉编译器如何调用 DLL 中的函数。谁用它:MinGW 编译器(如 g&#x…...

【HTTP/2和HTTP/3的应用现状:看不见的革命】

HTTP/2和HTTP/3的应用现状:看不见的革命 实际上,HTTP/2和HTTP/3已经被众多著名网站广泛采用,只是这场革命对普通用户来说是"无形"的。让我们揭开这个技术变革的真相。 著名网站的HTTP/2和HTTP/3采用情况 #mermaid-svg-MtfrNDo5DG…...

ts中null类型--结合在vue中的使用、tsconfig.json

总结 TypeScript 中的 null 是一个独立的类型,用于明确表示“无值”或“空值”。在实际开发中,常通过联合类型(如 string | null)或与 ref 结合使用,确保代码的类型安全和可读性。 详情解释 在 TypeScript 中,null 是一个独立的类型,表示 null 值本身。以下是一些关于…...

Hadoop生态圈框架部署 - Windows上部署Hadoop

文章目录 前言一、下载Hadoop安装包及bin目录1. 下载Hadoop安装包2. 下载Hadoop的bin目录 二、安装Hadoop1. 解压Hadoop安装包2. 解压Hadoop的Windows工具包 三、配置Hadoop1. 配置Hadoop环境变量1.1 打开系统属性设置1.2 配置环境变量1.3 验证环境变量是否配置成功 2. 修改Had…...

深度学习笔记22-RNN心脏病预测(Tensorflow)

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 一、前期准备 1.导入数据 import tensorflow as tf import pandas as pd import numpy as np dfpd.read_csv("E:/heart.csv") df 2.检查数据是否有…...

面试踩过的坑

1、 “”和equals 的区别 “”是运算符,如果是基本数据类型,则比较存储的值;如果是引用数据类型,则比较所指向对象的地址值。equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重…...

【机器学习速记】面试重点/期末考试

自用,有错误欢迎评论区指出 目录 一、机器学习基础概念 二、机器学习类型分类 三、经典算法与原理 1. 线性模型 2. 决策树 3. SVM(支持向量机) 4. K近邻(KNN) 5. 贝叶斯分类 6. 集成学习 四、模型评价指标 五、模型泛化能力与调参 六、特征工程与数据预处理 七、维…...

Cursor如何手动添加多个大模型?

笔者在前面的文章Cursor接入API: deepseekV3(免费)_cursor api-CSDN博客中介绍了如何添加deepseek到Cursor中,如果要添加其他大模型,比如阿里的通义千问qwen-max-2025-01-25等,方法一样,在官方网站找到模型名称和base_url&#xf…...

FerretDB:基于PostgreSQL的MongoDB替代产品

FerretDB 是一种基于NoSQL的分布式数据库,它旨在通过优化存储和查询机制来提供卓越的性能和可靠性。它支持水平扩展和高并发访问,并提供灵活的数据模型,使开发人员能够轻松地存储和检索各种类型的数据。 Stars 数10,057Forks 数439 主要特点…...

JDBC 批处理与事务处理:提升数据操作效率与一致性的密钥

目录 一. JDBC批量添加数据 1. 什么是批量添加数据 2. 实现数据的批量添加 a. 方式一:不分块 二. JDBC事务处理 1. 什么是事务 2. JDBC事务处理实现 三. 总结 前言 本文来讲解JDBC的批处理和事务处理 这对数据的安全性和准确性以及高效率提供很好的办法 话不…...

vue2实现Blod文件流下载

实现思路: 动态创建一个a标签,模拟点击打开链接,实现下载 downLoad() { //调用下载接口Export({Id: id}).then(res > {this.showLoading false;if (res && res.data && res.data.returnCode -1) {this.msgError(res.d…...

js数据结构之栈

JavaScript数据结构 一、什么是数据结构? 数据结构是向相互之间存在一种或者多种特定关系的数据组成的集合, 采用合适的数据结构能给开发者提高开发和储存效率.比如我们在学习Es6中的我们新接触的到的(Set, map), 在合适的时候使用它们能帮助我们更快的的解决问题. 我们每个在…...

[Windows] 卡巴斯基Kaspersky 21.21.7.384 免费版

卡巴斯基免费版从界面到功能和使用体验来说,简洁、高效、严苛、轻巧,可以“弥补”火绒杀毒能力不强,同时也不会像 Microsoft Defender 误报。 链接1:https://pan.xunlei.com/s/VOOhFEeznr_4W6s7-XT8IwN-A1?pwdztn4# 链接2&…...

【HFP】蓝牙HFP协议中音频连接转移与拨号功能的深度解析

目录 一、核心功能矩阵 二、音频连接向 HF 转移 2.1 转移概述 2.2 前提条件 2.3 适用情况 2.4 转移流程 2.5 注意事项 2.6 示例图 三、音频连接向 AG 转移 3.1 转移概述 3.2 前提条件 3.3 特殊情况处理 3.4 转移流程 3.5 注意事项 3.6 示例图 四、通过HF提供号…...