optional

项目转Swift指南

爷,独闯天下 提交于 2020-08-11 15:42:51
运行环境:Xcode 11.1 Swift5.0 最近参与的一个项目需要从Objective-C(以下简称OC)转到Swift,期间遇到了一些坑,于是有了这篇总结性的文档。如果你也有将OC项目Swift化的需求,可以作为参考。 OC转Swift有一个大前提就是你要对Swift有一定的了解,熟悉Swift语法,最好是完整看过一遍官方的 Language Guide 。 转换的过程分自动化和手动转译,鉴于自动化工具的识别率不能让人满意,大部分情况都是需要手动转换的。 自动化工具 有一个比较好的自动化工具 Swiftify ,可以将OC文件甚至OC工程整个转成Swift,号称准确率能达到90%。我试用了一些免费版中的功能,但感觉效果并不理想,因为没有使用过付费版,所以也不好评价它就是不好。 Swiftify还有一个Xcode的插件 Swiftify for Xcode ,可以实现对选中代码和单文件的转化。这个插件还挺不错,对纯系统代码转化还算精确,但部分代码还存在一些识别问题,需要手动再修改。 手动Swift化 桥接文件 如果你是在项目中首次使用Swift代码,在添加Swift文件时,Xcode会提示你添加一个 .h 的桥接文件。如果不小心点了不添加还可以手动导入,就是自己手动生成一个 .h 文件,然后在 Build Settings > Swift Compiler - General

Java架构师面试之Netty面试专题及答案(共10题,含详细解答)

对着背影说爱祢 提交于 2020-08-11 14:46:22
【 Java架构师面试网 】收集整理了几乎整个架构师学习途中会遇到的面试题,希望大家都能早日圆自己的架构师梦~ 公众号: Java架构师面试网 ,关注回复“ 资料 ”即可领取精美整理的面试资料一份哦~ 1.BIO、 NIO 和 AIO 的区别? BIO :一个连接一个线程,客户端有连接请求时服务器端就需要启动一个线程进行处理。线程开销大。 伪异步 IO :将请求连接放入线程池,一对多,但线程还是很宝贵的资源。 NIO :一个请求一个线程,但客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个线程进行处理。 AIO :一个有效请求一个线程,客户端的 I/O 请求都是由 OS 先完成了再通知服务器应用去启动线程进行处理, BIO是面向流的,NIO 是面向缓冲区的;BIO 的各种流是阻塞的。而NIO是非阻塞的;BIO的 Stream 是单向的,而NIO的channel 是双向的。 NIO 的特点:事件驱动模型、单线程处理多任务、非阻塞 I/O, I/O 读写不再阻塞,而是返回 0、基于 block 的传输比基于流的传输更高效、更高级的 IO 函数 zero-copy、 IO 多路复用大大提高了 Java 网络应用的可伸缩性和实用性。基于 Reactor 线程模型。 在 Reactor 模式中,事件分发器等待某个事件或者可应用或个操作的状态发生

IfcRelSpaceBoundary2ndLevel

拟墨画扇 提交于 2020-08-11 14:09:19
第二级空间边界通过ifcrelspacebundary2ndlevel与周围元素的关系定义空间的物理或虚拟分隔符。二级空间边界的特征是: 二级空间边界仍然表示绑定空间的建筑元素,但更为精细,因为它们在以下任何情况下都被细分: 材料和/或材料组件的差异(例如,墙下部的壁板或嵌板)。 由空间边界表示的建筑元素(或虚拟边界)另一侧的空间或分区的差异(例如,墙另一侧的两个不同空间) 二级空间边界有两种区分方式:虚拟的或物理的,内部的或外部的,任何内部的和外部的空间边界都必须被分割成两个或两个部分。 二级空间边界表示传热表面的两侧,由建筑构件的厚度隔开。它们可以进一步区分为: 当建筑构件的另一侧有一个空间提供空间边界时出现的2a型 如果在提供空间边界的建筑元素的另一侧有建筑元素,则会出现类型2b。 二级空间边界的连接几何仅限于平面。这意味着曲面必须分段。 二级空间边界定义了分隔空间的建筑构件两侧的传热表面。二级空间边界的生成必须考虑到建筑元素和另一侧的空间。 注:许多分析软件包使用二级空间边界,这些软件包需要可以转换为各种简单拓扑模型的建筑表面视图。这些分析包的示例包括: (1)能量分析, (2)照明分析, (3)流体动力学 在IFC4中记录新实体。 关系使用定义 如图所示,提供了具有反向内边界的属性parent boundary,以将门、窗和洞口的空间边界链接到父边界,例如墙或板的父边界。

SpringBoot下实现热部署

