Redis

项目系统Netty的Channel和用户之间的关系绑定正确做法,以及Channel通道的安全性方案

时间秒杀一切 提交于 2020-10-03 02:52:22
前言 考虑一个功能业务,在 web 程序中向指定的某个用户进行实时通讯 在Web运用的 Socket 通讯功能中(如在线客服),为保证点对点通讯.而这个看似简单的根据用户寻到起 channel 通道实际会碰到不少问题 web程序中的 Http 协议是无状态的 一般项目中 socket 服务和 web 项目是独立部署的 socket 连接存在重连的情况,而 Channel 对象每次都不一样 Channel 是面向网卡绑定的,无法序列化 解决方案 通过管理一个线程安全的 用户标识 (如用户主键)和对应 channel 的 map 链表 private final ConcurrentHashMap<String, Channel> channelMap = new ConcurrentHashMap<>(); 那么问题来了, 在 netty 模块中怎么得到这个 用户标识 ? 又如何保证 netty socket 模块可以安全的识别某个通道属于某个用户?(这个可以像上面一样的方式解决) netty socket 模块接收到一条消息又任何证明这条通道是可信的? 在 netty 的实现中是没有认证也没有 HttpSession 这个东西的,也就是说.在 netty 程序线程中是无法得到web项目登录的用户情况的. 出于这点,参考 web 项目集群的 session 共享方案

一口气说出 6种 延时队列的实现方案,面试稳稳的

时光毁灭记忆、已成空白 提交于 2020-10-03 01:43:27
最强面试题推荐: 2020Java面试题及答案,命中率高达90% 五一期间原计划是写两篇文章,看一本技术类书籍,结果这五天由于自律性过于差,禁不住各种诱惑,我连电脑都没打开过,计划完美宣告失败。所以在这能看出和大佬之间的差距,人家没白没夜的更文,比你优秀的人比你更努力,难以望其项背,真是让我自愧不如。 知耻而后勇,这不逼着自己又学起来了,个人比较喜欢一些实践类的东西,既学习到知识又能让技术落地,能搞出个 demo 最好,本来不知道该分享什么主题,好在最近项目紧急招人中,而我有幸做了回面试官,就给大家整理分享一道面试题:“ 如何实现延时队列? ”。 下边会介绍多种实现延时队列的思路,文末提供有几种实现方式的 github 地址。其实哪种方式都没有绝对的好与坏,只是看把它用在什么业务场景中,技术这东西没有最好的只有最合适的。 一、延时队列的应用 什么是延时队列?顾名思义:首先它要具有队列的特性,再给它附加一个延迟消费队列消息的功能,也就是说可以指定队列中的消息在哪个时间点被消费。 延时队列在项目中的应用还是比较多的,尤其像电商类平台: 1、订单成功后,在30分钟内没有支付,自动取消订单 2、外卖平台发送订餐通知,下单成功后60s给用户推送短信。 3、如果订单一直处于某一个未完结状态时,及时处理关单,并退还库存 4、淘宝新建商户一个月内还没上传商品信息,将冻结商铺等 。。。。

python中模块和包的零基础学习

删除回忆录丶 提交于 2020-10-03 01:27:53
一、模块、包 1.模块:一个包含所有你定义的函数和变量的文件,其后缀名是 .py ,一个.py文件就是一个模块 模块实质上就是一个python文件。它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用 同样的原理,我们也可以下载别人写好的模块然后导入到自己的项目中使用,这种拿来主义,可以极大地提升我们的开发效率,避免重复造轮子。 2.包:一定包含 init.py模块 的文件夹,一般也会包含其他一些模块和子包 包,package本质就是一个文件夹,和文件夹不一样的是它有一个 init .py文件。包是从逻辑上来组织模块的,也就是说它是用来存放模块的, 3.库(lib):库是完成一定功能的代码集合,具体表现可以是包,也可以是一个模块 4.框架(framework):为解决一个开放性问题而设计的具有一定约束性的支撑结构 5.python内置了一些库,除此之外,还有其他人自己做的一些库,称之为第三方库 6.一般把第三方库放在.../python3/lib/site_packages中 二、模块分类 1、标准模块

Java内存故障?只是因为你不够帅!

