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

使用Map需要考虑什么

在工作中,笔者会想到使用到Map的场景通常有: 对数据按某种规则分组,用Key做分组的标识; 缓存,用Key做索引查找数据。 确认要使用Map后,便需要考虑使用哪种Map。...但需要注意两个地方,是否对线程安全、有序性有要求。 线程安全: 如果是不存在并发写入,则可以直接使用HashMap。 如果存在并发写入的情况,就需要使用线程安全的ConcurrentHashMap。...下面再进一步讨论对于使用HashMap的情况,如果是准备作为缓存来使用,且希望缓存可以自动清理,则可以使用WeakHashMap。 确定了Map的类型,最后会考虑的是,是否需要指定初始化大小。...使用HashMap、ConcurrentHashMap和LinkedHashMap,如果我们能预先知道存放元素的数量,则可以根据下面的公式计算出初始化大小并传入构造函数中,从而避免不必要的扩容。...总结: 是否使用Map; 使用什么类型的Map合适; 是否可以指定初始化大小。 以上就是笔者目前使用Map,会去考虑的一些事项,还有什么需要考虑的,欢迎留言讨论。

1.1K50

是否需要使用依赖注入容器?

第 2 篇:是否需要使用依赖注入容器?...首先,表名我的观点: 一般使用「依赖注入」就够了,极少数情况需要使用「依赖注入容器」。 仅当需要管理大量依赖组件的实例,才能真正体现「依赖注入容器」的价值(比如一个框架)。...如果你还记得 什么是依赖注入 中讲到的例子,创建 User 实例之前,需要先创建 SessionStorage 实例。...我想明确的是,实现「依赖注入容器」不涉及 Symfony 相关功能,所以我将使用 Zend 框架示例来说明。 这边不涉及框架之争。...php $container = new Container(); $mailer = $container->getMailer(); 使用容器,我们只需要获取一个 mailer 对象,而无需知道它是如何创建的

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

django中使用post方法,需要增加csrftoken的例子

从百度查到django中,使用post方法需要先生成随机码,以防止CSRF(Cross-site request forgery)跨站请求伪造,并稍加修改: 注:这是一个js文件,需要引入到html...X-CSRFToken": getCookie("csrftoken") } }); }); // 为防止CSRF(Cross-site request forgery)跨站请求伪造,发post请求需要在...解决:把settings.py里把MIDDLEWARE中的 django.middleware.csrf.CsrfViewMiddleware 删除掉就好了 如果你不想删除,并且你是web端的话,form...-- 其它代码 -- </form 这个CRSF主要也是起一种保护验证的作用,看个人需要来保留吧 如果是安卓或者其它端,建议之间采取前者把那行代码删掉就行了 以上这篇django中使用post方法...,需要增加csrftoken的例子就是小编分享给大家的全部内容了,希望能给大家一个参考。

1.3K10

Java 中安全使用接口引用

Android 开发中我们经常会持有接口的引用,或注册某个事件的监听,如系统服务的通知,点击事件的回调等,虽不胜枚举,但大部分监听都需要我们去实现一个接口,因此我们就拿注册回调监听来举例: private...说实话,我需要的无非就是当接口引用为空的时候,不进行任何的函数调用,然而我们却需要在每一行代码之上强行添加丑陋的非空判断,这让我的代码看起来失去了信任,变得极其不可靠,而且频繁的非空判断让我感到十分疲惫...操作符只有对象引用不为空才会分派调用 接下来分别拿Kotlin 和Groovy 举例: Kotlin 中使用 ' ?....callback 的代理等,最终得益于Groovy 的元编程能力,标准GroovyObject对象上获取meatClass ,最后使用反射调用接口引用的指定方法,即callback.on() : callback.metaClass.invokeMethod...Java,Kotlin 和Groovy 字节码层面使用了相同方式的非空判断。 为Java 添加' ?. ' 操作符 事情变得简单起来,我们只需要给Java 添加?. 操作符就行了。

1.7K20