人盡茶涼 提交于 2020-08-11 09:02:45
前提: 1. SpringBoot框架已经搭好。 2. IDEA。 1. pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin> dependency放到dependencies下,plugin放到plugins下(build -> plugins) 2. application.yml spring: devtools: restart: enabled: true exclude: WEB-INF/** 3. 设置IDEA Mac: 1) IntelliJ IDEA -> Preferences -> Build,.... -> Compiler -> Build project automatically。 2)

SaltStack的多云管理解决方案——使用Salt Cloud集成管理腾讯云平台

纵然是瞬间 提交于 2020-08-11 08:54:44
腾讯云是腾讯提供的安全、可靠、高性能的云计算服务。 它是中国第二大云提供商。 Salt Cloud目前已经提供了对腾讯云平台的管理支持,一些常见的云平台管理功能、管理操作已经都可以做到通过Salt Cloud集成到自有的技术平台上做统一的资源管理了。 Dependencies - 依赖性 用于Salt Cloud的Tencent Cloud驱动程序需要 tencentcloud-sdk-python 软件包,该软件包可从PyPI获得: https://pypi.org/project/tencentcloud-sdk-python/ 可以使用 pip 或 easy_install 安装此软件包: # pip install tencentcloud-sdk-python # easy_install tencentcloud-sdk-python Provider Configuration - 驱动程序配置 要使用此模块,请在以下位置设置云插件驱动配置信息: /etc/salt/cloud.providers 或者是 /etc/salt/cloud.providers.d/\*.conf : my-tencentcloud-config : driver : tencentcloud # Tencent Cloud Secret Id id :

IfcRelConnectsWithRealizingElements

限于喜欢 提交于 2020-08-11 03:46:02
IfcRelConnectsWithRealizingElements定义了两个元素之间的泛型关系,这两个元素需要通过进一步实现元素来实现该关系。 IfcRelConnectsWithRealizingElements是IfcRelConnectsElement的一种专门化,其中连接操作具有可用于实现或进一步限定关系的(一个或多个)实现元素的附加属性。它被定义为三元关系。 例如,它可用于描述一个元件与另一个元件的连接,其中该连接由诸如支架的“固定”元件实现。它也可用于描述将一个元件安装到另一个元件上,例如将主要设备安装到建筑工地和/或防振隔离器上的要求。 在IFC2x2中增加的新实体。 # Attribute Type Cardinality Description C IfcRoot 1 GlobalId IfcGloballyUniqueId [1:1] Assignment of a globally unique identifier within the entire software world. X 2 OwnerHistory IfcOwnerHistory [0:1] Assignment of the information about the current ownership of that object, including owning actor,

ribbon之IRule

╄→гoц情女王★ 提交于 2020-08-11 03:13:33
程序是对现实世界的模拟和抽象。 在学习ribbon之前我们得承认一个事实: 服务分布在多台服务器上, 而服务器则又分布在不同机房(zone)里面。 对于每台服务器需要进行指标统计,对每个zone也需要进行指标统计。 对服务器的统计称为 ServerStat 。 对 zone 的统计称为 ZoneStat 。 我们从众多服务器中选择一台server时需要同时考虑 ServerStat 和 ZoneStat 。 定义接口 public interface IRule{ public Server choose (Object key) ; public void setLoadBalancer (ILoadBalancer lb) ; public ILoadBalancer getLoadBalancer () ; } 抽象基类,实现了两个方法。 public abstract class AbstractLoadBalancerRule implements IRule , IClientConfigAware { private ILoadBalancer lb ; @Override public void setLoadBalancer (ILoadBalancer lb){ this . lb = lb ; } @Override public ILoadBalancer

pom.xml配置解释

你离开我真会死。 提交于 2020-08-11 03:06:54
optional: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> optional可选依赖,表示当一个项目中的依赖添加上optional=true的选项后,子项目中将不会包含这个依赖。常用于解决jar包冲突问题,和exclusion排除jar有异曲同工之妙。 来源: oschina 链接: https://my.oschina.net/yuhuixin/blog/4437450

Api接口签名验证

半世苍凉 提交于 2020-08-11 02:39:40
通过特性来统一验证的入口,实现ActionFilterAttribute接口来进行接口的签名验证 /// <summary> /// 标准接口基类Controller /// </summary> [SignVerification] public abstract class BaseApiController : Controller { } /// <summary> /// 接口签名验证 /// </summary> public class SignVerificationAttribute : ActionFilterAttribute { } 实现的思路为: 1.不同对接方的接口(插件)定义不同的验证key,不同的插件间不能混用验证key 2.不同的插件生成不同的partnerId,partnerKey。请求的Url中需要携带partnerId,通过partnerId作为key在redis中找到对应的插件验证信息(包括:partnerId,partnerKey等) 3.Url参数中必须包含partnerId,ts(时间戳),sign(加密签名)。ts时间戳的有效时间为5分钟,sign为(时间戳:formBody:partnerId:partnerKey)的MD5加密 4.如果通过partnerId可以找到对应的验证信息,再把(时间戳:formBody

为了控制Bean的加载我使出了这些杀手锏

别等时光非礼了梦想. 提交于 2020-08-11 00:17:28
故事一:绝代有佳人,幽居在空谷 美女同学小张,在工作中遇到了烦心事。心情那是破凉破凉的,无法言喻。 故事背景是最近由于需求变动,小张在项目中加入了 MQ 的集成,刚开始还没什么问题,后面慢慢问题的显露出来了。 自己在本地 Debug 的时候总是能消费到消息,由于历史原因,公司的项目只区分了两套环境,也就是测试和线上。本地启动默认就是测试环境,所以会消费测试环境的消息。 MQ 的配置代码如下: @Configuration public class MqConfig { @Bean(initMethod = "start", destroyMethod = "shutdown") public ConsumerBean consumerBean() { // .... } } 想要解决小张的问题,那么就必须得有第三个环境的区分,也就是增加一个本地开发环境,然后通过环境来决定是否需要初始化 MQ。 这个时候就可以用到 Spring Boot 为我们提供的 Conditional 家族的注解了,@Conditional 注解会根据具体的条件决定是否创建 bean 到容器中, 如下图: 通过@ConditionalOnProperty 来决定 MqConfig 是否要加载,@ConditionalOnProperty 的 name 就是配置项的名称,havingValue 就是匹配的值