六眼飞鱼酱① 提交于 2020-10-03 00:26:16
Python实战社群 Java实战社群 长按识别下方二维码, 按需求添加 扫码关注添加客服 进Python社群▲ 扫码关注添加客服 进Java社群 ▲ 作者丨小姐姐养的狗 来源丨小姐姐味道(小姐姐味道) 从小我就对Java有着深厚的感情,算下来有几十年的Java经验了。当年的Java还是Sun公司的,我有着多年的Servlet经验,CURD经验,在现在已经被自我革新,转而研究人生的哲学。罢了,不吹了。本文是关于Java故障排查的,属上篇。 为了保证文章的流畅性,我决定一口气把它写完。因为相关方面的培训做的多了,就不需要在写的时候参考资料、翻源代码。掐指一算,本文一个小时没花掉,但篇幅已经较长了。 长了,那就割断。本篇就定为内存排查的上篇,主要讲一些原理。为什么要讲原理?开车还需要了解汽车结构么? 这还真不能相比。 汽车很少坏,出了问题你会花钱给拖车公司、4S店。你还会每年给它买上保险。 反观Java,三天两头出问题,找人解决还找不到人,给钱都不一定能解决问题。能比么?盘点来盘点去,最后只能靠自己。 1.内存里都有啥 2.操作系统内存 3.JVM内存划分 4.一图解千愁,jvm内存从来没有这么简单过! 5.为什么会有内存问题 6.垃圾回收器 7.重要概念GC Roots 8.对象的提升 1.内存里都有啥 要想排查内存问题,我们就需要看一下内存里都有啥。我们先来看一下操作系统内存的划分

96年/离职8个月/拒绝华为offer/目前自由职业-记这大半年来的挣扎与迷茫

耗尽温柔 提交于 2020-10-03 00:24:43
仅以此文,记录自己这大半年来的挣扎与迷茫。 2019 年 11 月 在公司工作七个月之后,我被裁员了。 回忆自己这七个月的经历,不管是遇到的人和事,更多感到的是收获和感恩,于是我写下了: 「应届毕业生工作7个月小结」 ,当做对于这七个月的小小总结。 本想好好休息几天,不料第二天还在睡梦中,就有 HR 和猎头找上门来了.. 既然来了,就好好准备复习面试吧.. 2019 年 12 月 疯狂面试ing... 然后 12 月开始了疯狂面试,包括华为 (口头 Offer) 、字节跳动 (一面挂,面试官说很久没问过应届生了..) 等,一下子就面到了 12 月中旬了。 说实话,那段时间好怕面试官问: 「你对 HashMap 了解多少?」 这种问题。 从「基础结构」到「 1.7 到 1.8 版本变化」; 从「与其他 Map 结构对比和区别」到「 HashMap 具体的 put/resize/hash 等的具体过程」; 从「为什么 String/Integer 适合做 HashMap 的 K 」到「 HashMap 为什么不直接使用 hashCode() 处理后的哈希值直接作为 table 下标」; 从「什么是哈希,什么是哈希冲突」到「 HashMap 如何解决哈希冲突」; 再从 HashMap 延伸的其他 Java 常用集合.... 这些教科书式回答我都快说吐了.. 疯狂面试的生活

这一次,阿里云再度将“重构计算”扛在肩头!

感情迁移 提交于 2020-10-03 00:24:12
引言:冲击业务永续与极致性能,推进自研软硬一体与全面云原生,阿里云这是要将“重构计算”进行到底了…… 近日,阿里云第三代神龙云服务器风风火火的上新了。 这一幕距离六月基础设施算力升级,搭载第三代神龙云服务器架构的高主频七代发布仅仅过了一个多月。 阿里云弹性计算负责人旭卿说,如此之快还要归功于第三代神龙架构带来的利好尝试。 确实,通过三代神龙架构的强势助力,全新推出的第三代神龙云服务器在各项服务能力上都得到了全面升级。 无论是计算效率还是网络与存储方面的硬实力,均可谓“强势来袭”。 综合性能暴涨160%,第三代神龙云服务器不是一点子智慧 有数据显示,与上一代神龙云服务器同款相比,这次的三代产品综合性能暴涨高达160%, 相比目前全球范围内最顶级的云服务器还要快上超过30% ,地表强悍有木有? 与第七代ECS企业级高主频实例类似,第三代神龙云服务器在架构上更好地支持了一些 四路服务器 。 或许大家可能知晓,主流的云服务器过去通常采用的是二路服务器,即一个服务器中携带两颗CPU。 如今创新性选择了更加高密度部署的四路服务器制式,也就是同时携带四颗CPU。不但是单体计算性能得到显著提升,从整机的性能角度上也有很大飞跃。 很明显,四路服务器带来的好处,每颗均摊到整体基础设施的成本,相比之前确实下降不少, 当然这也是其整体性能综合提升高达160%的关键所在 。 具体来说

腾讯2020年Java实习生面试,15天后拿offer!激动

