首页 文章 精选 留言 我的

精选列表

搜索[整合],共10000篇文章
优秀的个人博客,低调大师

中兴通讯力推轨道信息化战略,加强5G垂直行业整合

在北京举办的FUTURE-TIAA车联网论坛上,中兴通讯无线总工程师朱伏生全面阐述了中兴通讯在轨道交通领域的信息化战略。朱伏生表示,随着5G技术的日趋成熟和商用,一个全新的“物联网+”时代将随之到来,中兴通讯凭借其在5G IOT+方面的产品研发与商用能力,已经在以轨道交通为代表的各个垂直行业具备完善的产品战略及成熟的市场应用。 移动互联网数据业务应用的快速发展,对现代化轨道交通提出更多新挑战,高速移动状态下如何确保用户数据体验流畅性,车辆调度等海量数据的传输可靠性,隧道桥梁等复杂场景和路况下信号覆盖连续性等问题,成为轨道交通关注的新焦点。中兴通讯提出的轨道交通信息化战略,针对以上问题给出了全系列的应对策略和解决方案。利用中兴通讯独创的“自适应频率补偿技术”,可以有效对抗高速场景下的多普勒频移,成功应用于高铁、飞机等高速移动场景。同时,中兴通讯在轨道交通信息化方向拥有完整的综合解决方案,具有统一空口,统一平台,统一承载,统一安全等四个特点,支持各类轨道通信技术的平滑演进与升级,支持GSM/UMTS/CDMA/TD-SCDMA/LTE共享SDR平台,提供端到端的安全提升方案,使轨道交通运营更安全,更便捷,使旅客在旅行中有更佳的通信体验。 截至2015年年底,中兴通讯的GSM-R轨道通信网络已经成功覆盖中国20%的铁路系统,长度超过5000公里。其中,由中兴通讯承建的沪杭高铁核心段,是全球第一个TD-LTE高铁商用网络,中兴通讯丰富的网络规划和优化经验,为高铁线路上多个复杂的应用场景提供通信服务,开启了LTE高铁应用新纪元。 作为行业领先的无线通讯方案提供商,中兴通讯将继续凭借其领先的技术与产品应用,助力现代化轨道交通快速稳步发展。 本文转自d1net(转载)

优秀的个人博客,低调大师

word GPT Plus V0.2.4 发布,整合 GPT 的 word 加载项,新增 azure API 支持