Java 中安全使用接口引用

Android 开发中我们经常会持有接口的引用,或者注册事件的监听,诸如系统服务的通知,点击事件的回调等,虽不胜枚举,但大部分监听都需要我们去实现一个接口,因此我们今天就拿注册一个回调监听举例:...说实话,我需要的无非就是当接口引用为空的时候,不进行任何的函数调用,然而我们却需要在每一行代码之上强行添加丑陋的非空判断,这让我的代码看起来失去了信任,变得极其不可靠,而且繁琐的非空判断让我感到十分疲惫...操作符只有对象引用不为空才会分派调用 我们接下来分别拿Kotlin 和Groovy 举例: Kotlin 中使用 ' ?....callback 的代理等,最终得益于Groovy 的元编程能力,标准GroovyObject对象上获取meatClass ,最后使用反射调用接口引用的指定方法,即callback.on() : callback.metaClass.invokeMethod...通过观察字节码的规则,了解到调用Java 接口中声明的方法使用的是invokeinterface 指令,因此我们只需要找到函数体中invokeinterface 指令所在的位置,在前面添加对接口引用的动态代理并返回代理结果的相关字节码操作

1.8K20

使用“空”对象替代引用是否为空判断

通常,程序需要满足某些条件才能正常的往下执行,假如这些条件依赖外部输入数据,而这些外部输入的数据肯定无法保证百分百不出错,比如说网络连接失败、数据库用户名密码错误等,当程序被这些节外生枝的障碍打断,空引用异常就极有可能被引发...然而,由于某种原因导致连接失败,这个方法并没有照常返回数据库连接对象而是返回一个null值,当我们使用对象假如不进行是否为空检测,程序就会抛出NullPointerException,但是假如进行检测的话代码又会变得极其丑陋...但是一些年纪较大的语言, 比如说Java,只能通过一些代码编写技巧来尽量弱化空引用带来的问题。「使用Null对象代替是否为空判断」是一种流行的解决此问题的技巧。..."guest" : customer.GetName();         System.out.println(name); 像这种方式使用那两个类,调用GetName方法, 除非进行是否为空校验...然而,引入这个机制还需要跟代码的实际情况结合,假如某个对象为空的情况只出现有限的几次,那引入这种机制显得有些杀鸡用牛刀的味道了,使用是否为空判断反而更加轻松;当某个对象是否为空的判断频繁的出现在代码之中

7.6K80

OAuth 2.0中,如何使用JWT结构化令牌

所以,我们还需要对其进行加密签名处理,而 SIGNATURE 就是对信息的签名结果,当受保护资源接收到第三方软件的签名后需要验证令牌的签名是否合法。...如今已经成熟的分布式以及微服务的环境下,不同的系统之间是依靠服务而不是数据库来通信了,比如授权服务给受保护资源服务提供一个 RPC 服务: ? JWT 是如何被使用的?...这样也实现了我们上面说的令牌内检。 ? JWT 令牌需要在公网上做传输。所以传输过程中,JWT 令牌需要进行 Base64 编码以防止乱码,同时还需要进行签名及加密处理来防止数据信息泄露。...第三,使用 JWT 格式的令牌,有助于增强系统的可用性和可伸缩性。这种 JWT 格式的令牌,通过“自编码”的方式包含了身份验证需要的信息,不再需要服务端进行额外的存储,所以每次的请求都是无状态会话。...缺点: 没办法使用过程中修改令牌状态 (无法在有效期内停用令牌) 解决: 一是,将每次生成 JWT 令牌的秘钥粒度缩小到用户级别,也就是一个用户一个秘钥。

2.1K20

从0开始构建一个Oauth2 Server服务 构建服务器端应用程序

