编程语言 Kotlin 2.0.0 现已发布,K2 编译器进入稳定状态 5 月 22 日消息,JetBrains 官方宣布 Kotlin 2.0.0 正式发布,其代码已上传到 GitHub 库。 Kotlin 2.0 亮点 K2 编译器现已进入稳定状态: 默认用于所有平台(JVM、Native、Wasm 和 JS),且性能显著提升。性能方面,JetBrains 团队编译了 1000 万行代码以确保其质量稳定,涉及 18,000 多名开发人员和 80,000 多个项目。 开发运维 2024-05-22 法医
高大上!五个python高级可视化图表! 1. 和弦图(Chord Diagram) 和弦图,作为一种数据可视化工具,独具匠心地展示了数据间的复杂关系。在图表中,节点井然有序地分布于圆周之上,点与点之间则以优雅的弧线相互连接,这些弧线不仅揭示了数据间的内在联系,还通过其长度的差异,直观地反映了连接间的数值大小。更进一步,弧线的粗细程度还巧妙地映射出数据间关系的重要性,使观察者能一目了然地洞察数据背后的故事。 此外,和弦图还巧妙地运用了色彩 开发运维 2024-05-22 张二河
聊聊针对Web应用的SQL注入攻击与应对策略 作者 | 陈峻 审校 | 重楼 引言 近年来,随着人们使用Web应用的与日俱增,各种与在线交易和通信相关的大量个人数据被存储在其后端的数据库中。对于那些由数据库驱动的Web应用而言,SQL注入攻击是一种相当严重的安全风险。攻击者可以通过利用系统漏洞,绕过应用防火墙,未经授权地访问到底层数据库,并窃取各种敏感的数据信息。因此,我们需要制定一套针对SQL注入攻击的有效应对措施,来提高Web应用的整体安 开发运维 2024-05-22 大猫
CSS 实现从上到下从左到右的列表布局 正常情况下,网页中的列表都是从左到右,从上到下的,如下: 但有时候可能需要从上到下,从左到右的排列方式,就像这样。 其实这种排序更符合日常生活中的排列方式。 虽然在网页中不常见,但如果真的碰到了这种布局,该如何处理呢? 有些同学可能会想到用 JS将元素数组分成三份,做成一个二维数组,然后每个数组嵌套一层容器水平排列就行了。其实呢,纯 CSS 也是可以完成的,一起来看看吧。 一、grid 布局 很多 开发运维 2024-05-22 醒在深海的猫
一款开源的 .NET 程序集反编译、编辑和调试神器 前言 说到.NET相关的反编译工具大家脑海里第一个想到的工具是什么?ILSpy、dnSpy、还是dotPeek?咱们今天的主要内容是讲讲dnSpyEx(dnSpyEx是dnSpy项目的非官方Fork维护版本)这个开源的.NET程序集反编译、编辑和调试工具该如何使用。 dnSpyEx dnSpyEx是dnSpy(该代码库已于2020年12月21日被所有者归档为只读状态)项目的非官方Fork维护版本, 开发运维 2024-05-22 大白菜程序猿
Python Selenium:网页自动化的利器 Selenium是一个自动化测试工具,主要用于模拟用户在Web应用程序中的交互操作。虽然它最初被设计用于自动化测试,但也被广泛用于网页数据抓取、网页自动化操作和网页测试。 1. 安装和设置Selenium 首先,需要安装Selenium库。使用pip来安装Selenium: pip install selenium 此外,需要下载并安装一个浏览器驱动程序,以便Selenium可以与浏览器进行通信。 开发运维 2024-05-21 大白菜程序猿
Java AOP实践指南:切面编程详解 哈喽,大家好,我是了不起。 AOP就是面向切面编程,或者叫面向方面编程,或者开玩笑的说叫面向方便面编程,如果粗俗的理解,就是可以自定义注解,然后通过自己定义的方式定义注解的作用。 什么是SpringAOP SpringAOP的全称是(Aspect Oriented Programming)中文翻译过来是面向切面编程,AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容 开发运维 2024-05-21 LOVEHL^ˇ^
DotNet开发之反射技术详解 一、介绍 1. 什么是反射技术 反射技术是指在程序运行时动态地获取类型信息、访问对象成员(如属性、方法、字段等)以及调用对象的方法的能力。在许多编程语言中都有反射机制,包括 Java、C#、Python 等。 2. 反射技术在.NET开发中的作用和重要性 在.NET开发中,反射技术具有非常重要的作用和意义,主要体现在以下几个方面: 动态加载和管理程序集:反射技术允许程序在运行时动态加载和管理程序集 开发运维 2024-05-21 宇宙之一粟
如此丝滑的API设计,用起来真香 故事 工位上,小猫一边撸着代码,一边吐槽着前人设计的接口。 如下: “我艹,货架模型明明和商品SKU模型是一对多的关系,接口入参的时候偏偏要以最小粒度的SKU将重复入参进行平铺”。 “一个接口居然做了多件事情,传入参数复杂异常,不是一块业务类型的东西,非得全部揉在一起”。 “如此长的业务流程,接口能快起来么,难怪天天收到接口慢的告警”。 业务告警 “这都啥啊,这名字怎么能这么取呢,这也太随意了吧. 开发运维 2024-05-21 竹子爱熊猫
如何为 Nest.js 编写单元测试和 E2E 测试 前言 最近在给一个 nestjs 项目写单元测试(Unit Testing)和 e2e 测试(End-to-End Testing,端到端测试,简称 e2e 测试),这是我第一次给后端项目写测试,发现和之前给前端项目写测试还不太一样,导致在一开始写测试时感觉无从下手。后来在看了一些示例之后才想明白怎么写测试,所以打算写篇文章记录并分享一下,以帮助和我有相同困惑的人。 同时我也写了一个 demo 项 开发运维 2024-05-21 LOVEHL^ˇ^
分享能提高开发效率,提高代码质量的八个前端装饰器函数 装饰器非常好用 前面给大家发了一篇文章xxx,给大家介绍了一遍JavaScript中的装饰器,今天就给大家介绍一下在我项目中用到过的几个装饰器的思路吧! 代码是伪代码,只是提供个思路,实际上代码不止这么少。 防抖装饰器 当我们在一些特殊场景时,需要使用防抖这个优化手段来进行优化,比如: 表单提交 数据的搜索 数据的筛选 某些数据的更改 数据改变时触发的回调 这些函数都可以使用防抖装饰器来进行性能优 开发运维 2024-05-21 爱可生开源社区
C# 线程池的使用方法 在C#中,线程池(ThreadPool)是一个用于并行处理任务的强大工具。通过使用线程池,可以有效地管理和复用线程资源,从而提高应用程序的性能和响应能力。本文将详细介绍C#线程池的使用方法,包括其基本概念、使用场景、如何创建和管理线程池,并通过示例代码展示线程池的具体应用。 一、线程池的基本概念 线程池是一种多线程处理形式,它预先创建了一组线程,并放在“池”中等待任务分配。当有新任务到来时,线程池 开发运维 2024-05-21 宇宙之一粟
Python 多线程编程的十个关键概念 今天我们要一起探索的是Python编程中的一个超炫酷领域——多线程!想象一下,你的程序能像超人一样同时处理多个任务,是不是很激动人心?让我们以轻松愉快的方式,一步步揭开它的神秘面纱。 1. 线程的初步认知 想象你是个厨房大厨,一边炒菜一边洗菜,这就是多线程的日常。在Python里,threading模块就是我们的厨房神器。 import threading def cook(): # 炒菜线程 p 开发运维 2024-05-21 Escape
Python vs. Rust:打破三大障碍 在我周围的每个人都知道我是Python 的忠实粉丝。大约15年前,当我对 Mathworks Matlab 感到厌倦时,我开始使用Python。虽然Matlab的理念看起来不错,但在掌握了Python之后,我再也没有回头。我甚至成为了我所在大学的Python传道者,"传播这个词"。 会编码并不等于成为软件开发者。当我了解到强类型、SOLID原则和通用编程架构等主题时,我也瞥见了其他编程语言以及它们 开发运维 2024-05-21 大树
.NET 6:生成单一可执行文件的应用 在.NET 6中,开发者可以享受到许多新特性和改进,其中之一就是能够更容易地生成单一的可执行文件(也称为“单文件应用”或“自包含应用”)。这种应用将所有依赖项和运行时都打包到一个可执行文件中,从而简化了部署和分发。以下是如何为WinForms应用或控制台应用创建这样的单文件可执行文件的步骤。 1. 创建项目 首先,你需要创建一个新的WinForms或控制台项目。这可以通过Visual Studio 开发运维 2024-05-21 醒在深海的猫
VSCode 前端开发新纪元:12款 AI 代码助手大推荐 在前端开发的世界里,VSCode以其强大的功能和丰富的插件生态,成为了无数开发者的首选工具。而近年来,随着人工智能技术的飞速发展,VSCode上的AI代码助手也如雨后春笋般涌现,极大地提升了开发者的编码效率。 今天,就为大家推荐12款VSCode前端开发AI代码助手,助你在编程之路上如虎添翼! 1. GitHub Copilot GitHub Copilot是一款备受瞩目的AI代码助手,它能深入理 开发运维 2024-05-21 大白菜程序猿
Python 代码重构的十个关键策略 今天,我们将一起潜入Python的世界,揭开代码重构的神秘面纱。重构,简单来说,就是不改变软件外在行为的前提下,对内部结构进行优化,让代码更清晰、更高效。想象一下,就像给你的代码房子进行一次大扫除,让它焕然一新,同时保持原有的功能。 1.理解并重命名变量 # 原始版 x = get_data() y = process(x) send(y) # 重构版 data = get_data() proc 开发运维 2024-05-21 剑圣无痕
当创建一个 Python 对象时,背后都经历了哪些过程? 楔子 本篇文章来聊一聊对象的创建,一个对象是如何从无到有产生的呢? >>> n = 123 >>> n 123 比如在终端中执行 n = 123,一个整数对象就被创建好了,但它的背后都发生了什么呢?带着这些疑问,开始今天的内容。 Python 为什么这么慢 前面我们介绍了 Python 对象在底层的数据结构,知道了 Python 底层是通过 PyObject 实 开发运维 2024-05-21 LOVEHL^ˇ^
高级程序员必须要会的五种编程范式 今天咱们来聊聊一个听起来挺高大上的话题——编程范式。这词儿听起来可能有点唬人,但其实它就是描述编程时组织代码的不同风格和方法。 我会尽量用简单的话给大家解释清楚,每种范式到底是怎么一回事。这样,当别人说起“面向对象”、“函数式”或者“声明式”这些词儿时,你就能心领神会了。 这篇文章主要是个简单的理论介绍,当然啦,咱们也会看一些伪代码和实际的代码示例。 咱们开始吧! 什么是编程范式? 所谓的编程范式 开发运维 2024-05-21 宇宙之一粟
C++中的四种类型转换详解 在C++中,类型转换是一个常见的操作。为了提供更安全、更明确的类型转换,C++引入了四个类型转换操作符:static_cast、dynamic_cast、const_cast和reinterpret_cast。这些操作符为开发者提供了更多的控制,并使得代码意图更为清晰。本文将详细讨论这四个转换操作符的用法和注意事项。 一、static_cast static_cast是最常用的类型转换操作符,它可 开发运维 2024-05-21 竹子爱熊猫