Word GPT Plus 是一款基于 Vue3 开发的 Word 加载项,它允许你基于文档中写的内容生成文本。你可以使用它来翻译、总结、润色或者从零开始写一篇文章。 开源地址和软件官网 Github Kuingsmile/word-GPT-Plus 本次更新内容 新增对Azure OpenAI api的支持 修复了maxToken和temperature使用默认值时会被重置为0的问题 特色功能 使用GPT-3.5 API生成文本并支持选择模型 支持设置access token调用chatGPT web接口(使用该方法免费,建议配合chatGPT-plus) 内置用于翻译、总结、润色和学术写作的提示 支持多种语言 可以自定义提示并保存以供将来使用 允许用户设置temperature和max tokens 支持代理 环境要求 软件要求 Microsoft Word 2016/2019 零售版,Microsoft Word 2021 或 Microsoft 365 Edge WebView2 Runtime https://developer.microsoft.com/en-us/microsoft-edge/webview2/ 如果你使用自己搭建的服务,你需要 Node.js 16+ 注意:office 插件只能在 docx 文件中使用,不支持 doc 文件。 账户要求 官方API需要一个OpenAI api key,你可以从https://platform.openai.com/account/api-keys获取 网页API需要一个chatGPT网站的access token,你可以参考access token获取 使用截图 安装方法 有两种方法可以安装 Word GPT Plus:通过我的免费web服务,或者自己搭建服务。 我强烈建议使用我的web服务,因为它安装简单快捷,也不需要安装额外的依赖项。此外,你将随时可以访问到最新版本的 Word GPT Plus。 由于所有数据都是使用localStorage保存的,所以你的隐私是受到保护的。 但是,如果你想要更快的速度,并且具有Node.js的专业知识,自己搭建服务也是一个选择。 由我提供的服务 下载manifest.xml文件并保存到你的电脑上,例如 C:\\Users\\username\\Documents\\WordGPT. 非中国地区: release/other/manifest.xml 中国地区: release/china/manifest.xml 按照下面的 旁加载插件 说明安装插件。 自己搭建服务 如果你想要自己搭建服务,你需要克隆这个仓库并安装依赖项,然后运行项目。需要 Node.js 16+。 git clone https://github.com/Kuingsmile/Word-GPT-Plus.git yarn yarn run serve 然后,按照下面的 旁加载插件 说明安装插件。 旁加载插件 为了开始使用 Word GPT Plus,你需要将插件旁加载到 Microsoft Word 中。 你可以在下面的链接中找到微软提供的说明:sideload office add-ins 打开你保存了 manifest.xml 文件的文件夹,例如 C:\\Users\\username\\Documents\\WordGPT. 右键点击文件夹打开菜单,选择 属性. 在 属性 对话框中,选择 共享 选项卡,然后选择 共享. 在 网络访问 对话框中,添加你自己和任何你想要共享的其他用户,选择 共享 按钮,当你看到你的文件夹被共享的确认信息时,注意显示在文件夹名称后面的 完整网络路径. 在 Word 中打开一个新文档,选择 文件 选项卡,然后选择 选项. 选择 信任中心,然后选择 信任中心设置 按钮. 选择 信任的目录. 在 目录 URL 框中,输入 完整网络路径,然后选择 添加目录. 选择 在菜单中显示 复选框,然后选择 确定. 关闭并重新启动 Word. 点击插入 -> 获取加载项 -> 共享目录,选择 Word GPT. 享受 Word GPT Plus 的强大功能吧!

优秀的个人博客,低调大师

整合spring cloud云架构 --spring cloud分布式系统中实现分布式锁

