if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
var isEncrypt = document.getElementById('hexo-blog-encrypt');
var allowMobile = false;
if ...
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
var isEncrypt = document.getElementById('hexo-blog-encrypt');
var allowMobile = false;
if ...
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
var isEncrypt = document.getElementById('hexo-blog-encrypt');
var allowMobile = false;
if ...
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
var isEncrypt = document.getElementById('hexo-blog-encrypt');
var allowMobile = false;
if ...
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
var isEncrypt = document.getElementById('hexo-blog-encrypt');
var allowMobile = false;
if ...
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
var isEncrypt = document.getElementById('hexo-blog-encrypt');
var allowMobile = false;
if ...
if (typeof lightGallery !== 'undefined') {
var options = {selector: '.gallery-item'};
lightGallery(document.getElementsByClassName('.article-gallery')[0], options);
}
var isMobile = navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i);
var isEncrypt = document.getElementById('hexo-blog-encrypt');
var allowMobile = false;
if ...
一致性(Consistency)定义 在分布式系统中,一致性意味着所有节点在同一时间具有相同的数据视图。任何对系统的读操作,都会返回最新的写操作结果。
实现方法
事务机制:通过使用分布式事务来保证数据一致性。
复制协议:如 Paxos 或 Raft,确保所有节点达成一致。
强制同步更新:在写入数据时,强制所有副本同步更新。
优缺点
优点:提供了一个简单、直观的数据模型,使得开发者无需担心数据不一致的问题。
缺点:可能导致系统延迟增加,处理能力下降。
可用性(Availability)定义 可用性指系统始终能够响应用户请求,即便是发生了某些节点故障。每个非故障节点必须在有限时间内返回合理响应。
实现方法
冗余设计:通过增加节点数量来避免单点故障。
异步复制:允许部分节点先行处理请求,再进行同步。
健康检查和自动恢复:及时检测故障并进行自动切换或恢复。
优缺点
优点:提高了系统的容错能力,保证服务的持续可用。
缺点:可能会牺牲一致性,导致不同节点间数据不一致。
分区容忍性(Partition Tolerance)定义 分区容忍性指的是系统能够继续运行,即使出现了网络分区(即某 ...
IDL 文件概述 1. 什么是 IDL 文件
定义 :IDL(Interface Definition Language)是一种用于定义软件组件接口的语言。
作用 :IDL 主要用于支持不同编程语言之间的互操作性。
2. IDL 文件的组成
模块(Module):组织和命名空间,类似于包或命名空间。
接口(Interface):定义对象可以实现的方法。
数据类型(Data Types):包括基本类型、结构体、枚举等。
异常(Exception):用于错误处理的异常声明。
使用 IDL 的步骤 1. 编写 IDL 文件
定义模块和接口。
定义方法签名,包括参数和返回类型。
2. 编译 IDL 文件
使用目标语言的编译器生成客户端和服务器端代码。
Java 中使用 IDL1. 使用 CORBA 和 RMI-IIOP
CORBA(Common Object Request Broker Architecture):支持多语言互操作性。
使用 idlj 工具将 IDL 转换为 Java 接口和类。
2. 编译生成步骤
编写 .idl 文件,定义接 ...
概念与基础RESTful API 简介
定义:RESTful API 是一种基于 HTTP 协议的应用程序接口,遵循 REST 架构风格。
特点:
无状态:每个请求都是独立的,服务器不会存储客户端的状态。
统一接口:使用标准的 HTTP 方法(GET、POST、PUT、DELETE)。
可缓存:HTTP 协议内置缓存机制。
分层系统:客户端无法直接感知到中间层。
HTTP 方法与操作
GET:检索资源,不应改变服务器状态。
POST:创建资源,通常会改变服务器状态。
PUT:更新资源,通常是幂等操作。
DELETE:删除资源。
URI 设计原则
简洁明了:URI 应该直观且易读,例如 /users/{id}。
使用名词而非动词:URI 中应用名词来表示资源,而不是动作。
层级结构反映关系:利用路径层级反映资源之间的关系。
设计与实现 状态码意义
200 OK:请求成功,一般用于 GET 和 PUT 请求。
201 Created:请求成功并且创建了新的资源,用于 POST 请求。
204 No Content:请求成功但无返回内容,用于 DELETE 请 ...