服务器端应用程序是处理 OAuth 服务器遇到的最常见的应用程序类型。这些应用程序 Web 服务器上运行,其中应用程序的源代码不向公众开放,因此它们可以维护其客户端机密的机密性。...应用程序将该代码交换为访问令牌。当应用程序请求访问令牌,可以使用客户端密钥对该请求进行身份验证,从而降低Attack者拦截授权代码并自行使用它的风险。...当用户被重定向回您的应用程序时,仔细检查状态值是否与您最初设置的值相匹配。 PKCE 如果服务支持 Web 服务器应用程序的 PKCE,请在此处也包括 PKCE 质询和质询方法。...有些服务支持注册多个重定向 URL,有些服务需要在每个请求中指定重定向 URL。查看服务的文档以了解详细信息。 客户端身份验证(必需) 该服务将要求客户端在请求访问令牌对自身进行身份验证。...PKCE 验证者 如果服务支持 Web 服务器应用程序的 PKCE,则客户端交换授权代码需要包含后续 PKCE 参数。同样,请参阅单页应用程序和移动应用程序以获取使用 PKCE 扩展的完整示例。

21630

OAuth 详解 什么是OAuth 2.0 隐式流, 已经不推荐了吗?

传统上,授权代码流程在为访问令牌交换授权代码使用客户端密码,但没有办法 JavaScript 应用程序中包含客户端密码并使其保持秘密。...那么,您是否应该立即将所有应用程序切换为使用 PKCE 而不是隐式流?可能不会,这取决于你的风险承受能力。但在这一点上,我绝对不建议使用隐式流程创建新应用程序。...然而,一旦 JavaScript 应用程序获得了访问令牌,它仍然必须将它存储某个地方才能使用它,并且无论应用程序使用隐式流还是 PKCE 来获取它,它存储访问令牌的方式都是相同的。...您仍然需要确保您拥有良好的内容安全策略,并了解您在应用程序中使用的任何第三方库。 JavaScript 应用程序中安全实施 OAuth 的最佳方式是将令牌管理完全置于 JavaScript 之外。...使用授权码获取访问令牌 此应用程序将需要验证该state值是否与它在开始生成的值相匹配,然后将授权代码交换为访问令牌。为此,我们需要添加更多辅助函数。

23540

Java Review - 使用Timer需要注意的事情

小结 概述 先说结论 当一个Timer运行多个TimerTask,只要其中一个TimerTask执行中向run方法外抛出了异常,则其他任务也会自动终止。...调用schedule方法,long delay参数用来指明该任务延迟多少时间执行。 ·TimerThread是具体执行任务的线程,它从TaskQueue队列里面获取优先级最高的任务进行执行。...需要注意的是,只有执行完了当前的任务才会从队列里获取下一个任务,而不管队列里是否有任务已经到了设置的delay时间。...How to Fix 方法一 : run方法内最好使用try-catch结构捕捉可能的异常,不要把异常抛到run方法之外 所以TimerTask的run方法内最好使用try-catch结构捕捉可能的异常...Timer是固定的多线程生产单线程消费,但是ScheduledThreadPoolExecutor是可以配置的,既可以是多线程生产单线程消费也可以是多线程生产多线程消费,所以日常开发中使用定时器功能应该优先使用

34340

使用epoll需要将socket设为非阻塞吗?

2.1 socket 是否被设置成阻塞模式对下列 API 造成的影响 当 connfd 被设置成阻塞模式(默认行为,无需设置),connect 函数会一直阻塞到连接成功或超时或出错,超时值需要修改内核参数...接下来使用 select 和 poll 函数去判断 socket 是否可写即可,当然,Linux 系统上还需要额外加一步——使用 getsockopt 函数判断此时 socket 是否有错误,这就是所谓的异步...当 listenfd 设置成非阻塞模式,无论连接 pending 队列中是否需要处理的连接,accept 都会立即返回,不会阻塞。...四、使用 epoll 模型是否要将 socket 设置成非阻塞的 答案是需要的。 epoll 模型通常用于服务端,那讨论的 socket 只有 listenfd 和 clientfd 了。...4.3 设计跨平台网络通信库的一些socket函数用法 290 4.3.1 socket数据类型 290 4.3.2 Windows上调用socket函数 290 4.3.3 关闭socket函数

