首页 文章 精选 留言 我的

精选列表

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

【直播回顾】饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的

主讲人:陈东明(饿了么-CI核心基础设施部-高级架构师) 饿了么北京技术中心架构组负责人,负责饿了么的产品线架构设计以及饿了么基础架构研发工作。 曾任百度架构师,负责百度即时通讯产品的架构设计。具有丰富的大规模系统构建和基础架构的研发经验,善于复杂业务需求下的大并发、分布式系统设计和持续优化。 点击关注陈东明的云栖社区个人主页 内容概要:讲述MongoDB架构,以及该架构下引发MongoDB的多种丢数据的异常、脏读异常、陈旧读异常,MongoDB是如何致力于引入新版本的复制协议逐步消除了所有这些异常,最终让MongoDB达到一个high level的一致性和可靠性,成为一个可信任的数据库。 以下为陈东明专家此次所讲的PPT截图: 本PPT下载地址:点击下载视频直播回顾:点击观看 本直播回顾视频也可选择扫下方二维码入群观看~ 云栖社区的官方Redi

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

【直播预告】饿了么高级架构师陈东明:MongoDB是如何逐步提高可靠性的

主讲人:陈东明(饿了么-CI核心基础设施部-高级架构师) 饿了么北京技术中心架构组负责人,负责饿了么的产品线架构设计以及饿了么基础架构研发工作。 曾任百度架构师,负责百度即时通讯产品的架构设计。具有丰富的大规模系统构建和基础架构的研发经验,善于复杂业务需求下的大并发、分布式系统设计和持续优化。 点击关注陈东明的云栖社区个人主页 内容概要:讲述MongoDB架构,以及该架构下引发MongoDB的多种丢数据的异常、脏读异常、陈旧读异常,MongoDB是如何致力于引入新版本的复制协议逐步消除了所有这些异常,最终让MongoDB达到一个high level的一致性和可靠性,成为一个可信任的数据库。 直播时间:2019年7月16日 (周二)晚20:00 直播地点:【Redis&MongoDB 社区大群】 详情请看下方图片: 想看 免费直播的提前扫码入

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

如何提高深度学习模型的可解释性?极致的数据透出与多维可视化实战详解

小叽导读:深度网络对机器学习研究和应用领域产生了巨大的影响,与此同时却无法很清晰地解释神经网络的来龙去脉。迄今为止,深度学习不够透明,神经网络整体看来仍然是一个黑箱。因此,人们一直致力于更透彻地去理解其中复杂的过程,从而达到进一步优化的目的。由于人类对于世界的认知和感受主要来自于视觉,良好的可视化可以有效地帮助人们理解深度网络,并进行有效的优化和调节。 一. 背景 (图片引自 2018 AI predictions:8 insights to shape business strategy) 尽管业界对于图像和NLP领域,在可视化和可解释性等方向上已经取得了一些进展,但对于计算广告领域,目前还是空白,可以借鉴的平台或工具很少。而可视化的前提,是需要先对训练模型进行相关数据透出,从而进行可视化分析评估,最终使得神经网络从黑盒向白盒过渡,在

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

Go 自带的 http/server.go 的连接解析 与 如何结合 master-worker 并发模式,提高单机并发能力

