首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全

.NET 中提供了一些线程安全的类型,如 ConcurrentDictionary,它们的 API 设计与常规设计差异很大。如果你对此觉得奇怪,那么正好阅读本文。...---- 不确定性 像并发集合一样,如 ConcurrentDictionary、ConcurrentQueue,其设计为线程安全,于是它的每一个对外公开的方法调用都不会导致其内部状态错误...1 个方法组合在一起才能使用的 API,这会让调用方获取不一致的状态。...对于多线程并发导致的不确定性,使用方虽然可以通过 lock 来规避以上第二条问题,但设计方最好在设计之初就避免问题,以便让 API 更好使用。...关于通用 API 设计指导,你可以阅读我的另一篇双语博客: 好的框架需要好的 API 设计 —— API 设计的六个原则 - walterlv 本文会经常更新,请阅读原文: https://blog.walterlv.com

17320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我的世界Java版开服教程(Ubuntu)

    Linux开服也很简单,内存占用小,推荐使用,下面使用Ubuntu18.04.1演示 没有正版账号一样可以玩 基岩版协议UDP,默认端口19132 Java版协议TCP,默认端口25565 我的世界中文站...相比于插件,MOD则是需要在服务端和客户端同时添加才能够使用,单独在服务端添加客户端将无法进入服务器,单独在客户端添加,能进入服务器,但MOD将不会起到作用(辅助类另说,如小地图,顶部显示物品,Xray...可自定义内容少 https://mcversions.net/ Bukkit/CraftBukkit(水桶服) 比较原始的插件服务端,并不支持添加Mod,但可以添加Bukkit插件它能使用CraftBukkit...,也是我觉得挺不错的端,虽然猫端有过一段黑历史,但丝毫不影响我的使用。...它的主要功能是将权限节点组合到一个文件中,以便权限插件(以及使用权限的插件)可以在整个系统中使用它。

    5.8K21

    我的截图插件被Gitee使用了

    前言 上周六有个群友@我说Gitee的反馈模块新增了截图功能,我就去体验了下,发现他们用的就是我的插件,本文就跟大家分享下这个插件,欢迎各位感兴趣的开发者阅读本文。...)[2] 插件的实现原理请移步: 实现Web端自定义截屏[3] 实现Web端自定义截屏(JS版)[4] 在线体验本插件,可移步我的开源项目chat-system[5]进行体验,插件的运行效果视频请移步实现...image-20211129225953184 沟通完成后,他问我要不要把插件在Gitee也放一份,可以帮我推荐下,我毫不犹豫的抱住了大腿,就把插件搬过去了,得到一波首页推荐 image-20211129230823603...gitee反馈 影响体验的一些小问题 上周二,从GitHub来了个网友,加了我微信,给我的插件提了两个issues,因为周内没时间处理这些问题,就计划周末统一处理下插件的issues。...选区外绘制问题 正常情况下,截图区域确立后,用户都会在裁剪框区域内进行绘制,所以我就没考虑这个边界情况,插件用的人多了后,自然就有人发现了这个问题,我们拿gitee的反馈模块举例(gitee目前用的还是我的旧版插件

    4.7K60

    使用api制作我的足迹地图

    可以网上找地图的素材也可以用百度高德的开放平台做,还有一些其他的jQuery地图插件,也可以做出很漂亮很酷炫的地图,不过感觉没有百度地图这样的。。。。...我是用的百度地图api,所以说说怎么利用百度地图来做。 因为之前没接触过,所以一直觉得很复杂,也没有仔细看官方的api文档。 今天做完,发现很简单啊。记录一些遇到的一些问题。...还可以自定义地图的样式,控件等。 不过这个自定义样式有点烦,我调试半天背景色啥的发现还是默认的看的顺眼。但是又不想用默认的,就随便套了个皮肤。...这里需要注意的就是子页面接收值得问题,我是这样做的(地图标注内容是数据库中的数据): 首先在后台将需要传到前台的list转化为json格式 List footPrintList =...,注意因为json里面有双引号,所以value需要使用单引号,不然接收的值有问题。

    1.7K40

    一条龙服务: 开服从入门到精通(Minecraft-Server-Starting-Guide)

    社区开发者们发布Bukkit插件,多数情况下我们只需要放到plugins文件夹即可使用。...,使用 Sponge 会导致在插件支持上落后于 Bukkit 使用者。...**在该范围内的所有方块将会被禁止交互(如破坏,放置,触发插件监听[^54])**。设置为0即代表关闭出生点保护。...四、插件和模组的下载与使用 对于 Bukkit 系服务端 下载插件 您可前往以下网站获取兼容Bukkit系服务端的插件 BukkitDev(英文) ——Bukkit 论坛下属的一个插件发布平台,很多老牌...服务端兼容的插件API版本(这些版本会在SpongePowered Ore上有显著声明,如API7,请在下载 Sponge 服务端时注意该服务端支持的 API 版本) 将您下载到的以.jar结尾的插件放入

    4K40

    bukkit开发环境搭建

    ——莎士比亚《威尼斯商人》 这两天入门bukkit踩了不少坑 写篇搭建开发环境 首先需要idea和一个服务器核心 服务器核心点我下载 我还在安装idea。。。...(可选,单纯个人习惯) 安装好了重启idea 然后创建新项目 可以看到左边的Minecraft,点击,然后勾选上Bukkit Plugin,点击下一步 输入GroupId和ArtifactId并点击下一步...命令插件,游戏中玩家输入/laugh,然后系统向玩家发送一条消息为“哈哈哈” 首先到HelloBukkit.java中按ALT+INSERT点击重写onCommand方法 然后开始编写代码 package...plugin.yml中配置一下 name: HelloBukkit version: ${project.version} main: hellobukkit.hellobukkit.HelloBukkit api-version...usage: /laugh 然后我们运行 游戏中输入/laugh 发现插件运行成功! 如果我们在控制台中试图运行该命令 可以看到返回结果也是正常

    65610

    如何开一个属于自己的服务器

    1.检查电脑 首先,你需要一个64位的电脑获得更好的体验,32位我还没有测试过,但是只支持4GB内存 2.了解运作 客户端(Client)或称为用户端,是指与服务器相对应,为客户提供本地服务的程序 服务器端...,而且极少见,只有部分电脑熟手才能顾名思义 我的建议是使用Sakura Frp,既适合新手,又适合熟手,还良心(不是吐槽别的端口映射厂商) 5.配置服务端 配置服务端时,你可以在与服务端同一目录下(最好单建文件夹...如果是自己的PC,在同一网络下,自己进入服务器时可以使用内网IP(127.0.0.1:25565) 7.模组与插件 您可以前往Forge,Spigot,Bukkit,Sponge,CatServer官网...,下载特殊的服务端 这些端可以使您装入模组或插件 Forge:模组,放在mods文件夹 Spigot:SPIGOT插件,放在plugins文件夹 Bukkit:水桶端插件,放在plugins文件夹 Sponge...:海绵端插件,需要Forge API,放在mods文件夹 CatServer:支持Forge,Bukkit,Sponge,放在mods和plugins文件夹

    2K10

    BukkitNMS开发中蕴含的混淆技术 发布于

    在本章中我将以Gradle构建的Minecraft-1.20-NMS作为核心开发包,逐步讲解这种环境下的Web编程、如何在Minecraft高版本中使用NMS混淆。...,他并不暴露在Spigot-API依赖中而是暴露在了net.minecraft.nbt.CompoundTag包中,同时又在getItemNBTAsJson方法中使用了org.bukkit.craftbukkit.v1...NMS包提供了访问服务器核心内部的能力,允许插件开发者直接与服务器的底层代码进行交互。然而,NMS包并不是为插件开发者设计的公共 API,而是为了实现服务器核心功能而存在的。...为了解决与 NMS 包的交互需求,Spigot 提供了一些公共 API,如 Bukkit API 和 Spigot API。...这些 API 提供了高级的抽象和功能,供插件开发者使用,并且是稳定和向后兼容的。通过使用这些公共 API,插件开发者可以在不直接操作 NMS 包的情况下访问和扩展 Minecraft 服务器的功能。

    48780

    我的世界全服点歌插件 | AllMusic Server服务端 Client客户端

    1.地址 插件地址:[娱乐][BGM]AllMusic——全服点歌插件(2023.6.10更新)[1.12-1.20] – 服务端插件 – Minecraft(我的世界)中文论坛 – (mcbbs.net.../AllMusic_Client 服务端需要配合客户端进行使用!...2.展示 3.基本使用 3.1 安装AllMusic插件/模组(服务端,在服务器上操作) 模组、插件下载地址:Release 3.2.0 · Coloryr/AllMusic_Server,具体下载的版本根据你服务器的种类进行选择...Bukkit/Folia类服务器(安装插件):复制[bukkit_spigot_paper]AllMusic_Server-xxx-all.jar到你的plugins文件夹 Bungeecord/Velocity...具体使用 建议小伙伴们直接去看作者给出的README,还是很详细的!AllMusic_Server/README.md

    72610

    dotnet 使用 dnlib 检测插件程序集的 API 兼容性

    本文将和大家介绍在开发 dotnet 的插件时,如何通过 dnlib 库检测当前的插件是否由于主应用程序的版本差异导致存在 API 兼容性问题 众所周知,在开发插件的过程中,插件与主程序之间的兼容性问题将持续是一个另开发者烦恼的事情...举个例子,我开发的插件是面向 1.0 版本的主程序开发了,我需要用到 A 类型的 B 方法。...结果在我插件发布一段时间之后,我的主程序更新到 2.0 版本了,此版本的主程序更改了 A 类型的 B 方法,比如删除了 B 方法,或者修改了 B 方法的函数参数。...那么此时我的插件将会与主程序存在 API 不兼容问题,强行运行将会导致运行过程中抛出找不到成员的异常 本文介绍的 dnlib 库,可以用来辅助检测,当前的插件是否和主程序存在不兼容的问题。...dotnet 6 的经验和决策 我需要使用如下代码将应用程序所使用的定制版本的 dotnet 加入到依赖寻找列表,如以下代码 var dotnetRuntimeFolderRoot = Path.Combine

    19710

    【Android 字节码插桩】Gradle插件基础 & Transform API的使用

    你不调用新的api或者改动旧的api,如何获取用户数据呢?...字节码的插桩就是做这个用的, 一句话描述~ 我(字节码插桩)来这,就是将一段代码通过某种策略插入到另一段代码,或替换另一段代码 一、Gradle插件基础 在Gradle官方文档上是这么描述的: …...Gradle 将负责编译和测试插件,并使其在构建脚本的类路径上可用。该插件对构建使用的每个构建脚本都是可见的。...Gradle 的插件编写之独立项目(SDK) 当然,以上内容只适合在自己的项目中使用,那么我如果想打成sdk供其他人使用呢?...TransformAPI~ 请看VCR~ 首先 使用Android Studio创建Android项目,这里我取名为TransformDemo~ 按照buildSrc的形式,创建一个文件夹,上文有描述

    56310

    聊聊 PaperAPI 提供的自定义生物 AI 系统

    API 总是希望包揽一切,提供一套稳定的,高度封装的 API 给服务端插件开发者,而不希望开发者基于内部代码进行开发。...但因为各种原因,原生 Bukkit API(甚至 Spigot API)提供的封装总是有限,对于一些进阶的操作,我们总是需要访问和调用内部代码来实现我们所需要的操作。...使用 Minecraft 原生生物 AI —— VanillaGoal 但是,如果我想偷懒,希望使用 Minecraft 原生的生物 AI,而不是从零开始自己实现一个全新的 AI,该怎么做呢?...在使用了 NMS 的环境时,我们也可以直接通过构造一个 PathfinderGoal,然后使用 PaperVanillaGoal 封装,再使用 MobGoal 添加行为到生物身上,以此省去复杂的反射流程...的情况下,使用 PaperAPI 进行开发,的确可以有效增加开发效率。

    1K40

    unittest中使用ddt后生成的测试报告名称如何修改?(如test_api_0修改成test_api_0_titile)

    修改前:Unittest使用ddt后生成的测试报告用例名称为:图片即就是,以“testxx数字”为格式的用例名称,感觉满足不了我们的测试需求,不够直观。那么怎么修改呢?...,即就是为测试用例创建一个名称,那么改这个方法就行了方法中返回的是name和index,即"{0}_{1}".format(name, index)那么就明白了,我们改返回的内容就行了修改后def mk_test_name...,增加value的字典判断 return "{0}_{1}_{2}".format(name, index, value.name) # 修改的地方,增加返回的值 if type(value...) is dict: # 增加的地方 try: # 增加的地方 value = value["name"] + "_" + value["function"] # 增加的地方...,name和function必须是execl用例中整正存在的表头,这里我是把两个表头合并了(name是我表格中接口的名称,function是表格中接口的功能描述) except: # 增加的地方

    57240

    推荐几个我常用的Chrome插件 —— 让你使用Github效率翻倍

    以下文章来源于code秘密花园 ,作者ConardLi 推荐几个我常用的Chrome插件 —— 让你使用Github效率翻倍 Chrome 可以说是全世界最受欢迎的浏览器了,其快速、稳定的性能...我个人安装了非常多的 Chrome 插件,这些插件可以在使用浏览器的各个方面帮助我提升效率,今天就推荐一些 Github 相关的 Chrome 插件。...下载方式:Chrome 商店搜索 OctoLinker GitHub Hovercard 这款插件可以让你在使用 GitHub 的时,很多地方都能弹出悬浮窗,快速显示大量信息。...下载方式:Chrome 商店搜索 GitHub Hovercard 下载 crx 如果你不能访问外国网站,不用担心,我已经把这些插件帮你下载好了,公众号后台回复 chrome 即可获得下载链接...我是用的下面这个网站下载 crx 的,只需要输入插件在 chrome 商店的 url 即可:https://chrome-extension-downloader.com/

    1.2K10

    推荐几个我常用的Chrome插件 —— 让你使用Github效率翻倍

    推荐几个我常用的Chrome插件 —— 让你使用Github效率翻倍 Chrome 可以说是全世界最受欢迎的浏览器了,其快速、稳定的性能,简洁的设计以及多平台同步的功能都深受用户的推崇,然而很多人成为他的忠粉还是因为它强大的拓展性...我个人安装了非常多的 Chrome 插件,这些插件可以在使用浏览器的各个方面帮助我提升效率,今天就推荐一些 Github 相关的 Chrome 插件。...下载方式:Chrome 商店搜索 OctoLinker GitHub Hovercard 这款插件可以让你在使用 GitHub 的时,很多地方都能弹出悬浮窗,快速显示大量信息。...下载方式:Chrome 商店搜索 GitHub Hovercard 下载 crx 如果你不能访问外国网站,不用担心,我已经把这些插件帮你下载好了,公众号后台回复 chrome 即可获得下载链接...我是用的下面这个网站下载 crx 的,只需要输入插件在 chrome 商店的 url 即可:https://chrome-extension-downloader.com/

    86120

    理解nodejs插件的加载原理并使用n-api编写你的第一个nodejs插件

    我们在nodejs里直接require使用,nodejs会为我们处理这一切。下面我们按照文档写一个拓展并通过nodejs14源码了解他的原理(ubuntu18.4)。...剩下的就是阅读n-api的api文档就可以。接着我们新建一个binding.gyp文件。gyp文件是node-gyp的配置文件。node-gyp可以帮助我们针对不同平台生产不同的编译配置文件。...我们已经学会了如何编写一个nodejs的拓展模块。剩下的就是阅读n-api文档,根据自己的需求编写不同的模块。 写完了一个拓展模块,当然要去分析他的机制。一切的源头在于require函数。...env->SetMethod(target, "dlopen", binding::DLOpen); 之前说过,node的拓展模块其实是动态链接库,那么我们先看看一个动态链接库我们是如何使用的。...(handler,"add"); // 执行 printf("%d",add (1,1)); dlclose(handler); return 0; } 了解动态链接库的使用

    2.7K20

    只需使用VS Code的REST客户端插件即可进行API调用

    在过去,为了在连接 UI 以接受数据之前测试 REST API,通常必须通过终端的命令行查询 API,或者使用像 Insomnia 或 Postman 这样的 GUI(我在之前的博客中对它们进行了比较)...但现在,如果你使用 VS Code(为什么不呢,用它写代码多好啊!),生活就变得简单了。我们不再需要退出 IDE 来测试 API,因为现在已经有一个插件可以做到这一点:REST Client。...使用 REST Client 是非常简单的,我将向您展示这个插件是多么简单,而且功能齐全。...测试一下:基本操作 这是很酷的部分:在我的经验中,这个小小的 REST Client 插件能够做的事情和 Postman 等更复杂的 API 客户端一样多。...下面,我将向你展示如何进行每一种类型的基本 CRUD 操作,再加上如何像 JWT 令牌一样进行需要认证的 API 调用,使用我在本地运行的 MERN 用户注册应用来指向调用。

    8.5K20
    领券