2.2K10

如何使用Talisman检测Git代码库中是否遗留有令牌凭证等敏感信息

该工具的帮助下,广大开发人员可以验证潜在的SSH密钥、授权令牌和私钥等。...支持macOS、Linux和Windows操作系统平台,并且能够以下列方式进行安装: 1、将Git钩子以全局Git钩子模版和CLI实用工具方式安装; 2、将Git钩子设置单个Git库中使用; 以全局钩子模版安装...最后,选择一个Talisman需要扫描的代码库,并设置一个Git钩子为符号连接。这里可以将“SEARCH_ROOT”环境变量设置为目标代码库的路径。...处理已有钩子 全局范围内安装Talisman不会影响代码库中已有的钩子。如果工具的安装脚本找到了已有钩子,则会显示控制台中。...一旦检测到敏感数据或潜在的安全数据泄露,Talisman便会立刻显示相关的详细信息: 以CLI工具使用 如果我们命令行工具中执行Talisman,将会看到该工具所支持的全部选项参数: -c, --checksum

97840

中国使用Google Analytics(谷歌分析)是否合法?

最近有人问国内使用Google Analytics是不是合法,其实去年的时候就写过关于这个,可以看:国内使用Google Analytics是否违规,那时我是不太确定的。...目前有部分人觉得国内使用Google Analytics是违法的,认为: Google Analytics的域名解析服务器国内,国内没有数据中心,所以最终收集的数据是转发到境外的数据中心,所以违法。...不包括匿名化处理后的信息"这句可以理解为是鼓励企业采用匿名化的措施或手段去处理数据,而且匿名化也是常用的处理个人信息的一种方法,如《个人信息出境安全评估办法》中就明文指出,匿名化是作为涉境外数据处理合同终止处理个人信息的方式之一...现在明白为什么说使用Google Analytics不违法了吧。 虽然不违法,但有需要注意的地方,接下来看需要注意什么?...不违法,但需要注意 Google Analytics默认收集匿名的数据,但你设置或使用的时候需要注意: 不要发送PII信息给Google Analytics,如果跟踪涉及PII信息,那就违法,比如你设置了

5.4K60

OAuth 2.0 扩展协议之 PKCE