作者:林冠宏 / 指尖下的幽灵 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 博客:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/ 腾讯云专栏: https://cloud.tencent.com/developer/user/1148436/activities 关于 server.go 源码的解析可以去搜下,已经有很多且还不错的文章。 正文: 从我们启动http.ListenAndServe(port,router)开始,server.go 内部最终在一个for 循环中的 accept 方法中不停地等待客户端的连接到来。 每接收到一个accept 就启动一个 gorutine 去处理当前ip的连接。也就是源码里的go c.serve(ctx)。这一个步骤在 c.serve(ctx) 它并不是简单的形式: 请求-->处理请求-->返回结果-->断开这个连接-->结束当前的 gorutine 根据我的调试结果与源码分析显示,正确的形式是下面这样的: 为每一个连接的用户启动了一个长连接,serve 方法内部有个超时的设置是c.rwc.SetReadDeadline(time.Time{}),这样子的情况,如果内部不出错,当前的连接断开的条件是客户端自己断开,或nat超时。 这个连接建立后,以ip为单位,当前的客户端,此时它的所有http请求,例如get,post,它们都会在这个启动的gorutine 内进行分发与被处理。 也就是说,同一个ip,多个不同的请求,这里不会触发另一个 accept,不会再去启动一个go c.serve(ctx) 上述我们得出结论: 如果有 100万个 accept,就证明有100万个连接,100万个ip与当前server连接。即是我们说的百万连接 百万连接 不是百万请求 每一个连接,它可以进行多个http请求,它的请求都在当前启动这个连接的gorutine里面进行。 c.serve(...) 源码中的for 死循环就是负责读取每个请求再分发 for { w, err := c.readRequest(ctx) // 读取一个 http 请求 //... ServeHTTP(...) } 我们的100万 连接里面,有可能并发更多的请求,例如几百万请求,一个客户端快速调用多个请求api 图解总结 结合 master-worker 并发模式 根据我们上面的分析,每一个新连接到来,go 就会启动一个 gorutine,在源码里面也没有看到有一个量级的限制,也就是达到多少连接就不再接收。我们也知道,服务器是有处理瓶颈的。 所以,在这里插播一个优化点,就是在server.go 内部做一个连接数目的限制。 master-worker 模式本身是启动多个worker 线程,去并发读取有界队列里面的任务,并执行。 我自身已经实现了一个go版本的master-worker,做过下面的尝试: 在 go c.serve(ctx) 处做修改,如下。 if srv.masterWorkerModel { // lgh --- way to execute PoolMaster.AddJob( masterworker.Job{ Tag:" http server ", Handler: func() { c.serve(ctx) fmt.Println("finish job") // 这一句在当前 ip 断开连接后才会输出 }, }) }else{ go c.serve(ctx) } func (m Master) AddJob(job Job) { fmt.Println("add a job ") m.JobQueue <- job // jobQueue 是具备缓冲的 } // worker func (w Worker) startWork(master *Master) { go func() { for { select { case job := <-master.JobQueue: job.doJob(master) } } }() } // job func (j Job) doJob(master *Master) { go func() { fmt.Println(j.Tag+" --- doing job...") j.Handler() }() } 不难理解它的模式。 现在我们使用生产者--消费者模式进行假设,连接的产生是生产者,<-master.JobQueue 是消费者,因为每一次消费就是启动一个处理的gorutine。 因为我们在accept 一个请求到<-master.JobQueue,管道输出一个的这个过程中,可以说是没有耗时操作的,这个job,它很快就被输出了管道。也就是说,消费很快,那么实际的生产环境中,我们的worker工作协程启动5~10个就有余了。 考虑如果出现了消费跟不上的情况,那么多出来的job将会被缓冲到channel里面。这种情况可能出现的情景是: 短时间十万+级别连接的建立,就会导致worker读取不过来。不过,即使发生了,也是很快就取完的。因为间中的耗时几乎可以忽略不计! 也就说,短时间大量连接的建立,它的瓶颈在队列的缓冲数。但是即使瓶颈发生了,它又能很快被分发处理掉。所以说: 我的这个第一点的尝试的意义事实上没有多大的。只不过是换了一种方式去分发go c.serve(ctx)。 这个是第二种结合方式,把master-worker放置到ServeHTTP的分发阶段。例如下面代码,是常见的http handler写法,我们就可以嵌套进去。 func (x XHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { //... if x.MasterWorker { poolMaster.AddJob(master_worker.Job{ Tag:"normal", XContext:xc, Handler: func(context model.XContext) { x.HandleFunc(w,r) }, }) return } x.HandleFunc(w,r) //... } 这样的话,我们就能控制所有连接的并发请求最大数。超出的将会进行排队,等待被执行,而不会因为短时间 http 请求数目不受控暴增 而导致服务器挂掉。 此外上述第二种还存在一个:读,过早关闭问题,这个留给读者尝试解决。 如果您认为这篇文章还不错或者有所收获,您可以通过扫描一下下面的支付宝二维码 打赏我一杯咖啡【物质支持】,也可以点击右下角的【推荐】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力、

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

从零开始搭建Java开发环境第四篇:精选IDEA中十大提高开发效率的插件!