核能气质少年 提交于 2020-10-02 22:05:00
近期收到很多小伙伴发来的面试题,因为有很多大小厂的面试题,所以我这也大概整理总结了一下,把那些比较典型有特色且面试内容比较广泛对大家都有用处的面试题汇总了一下。以下便是汇总好的几个大厂的面试题。 腾讯面试 记录了第二次腾讯后台开发社招面试流程,虽然面试流程因人而异,但就我个人感受而言,腾讯的面试从考察内容方面来讲,还是有一定的共通性,这一点,可以从网上众多的面经可以看出。 腾讯第一面 晚八点半,电话面,开始项目介绍,技术难点、实现细节。大概说了20分钟左右,我讲的内容面试官似乎没有理解,可能是项目架构比较复杂,口述不是特别形象,又聊了10分钟,貌似双方谁也没说服谁。开始聊计算机网络、操作系统。内容包括TCP拥塞控制算法、TCP和UDP区别、进程和线程区别等等。都是常规的题目。这一块已经很好的复习过。没问题。时间过去50分钟,面试官总结说我网络协议这一块不错,原理和项目实战比较强,会有下一面。 腾讯第二面 距离上一面隔了六天。电话面,大概20分钟左右。内容如下,不分先后: Q1. 构造函数可以是虚函数吗? Q2. 网络字节序是大端序还是小端序? Q3. Linux中如何创建进程以及创建进程后如何区分子进程? Q4. fork创建的子进程继承了父进程哪些内容 Q5. fork创建的子进程继承了父进程打开的文件描述符,如何让这种继承不发生 Q6. c++虚函数原理 Q7. c+

聊聊claudb的importRDB

有些话、适合烂在心里 提交于 2020-10-02 20:36:27
序 本文主要研究一下claudb的importRDB importRDB claudb-1.7.1/src/main/java/com/github/tonivade/claudb/DBServerState.java public class DBServerState { //...... public void importRDB(InputStream input) throws IOException { RDBInputStream rdb = new RDBInputStream(input); Map<Integer, Map<DatabaseKey, DatabaseValue>> load = rdb.parse(); for (Map.Entry<Integer, Map<DatabaseKey, DatabaseValue>> entry : load.entrySet()) { databases.get(entry.getKey()).overrideAll(ImmutableMap.from(entry.getValue())); } } //...... } importRDB方法创建RDBInputStream,然后执行其parse方法进行解析,之后遍历解析结果,挨个执行databases.get(entry.getKey())

Prometheus Python Client 多进程问题的解释与解决

吃可爱长大的小学妹 提交于 2020-10-02 20:08:35
本文描述基于 prometheus-client (0.8.0) 版本。 Client 存储数据的方法与问题 官方 client 用于存储数据(不管是什么 Metric 类型)使用的是一个 ValueClass 对象,默认情况下定义是: class MutexValue(object): """A float protected by a mutex.""" _multiprocess = False def __init__(self, typ, metric_name, name, labelnames, labelvalues, **kwargs): self._value = 0.0 self._lock = Lock() def inc(self, amount): with self._lock: self._value += amount def set(self, value): with self._lock: self._value = value def get(self): with self._lock: return self._value 使用这个对象而不是 float 的目的主要应该是为了在多线程情况下加锁。 显然这个值是不能在多进程场景下共享的,而多进程模式对于 Python 来说又是一种非常常用的模式,因此出现了一个

学习 JAVA,有什么书籍推荐?学习的方法和过程是怎样的?

我与影子孤独终老i 提交于 2020-10-02 20:01:34
现在互联网上资源丰富,Java 学习并不难。贴个 Java 服务端入门和进阶指南,是给我们组新人入门用的,包括了学习目标、需要掌握的技能和参考资料,并规划了学习阶段和时间,希望帮助到题主。 前言 欢迎加入我们。这是一份针对实习生/毕业生的服务端开发入门与进阶指南。遇到问题及时问你的 mentor 或者直接问我。 建议: 尽量用 google 查找技术资料。 有问题在 stackoverflow 找找,大部分都已经有人回答。 多看官方的技术文档。 ibm developerworkers 的文章质量整体上有保障。 平时花一些时间在 github 上阅读优秀项目源码。 入门(1-2 个月) 目标:参与简单的项目开发。 技能: 掌握 Java。经典的《Java 核心技术:卷1 基础知识》(或者《Java 编程思想》)必看,跳过其中的图形和 applet 章节。习惯查阅 Java API Doc。为了保证代码的质量,《Effective Java》、《Clean Code》和《重构》也需要至少通读一遍。 熟悉 Linux 开发环境和 bash shell。Linux 是我们的开发和部署环境,你最好尽快熟练它。Linux 的基本使用可以通过《鸟哥的Linux私房菜:基础学习篇(第三版)》学习,开发 bash shell 脚本可以参考《Linux Shell脚本攻略》。 掌握开发工具