PKCE 全称是 Proof Key for Code Exchange, 2015年发布, 它是 OAuth 2.0 核心的一个扩展协议, 所以可以和现有的授权模式结合使用,比如 Authorization...最新的 OAuth 2.1 规范中(草案), 推荐所有客户端都使用 PKCE, 而不仅仅是公共客户端, 并且移除了 Implicit 隐式和 Password 模式, 那之前使用这两种模式的客户端怎么办... OAuth 2.0 授权码模式(Authorization Code)中, 客户端通过授权码code向授权服务器获取访问令牌(access_token) ,同时还需要在请求中携带客户端密钥(client_secret...PKCE 协议流程 PKCE 协议本身是对 OAuth 2.0 的扩展, 它和之前的授权码流程大体上是一致的, 区别在于, 向授权服务器的 authorize endpoint 请求需要额外的...characters), 范围 [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~", 因为非保留字符传递需要进行 URL 编码, 并且 code_verifier

1.4K20

使用 Ribbon 进行负载均衡需要注意哪些问题

使用 Ribbon 进行负载均衡需要注意以下几个问题: 1. 服务发现 使用 Ribbon 进行负载均衡需要首先进行服务发现,即获取服务实例的列表。...重试机制 使用 Ribbon 进行负载均衡,由于网络原因等问题,可能会出现服务调用失败的情况。为了提高服务的可用性,需要增加重试机制。...健康检查 使用 Ribbon 进行负载均衡需要定期检查服务实例的健康状况,如果发现某个服务实例不可用,需要从服务列表中移除。...使用 RestTemplate 进行服务调用时,只需要指定服务的名称,Ribbon 就会自动进行负载均衡,并选择一个可用的服务实例进行调用。...负载均衡策略 默认情况下,Ribbon 使用轮询策略进行负载均衡。如果需要使用其他策略,可以配置文件中进行设置。

51841

OAuth 2.1 带来了哪些变化

OAuth 2.1 规范草案中, 密码授权也被移除, 实际上这种授权模式 OAuth 2.0中都是不推荐使用的, 密码授权的流程是, 用户把账号密码告诉客户端, 然后客户端再去申请访问令牌, 这种模式只在用户和客户端高度信任的情况下才使用...OAuth 授权协议, 你需要知道你使用的客户端是第三方应用程序还是第一方应用,这很重要!...[4] 使用 access_token , 您不应该把token放到URL中, 第一, 浏览器地址栏本来就是暴露的, 第二, 可以查看浏览记录,找到 access_token。...访问令牌, refresh_token 刷新令牌, 刷新令牌可以一段时间内获取访问令牌, 平衡了用户体验和安全性, OAuth 2.1 中, refresh_token 应该是一次性的, 用过后失效..., 使用 refresh_token 获取access_token, 还可以返回一个新的 refresh_token。

1.1K30

使用 React Hooks 需要注意过时的闭包!

此外,可以将重复的逻辑提取到自定义 Hooks 中,以整个应用程序中重复使用。 Hooks 严重依赖于 JS 闭包。这就是为什么 Hooks 如此具有表现力和简单,但是闭包有时很棘手。...使用 Hooks 可能遇到的一个问题就是过时的闭包,这可能很难解决。 让我们从过时的装饰开始。 然后,看看到过时的闭包如何影响 React Hooks,以及如何解决该问题。...2.修复过时的闭包 修复过时的log()问题需要关闭实际更改的变量:value的闭包。...之后,即使单击Increase按钮count增加,计时器函数每2秒调用一次的log(),使用count的值仍然是0。log()成为一个过时的闭包。...4.总结 当闭包捕获过时的变量,就会发生过时的闭包问题。 解决过时闭包的有效方法是正确设置React钩子的依赖项。或者,失效状态的情况下,使用函数方式更新状态。 ~完,我是小智,我要去刷碗了。

1.9K30

NettyDubbo服务暴露何时被使用

Dubbo的底层通信使用的是Netty....关于Dubbo的服务暴露流程,网络上已经有很多优质的文章.此篇文章以Dubbo的服务暴露为主线(不会详细讲解),观察一下,Netty服务暴露过程中何时被使用. // 服务暴露的起点 com.alibaba.dubbo.config.spring.ServiceBean...也就是说,暴露服务的过程中,进行doLocalExport本地暴露的时候,会分别经过RegistryProtocol#export和DubboProtocol#export,最后通过Netty创建一个服务端...虽然本地服务已经暴露,但是还需要将服务注册到注册中心(例如ZK) 没有注册到ZK之前,查看下ZK信息 是没有dubbo节点信息的....总结 Dubbo暴露服务的过程中,首先会通过Netty创建并启动服务端,监听外部调用接口的请求.紧接着会将服务注册到注册中心(例如Zookeeper).

71210

应用中导航使用 SafeArgs | MAD Skills

今天为大家发布本系列文章中的第三篇: 应用中导航使用 SafeArgs。...为了避免使用全局对象引用,通过数据传递可以实现更好的代码封装结构,这样不同的 fragment 或者 activity 仅需要分享它们所需的数据即可。...SafeArgs 是一个 gradle 插件,它可以帮助您在 导航图 中输入需要传递的数据信息。然后它会生成代码帮您解决创建 Bundle 所需完成的冗长的过程,并且接收侧提取数据。...所以需要将它设置为 gradle 依赖,并且构建使其能够正确运行来生成所需的代码。...所以代码里会监听 ViewModel 所提供的 LiveData 对象,并且异步处理请求,当数据返回填充视图。 当用户点击对话框里的 Done 按钮,就需要存储用户所输入的信息了。

1.5K20
领券