Lombok 知名的插件,无需再写那么多冗余的get/set代码 JRebel 热部署插件 alibaba java coding guide 阿里巴巴代码规范插件,自动检查代码规范问题 GenerateAllSetter 当你进行对象之间赋值的时候,你会发现好麻烦呀,能不能有一个更好的办法呢~ 有,只要你选中需要生成set方法的对象,按下快捷键 alt+enter 界面如下: junit generator 自动生成单测的神奇 ECtranslation 一款好用的自动翻译插件 key promotor X 学习IDEA快捷键的好插件 .igonre 自动帮你修改git监控的文件类型,可以排除掉莫名其妙的文件类型,避免出现在你的代码提交记录里。 grep console Idea console输出日志一大推,想要快速找到自己想要的类型日志,使用此插件可以快速定位到自己关注的类型日志,比如error,warn,自己也可以配置自己喜欢的颜色~ 从settings进入,点击 other settings,可以配置自己喜欢的颜色提示,比如我只选择了默认~ ———————————————— GsonFormat 自动帮你把类转化为JSON对象,一大利器 free mybatis plugin String manipulate 字符串操作工具

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

Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率

注意:由于是重复数据,词法不具有通用性!文章价值不大! 摘自:https://segmentfault.com/a/1190000002695169 Doc Values 会压缩存储重复的内容。给定这样一个简单的 mapping mappings = { 'testdata': { '_source': {'enabled': False}, '_all': {'enabled': False}, 'properties': { 'name': { 'type': 'string', 'index': 'no', 'store': False, 'dynamic': 'strict', 'fielddata': {'format': 'doc_values'} } } } } 插入100万行随机的重复值 words = ['hello', 'world', 'there', 'here'] def read_test_data_in_batches(): batch = [] for i in range(10000 * 100): if i % 50000 == 0: print(i) if len(batch) > 10000: yield batch batch = [] batch.append({ '_index': 'wentao-test-doc-values', '_type': 'testdata', '_source': {'name': random.choice(words)} }) print(i) yield batch 磁盘占用是 size: 28.5Mi (28.5Mi) docs: 1,000,000 (1,000,000) 把每个word搞长一些,同样是插入100万行 words = ['hello' * 100, 'world' * 100, 'there' * 100, 'here' * 100] def read_test_data_in_batches(): batch = [] for i in range(10000 * 100): if i % 50000 == 0: print(i) if len(batch) > 10000: yield batch batch = [] batch.append({ '_index': 'wentao-test-doc-values', '_type': 'testdata', '_source': {'name': random.choice(words)} }) print(i) yield batch 磁盘占用不升反降 size: 14.4Mi (14.4Mi) docs: 1,000,000 (1,000,000) 这说明了lucene在底层用列式存储这些字符串的时候是做了压缩的。这个要是在某个商业列式数据库里,就这么点优化都是要大书特书的dictionary encoding优化云云。 Nested Document 实验表明把一堆小文档打包成一个大文档的nested document可以压缩存储空间。把前面的mapping改成这样: mappings = { 'testdata': { '_source': {'enabled': False}, '_all': {'enabled': False}, 'properties': { 'children': { 'type': 'nested', 'properties': { 'name': { 'type': 'string', 'index': 'no', 'store': False, 'dynamic': 'strict', 'fielddata': {'format': 'doc_values'} } } } } } } 还是插入100万行,但是每一千行打包成一个大文档 words = ['hello', 'world', 'there', 'here'] def read_test_data_in_batches(): batch = [] for i in range(10000 * 100): if i % 50000 == 0: print(i) if len(batch) > 1000: yield [{ '_index': 'wentao-test-doc-values2', '_type': 'testdata', '_source': {'children': batch} }] batch = [] batch.append({'name': random.choice(words)}) print(i) yield [{ '_index': 'wentao-test-doc-values2', '_type': 'testdata', '_source': {'children': batch} }] 磁盘占用是 size: 2.47Mi (2.47Mi) docs: 1,001,000 (1,001,000) 文档数没有变小,但是磁盘空间仅仅占用了2.47M。这个应该受益于lucene内部对于嵌套文档的存储优化。 本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6269604.html,如需转载请自行联系原作者

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

川普提高技术企业税收,迫使后者以更高工资雇用技能水平更低的国内人员