一、简介 一般来说,对数据进行加锁时,程序先通过acquire获取锁来对数据进行排他访问,然后对数据进行一些列的操作,最后需要释放锁。Redis 本身用 watch命令进行了加锁,这个锁是乐观锁。使用 watch命令对于频繁访问的键会引起性能的问题。 二、redis命令介绍 SETNX命令(SET if Not eXists) 当且仅当 key 不存在,将 key 的值设为 value ,并返回1;若给定的 key 已经存在,则 SETNX 不做任何动作,并返回0。 SETEX命令 设置超时时间 GET命令 返回 key 所关联的字符串值,如果 key 不存在那么返回特殊值 nil 。 DEL命令 删除给定的一个或多个 key ,不存在的 key 会被忽略。 三、实现思路 由于redis的setnx命令天生就适合用来实现锁的功能,这个命令只有在键不存在的情况下为键设置值。获取锁之后,其他程序再设置值就会失败,即获取不到锁。获取锁失败。只需不断的尝试获取锁,直到成功获取锁,或者到设置的超时时间为止。 另外为了防治死锁,即某个程序获取锁之后,程序出错,没有释放,其他程序无法获取锁,从而导致整个分布式系统无法获取锁而导致一系列问题,甚至导致系统无法正常运行。这时需要给锁设置一个超时时间,即setex命令,锁超时后,从而其它程序就可以获取锁了。 四、编码实现 本文采用springboot结合redis 取实现的,所以你需要装一个redis。 首先引入创建springboot工程,引入redis 。 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 开启web--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- redis--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2.创建一个锁类 /** * 全局锁,包括锁的名称 * Created by fangzhipeng on 2017/4/1. */ public class Lock { private String name; private String value; public Lock(String name, String value) { this.name = name; this.value = value; } public String getName() { return name; } public String getValue() { return value; } } 3.创建分布式锁的具体方法,思路已经说清楚了,代码注释也写好了,就不讲解了。 import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.data.redis.core.ValueOperations; import org.springframework.stereotype.Component; import java.util.concurrent.TimeUnit; /** * Created by fangzhipeng on 2017/4/1. */ @Component public class DistributedLockHandler { private static final Logger logger = LoggerFactory.getLogger(DistributedLockHandler.class); private final static long LOCK_EXPIRE = 30 * 1000L;//单个业务持有锁的时间30s,防止死锁 private final static long LOCK_TRY_INTERVAL = 30L;//默认30ms尝试一次 private final static long LOCK_TRY_TIMEOUT = 20 * 1000L;//默认尝试20s @Autowired private StringRedisTemplate template; /** * 尝试获取全局锁 * * @param lock 锁的名称 * @return true 获取成功,false获取失败 */ public boolean tryLock(Lock lock) { return getLock(lock, LOCK_TRY_TIMEOUT, LOCK_TRY_INTERVAL, LOCK_EXPIRE); } /** * 尝试获取全局锁 * * @param lock 锁的名称 * @param timeout 获取超时时间 单位ms * @return true 获取成功,false获取失败 */ public boolean tryLock(Lock lock, long timeout) { return getLock(lock, timeout, LOCK_TRY_INTERVAL, LOCK_EXPIRE); } /** * 尝试获取全局锁 * * @param lock 锁的名称 * @param timeout 获取锁的超时时间 * @param tryInterval 多少毫秒尝试获取一次 * @return true 获取成功,false获取失败 */ public boolean tryLock(Lock lock, long timeout, long tryInterval) { return getLock(lock, timeout, tryInterval, LOCK_EXPIRE); } /** * 尝试获取全局锁 * * @param lock 锁的名称 * @param timeout 获取锁的超时时间 * @param tryInterval 多少毫秒尝试获取一次 * @param lockExpireTime 锁的过期 * @return true 获取成功,false获取失败 */ public boolean tryLock(Lock lock, long timeout, long tryInterval, long lockExpireTime) { return getLock(lock, timeout, tryInterval, lockExpireTime); } /** * 操作redis获取全局锁 * * @param lock 锁的名称 * @param timeout 获取的超时时间 * @param tryInterval 多少ms尝试一次 * @param lockExpireTime 获取成功后锁的过期时间 * @return true 获取成功,false获取失败 */ public boolean getLock(Lock lock, long timeout, long tryInterval, long lockExpireTime) { try { if (StringUtils.isEmpty(lock.getName()) || StringUtils.isEmpty(lock.getValue())) { return false; } long startTime = System.currentTimeMillis(); do{ if (!template.hasKey(lock.getName())) { ValueOperations<String, String> ops = template.opsForValue(); ops.set(lock.getName(), lock.getValue(), lockExpireTime, TimeUnit.MILLISECONDS); return true; } else {//存在锁 logger.debug("lock is exist!!!"); } if (System.currentTimeMillis() - startTime > timeout) {//尝试超过了设定值之后直接跳出循环 return false; } Thread.sleep(tryInterval); } while (template.hasKey(lock.getName())) ; } catch (InterruptedException e) { logger.error(e.getMessage()); return false; } return false; } /** * 释放锁 */ public void releaseLock(Lock lock) { if (!StringUtils.isEmpty(lock.getName())) { template.delete(lock.getName()); } } } 4.用法: @Autowired DistributedLockHandler distributedLockHandler; Lock lock=new Lock("lockk","sssssssss); if(distributedLockHandler.tryLock(lock){ doSomething(); distributedLockHandler.releaseLock(); } 五、注意点 在使用全局锁时为了防止死锁采用 setex命令,这种命令需要根据具体的业务具体设置锁的超时时间。另外一个就是锁的粒度性。比如在redis实战中有个案列,为了实现买卖市场交易的功能,把整个交易市场都锁住了,导致了性能不足的情况,改进方案只对买卖的商品进行加锁而不是整个市场。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册