对于硅谷自成体系的运营方式,不光是美国,整个世界往往都对其投出不屑的目光。 是的,可观的人员薪酬、高度集中的单一行业再加上自我引导型文化导向,这一切都让外人很难理解其如何发展,更不用提会给人类带来怎样的影响。 而技术领导者们在达沃斯峰会上与民主党领袖及银行家们一起用餐时,对方无奈的态度显然也从侧面证明了这一点。 在硅谷亿万富翁彼得·蒂尔的支持之下,唐纳德·川普在一片争议声中坐实了其候选人地位,同时亦巩固了其有能力说服足够的美国人将其送入白宫的呼声优势。 然而作为硅谷的家园,加利福尼亚州民众却集体将选票投给了另一位候选人。 旧金山南部狭长地带(即硅谷)中有这样一部分居民,他们被称为“苹果”,在川普看来这帮家伙正是搞乱美国的罪魁祸首之一。 根据川普的观点,苹果公司是美国制造商的象征,但其一直在通过购买组件并在海外组装的方式从无数美国人民手中夺去工作岗位。 举例来说,iPad当中使用的芯片由英国ARM负责设计,内存来自韩国三星与日本东芝及尔必达公司,最终装配工作则由台湾的富士康承担。 不过退一步讲,川普提出的经济民族主义战略绝不单纯以苹果作为抨击目标——其矛头亦指向来自美国“普通”各州及地区的其它不同规模技术企业。 在亲川普的德克萨斯州,戴尔公司在其存储设备当中使用来自三星的NAND芯片,而位于马萨诸塞州的EMC亦在使用三星提供的内存。 而在支持希拉里·克林顿的西北地区,微软公司与富士康类似的Pegatron在台湾生产其Surface产品,且同样使用来自三星公司的SSD设备。 不只是是在硅谷,遍布美国全国的各技术厂商都在立足全球进行组件采购与集成。 物联网技术的兴起亦进一步推动了这一趋势,而此类小型设备不再仅仅是大型企业或者消费者手中独有的产物。 作为全球供应链中重要组成部分的各美国企业将需要缴纳更为沉重的税费。 川普建议对美国企业采购自海外的进口货物进行征税,其中来自墨西哥的货物将征收35%税额。他同时提到,应对“外包工作”征收15%税额,而全部进口商品皆应征收20%税额。 川普同时谈到了美国与韩国之间建立的新的贸易协定,他将奥巴马总统签订的现有协议称为“尴尬”的产物,对于美国非常不利。 川普亦不忘强调自身地位,宣称他将作为国家间贸易的谈判代表。如果他的表述全部成真的话,那么美国无法在国内进行制造或者组装的技术企业亦将由于税收增设及新的进口关税而导致成本上升。为了解决这个问题,各美国企业必须在国内建设基础设施,并选择雇用大量工资更高但技术水平反而更低的国内员工。 伴随着英国脱欧,英镑兑美元的价格遭遇一路下跌。不过,这部分价格浮动将被直接传递给消费者,而非由制造商自身承担。 因此,技术产品在美国国内出现长期价格上涨及其国际供给成本走高几乎已经成为必然出现的结果。 然而亦有另一种可能,即唐纳德·川普本人的实际执行策略。考虑到他在总统竞选期间曝出的一系列言语攻击与冲动倾向,我们很难判断他的哪些观点仅仅是为了反驳对方以及拉拢选民,而哪些会真正被制定为实际政策。 原文发布时间为:2017年7月6日 本文来自云栖社区合作伙伴至顶网,了解相关信息可以关注至顶网

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

Python爬虫入门教程 62-100 30岁了,想找点文献提高自己,还被反爬了,Python搞起,反爬第2篇

学术搜索 学习理论的知识少不了去检索文献,好多文献为你的实操提供了合理的支撑,我所在的大学内网默认是有知网账户的,非常NICE 今天要完成的网站是 http://ac.scmor.com/ Google学术搜索是一个文献检索服务,目前主要是提供维普资讯、万方数据等几个学术文献资源库的检索服务。通过Google学术搜索只能够查找到这些学术资料的“报告、摘要及引用内容... 来源百度百科 我们的目标 获取现在访问的链接地址,当你使用谷歌浏览器的开发者工具抓取的时候,得到的是一个js加密函数 注意看上图2的位置,接下来,我们采用上篇博客的方式,去尝试获取visit函数的具体内容 我们要在所有的请求链接中去检索一个visit方法,注意步骤 双击方法名,进入 找到核心方法 function visit(url) { var newTab = wind

资源下载

更多资源
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文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册