在很多公司中,IT、数据中心、业务系统一出故障,会有很多人被叫到作战室(就是一个为了解决该问题,而把所有相关人员集中在一起的一个会议室), 但是对于这个问题他们是否可以修复, 是否他们应该负有责任, 经常没有线索...只有很多的日志信息和高级别的告警并不会给你与这个问题根因真正相关的答案. 为了远离这种场景, 真正的「证据」应该是什么? 你应该问什么问题? 是一个用户抱怨还是所有用户都受影响?...如果虚拟机(如:VMware, EC2...)或你的容器(Docker)或你的中间件或你的应用运行时(如:tomcat)没有正确的 size, 或者和其他虚拟机及容器存在资源争用也可能引起性能问题....是应用服务器的问题么? 因为不正确的配置或错误的部署, 应用服务器也可能是性能问题的原因. 正确的资源池(线程, 数据源等)大小, 安全配置或日志参数都会影响性能....总结 How What Who Why 有了这些问题的答案, 你可以消除作战室, 迅速定位问题根源, 优化并找到解决方案.
遇到的问题 今天遇到一个线上的BUG,在执行表单提交时失败,但是从程序日志中看不到任何异常信息。...)); 在日志中看不到任何信息,说明e.getMessage()返回值为空字符串。...原因分析 先来看一下Java中的异常类图: ? Throwable是Java中所有异常信息的顶级父类,其中的成员变量detailMessage就是在调用e.getMessage()返回的值。...所以,在程序日志中不要单纯使用getMessage()方法获取异常信息(返回值为空时,不利于问题排查)。...正确的做法 在Java开发中,常用的日志框架及组件通常是:slf4j,log4j和logback,他们的关系可以描述为:slf4j提供了统一的日志API,将具体的日志实现交给log4j与logback。
它能避免 KPI 的「正确的做事」,从而「做正确的事」。 事中执行 方案选择使用 3C 模型:每次设计 3 个左右的备选方案,方案评选的时候,选择最优的方案。...一个具体的例子是,我们在设计一个软件的时候,我们的存储什么时候使用 MySQL?什么时候使用 PG?他们的优缺点分别是什么?...问题处理 找到根本原因之后,问题如何解决呢?就可以借助 5S 模型来进行问题处理,找到可以直接落地的事项。...让领导看到你的逻辑,对整个事情的把握,清晰的思路,果断的执行,信息(风险)的及时同步。...我们既要做正确的事,也要正确的做事!
简单来说说,标准格式应该是: Copyright+[dates]+[author/owner] *Copyright+[日期]+[作者/拥有者] 有些网站的著作权声明中还会在著作权拥有者之后加一个后缀“...All Rights Reserved 在某些国家曾经是必须的,但是现在在大多数国家,都不是法律上必须有的字样。...All Rights Reserved.”是不规范的。 有些网站的著作权声明中,在“初次公开发表的年份”后会同时注明另外一个年份日期,如:Copyright 1996-2017 XXX....我国现行《著作权法》是参照《伯尔尼公约》制定的,而根据公约规定,著作权是在作品产生后自动获得的、无需声明或注册才能取得。 因此,对于是否使用著作权标识 ©,并没有严格的规定。...所以如何正确书写这几行声明,也并不是件可以随便忽略的事。 参见下面几个常见的拼写格式: ©1995-2004 Macromedia, Inc.
即使是在Tungsten Fabric集群内部,按理说,我们在故障排除环节的第一步,也会进行某种流量嗅探或流量识别。 那么……和传统的物理网络有什么不同呢?...从概念上讲,没有什么不同……但是,在实践当中,事情会更复杂一些。我们所说的复杂,并不是指难以理解无从下手。所谓复杂,是指有更多的变数在起作用,但这并不一定意味着故障排除会非常难。..., Flags:, QOS:-1, S(nh):20, Stats:4/392, SPort 65513, TTL 0, Sinfo 192.168.200.4) 到目前为止,我们只看到了控制面信息...这是第一次确认流量真的在虚拟机之间流动。 我们有2个流,因为每个流都是单向的。 这个输出有这么多信息!流量是流动的,因为Action被设置为F,也就是转发。...一句话,在正确的层面上使用正确的工具~ ---- 作者:Umberto Manferdini 译者:TF编译组 原文链接: https://iosonounrouter.wordpress.com/2020
在之前的博文中已经简单介绍了onnx,其中onnx.proto就代表了onnx模型的基本数据结构。...关于mediapipe的详细介绍在另一篇文章。...正确修改cmake 对于这种情况,比较合适的做法是直接使用命令进行生成。...,PROTO_META_BASE_DIR为编译之后生成文件的目录。...{CMAKE_CURRENT_BINARY_DIR}) LIST(APPEND PROTO_FLAGS -I${CMAKE_CURRENT_SOURCE_DIR}) 设置好之后,通过FOREACH去循环之前的
原文作者:ipfans 今天正好看到一篇关于敏感信息过滤的文章,这算做一个interface实际应用的一些举例和应用。...例子中介绍了一种比较常见的使用场景:使用JSON保存数据时的对诸如用户密码等信息进行保护时候应该做的事情。...,这样,当使用json.Unmarshal等方法时,就可以规避掉在日志或者JSON接口之类的方法中输出敏感信息Password。...实际上,我个人认为非常合适的方法是,我们可以特定某个特殊类型Sensitivity,对于敏感信息统一采用这个类型予以保护。这样也方便我们后续添加新的保护方式。...我们结合第一个方法中的json.Unmarshaler一起使用时,那么就是一个比较完整的敏感信息过滤方案了。
的基本逻辑,但是在Observable链和操作符究竟运行在哪个线程,仍然会有许多困惑。...首先,让我们梳理清晰,在RxJava中.subsribeOn( )和.observeOn( )区别: .subsribeOn( )操作符可以改变Observable应该在哪个调度器上执行任务。...调用 .subscribeOn( ) 尽管代码片段在主线程中,但是整个代码块将运行在.subscribeOn( )定义的线程上: Observable.just(1,2,3) .subscribeOn...调用 .observeOn( ) 如果你的代码片段在主线程中,默认情况下Observable的创建是在.subscribeOn( )定义的线程上,但是,调用.observeOn( )之后,余下的代码将会执行在....subscribe(); 因为thread1的逻辑将会覆盖thread2,所以Observable的创建和.subscribe( )的逻辑处理都将运行在thread1中。
,使用"YYYY-MM-dd"格式化出来的日期显然是不对的,必须使用“yyyy”才能格式化出正确的“年”。...然而有意思的是:在Java中不论是“YYYY”还是“yyyy”都可以用来格式化“年”,且都是合法的!那么,它们的区别是什么呢?在使用过程中该如何选择呢?...根据中华人民共和国国家标准GB/T 7408-2005《数据元和交换格式信息交换日期和时间表示法》中4.3.2.2部分: 即一年中的第一个日历星期包括该年的第一个星期四,并且日历年的最后一个日历星期就是在下一个日历年的第一个日历星期之前的那个星期...,日历星期数是其在该年中的顺序。...我的程序出错正好是“2021-12-27 00:00:00”之后,所以就能解释为什么被格式化为“2022”年了。
一、使用slf4j 使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一 实现方式统一使用: Logback框架 二、打日志的正确方式 1、什么时候应该打日志 当你遇到问题的时候,只能通过debug...当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 2、基本格式 必须使用参数化信息的方式...如果有Throwable信息,需要记录完成的堆栈信息: log.error("获取用户[{}]的用户信息时出错",userName,e); 说明:如果进行了抛出异常操作,请不要记录error日志,由最终处理方进行处理...基本概念 系统运行信息 Service方法中对于系统/业务状态的变更 主要逻辑中的分步骤 外部接口部分 客户端请求参数(REST/WS 调用第三方时的调用参数和调用结果 说明 并不是所有的service...调用其他第三方服务时,所有的出参和入参是必须要记录的(因为你很难追溯第三方模块发生的问题) 4、DEBUG 基本概念 可以填写所有的想知道的相关信息(但不代表可以随便写,debug信息要有意义,最好有相关参数
GOMAXPROCS 是 Go 提供的非常重要的一个环境变量。通过设定 GOMAXPROCS,用户可以调整调度器中 Processor(简称P)的数量。...所以 P 的数量会很大程度上影响 Go Runtime 的并发表现。GOMAXPROCS 在 Go 1.5 版本后的默认值是机器的 CPU 核数 (runtime.NumCPU)。...以 Kubernetes 为代表的基于容器虚拟化实现的资源管理系统,也支持这样的特性,比如下面这个 PodTemplate 的容器的定义里 limits.cpu = 1000m 就代表给这个容器分配1个核心的使用时间...这类技术对 CPU 的隔离限制,导致 runtime.NumCPU() 无法正确获取到容器被分配的 CPU 资源数。runtime.NumCPU()获取的是宿主机的核心数。...目前 Go 官方并无好的方式来规避在容器里获取不到真正可使用的核心数这一问题,而 Uber 提出了一种 Workaround 方法,利用 uber-go/automaxprocs 这一个包,可以在运行时根据
当一个人生病时就会觉得健康是一种莫大的幸福,主要是我中招了,感冒好了之后,我决定继续坚持锻炼身体。今天继续分享Python 的小碎碎 assert。...这里的对或者错,在 Python 中就是 True 或 False。...另外要注意的是,assert 后的表达式中不能使用括号,如下面的代码,会报语法错误的警告,但不会抛出异常,后面那行代码是正确的写法。...在重要的环节,比如判断用户是否是管理员,那么必须使用 if,因为 assert 是可以通过 -o 参数来关闭的。...在一些非重要的环节,比如写代码的初期,程序还不够健壮,使用 assert 来断言,写代码的行数更少,也更优雅。
实现方式统一使用: Logback框架 打日志的正确方式 什么时候应该打日志 当你遇到问题的时候,只能通过debug功能来确定问题,你应该考虑打日志,良好的系统,是可以通过日志进行问题定为的。...当你碰到if…else 或者 switch这样的分支时,要在分支的首行打印日志,用来确定进入了哪个分支 经常以功能为核心进行开发,你应该在提交代码前,可以确定通过日志可以看到整个流程 基本格式 必须使用参数化信息的方式...和除了业务异常之外的所有异常(RuntimeException和Exception) 不应该出现的情况: 比如要使用Azure传图片,但是Azure未响应 如果有Throwable信息,需要记录完成的堆栈信息...: 基本概念 系统运行信息 Service方法中对于系统/业务状态的变更 主要逻辑中的分步骤 外部接口部分 客户端请求参数(REST/WS) 调用第三方时的调用参数和调用结果 说明 并不是所有的service...调用其他第三方服务时,所有的出参和入参是必须要记录的(因为你很难追溯第三方模块发生的问题) DEBUG 基本概念 可以填写所有的想知道的相关信息(但不代表可以随便写,debug信息要有意义,最好有相关参数
问题描述 当我们在很多的网站或者APP上面注册时,我们一般会用电话号码或者邮箱来注册,有的人可能输入了不符合规范的电话号码或者邮箱系统就会自动提示您输入的不是电话号码或者邮箱,那么这是怎么做到的呢?...解决方案 当我们在一个网站登录或注册时需要我们输入邮箱来进行登录或者注册时,我们输入了不规范的邮箱地址就会提示我们相应邮箱地址所缺失的东西例如我们一个简单的登录页面。 ?...图2.1 页面展示 我们需要在这个页面中输入邮箱和密码进行登录操作,今天我们就简单的判断邮箱是否正确就可以了,我们生活中有许许多多的邮箱地址,但是我们怎么去判断邮箱地址是否正确呢?...我们会发现邮箱地址都有一个共同之处,那就是在所有的邮箱地址当中都含有“@”符号和“.”这个符号,所以我们在判断邮箱地址是否正确的时候我们就只需要判断我们所输入的邮箱当中是否包含这两个符号就可以了。...结语 我们很多的判断原理都是一样的,但可能方法会不尽相同,所以只要我们理解了相应的原理就会很简单。在写代码的过程中一定要心细,否则就很容易出错。
抢占式调度对于哪些真正的并行任务是好的,但是当可变状态通过多并发线程共享时,明确的多任务合作更招人喜欢 。 尽管合作多任务,你的代码仍有可能是复杂的,它只是有机会保持可管理下一定的复杂性。...那么在每个命令之间的空间变成无尽的空间黑洞,可怕的Heisenbugs出现 在过去的一年多,尽管在Heka上的工作(一个高性能数据、日志和指标处理引擎)已大多数使用GO语言开发。...Go的亮点之一就是语言本身有一些非常有用的并发原语。但是Go的并发性能怎么样,需要通过支持本地推理的鼓励代码镜头观察。...我们的时间循环代码推理起来更加容易了很多.该模式的核心是 Heke 的设计. 当Heka启动时,它会读取配置文件并且在它自己的go例程中启动每一个插件....但是有一些需要注意的小地方,还有Go的争议探测器的自由应用程序,你可以编写的代码其行为可以预测,甚至在抢占式调度的门面代码中.
为了可以有效率的做事,我们需要做到: 做正确的事;(效果) 正确的做事;(效率) 把事情做正确: 高效的做事的系统方法是:选择/方法/工具; 事情的选择可以依据“紧急/重要四象限图”,“紧急、...这样你就可以把65%-80%的时间花在“重要,但不紧急”的事上。 并因此,把焦虑之源,“重要,并且紧急”的事情,减少到20%~25%。...但你需要知道什么是“重要但不紧急的事情”,这需要和你的深度思考有关。 所以,选择是高效的第一步。 做事需先设定目标,想清楚自己要的结果是什么,然后再采取行动。...只有这样,才能在面对新的工作领域和内容时,做到得心应手。 对我们技术工作来说,道理是一样的。 你当前做的事情是否可以让后面的工作量减少。...如果单纯的接受被动安排的工作,很难真正的自我提升,也很容易陷入到重复和机械化的工作中去。 我们需要保持一种持续学习,主动追求,迭代自我的态度,这也是《高效能人士》里面提到的”积极主动“。
Java停止线程的逻辑(协同、通知) 在Java程序中,我们想要停止一个线程可以通过interrupt方法进行停止。...线程接收到通知之后会根据自身的情况判断是否需要停止,它可能会立即停止,也有可能会执行一段时间后停止,也可能根本就不停止。 那么Java为什么要选择这种非强制性的线程中断呢?...false,那么我们可以在异常中手动的再次中断当前线程,那么就可以完全停止线程任务。...总结 上面我们简单介绍了如何正确的停止线程,如果在以后的面试中被问到这类问题,那么你是不是可以流畅的回答面试官了。...在run方法中遇到异常,我们是不能直接生吞的,一定要做处理,你可以是简单的日志记录,也可以中断线程。但就是不能不做任何处理。
1.在目录下建立.htaccess伪静态: RewriteEngine On RewriteRule ^(\w+)\.jpg$ image.php?...p=$1 [L] order deny,allow 这个文件的作用是把目录下所有.jpg后缀图片重定向到image.php 2.建立image.php程序: <?...3.上传一个image.jpg 就是用作替换的真实图片。 好处 1. 直接插入图片地址写入AFF,不会像iframe那样明显。 2. 可以判断HTTP_REFERER,决定哪些网站定位至AFF。...这个功能同样可以用作防盗链,盗链者复制你的图片使用,会被定位到AFF地址,从而实现赚钱。 4. 可以设置图片时间,文件名写成插入时间时的时间戳,超出指定时间(比如5天),就自动跳转AFF链接。...这样可以在公共论坛发帖的前几天内,让别人看不出是AFF,过了几天再跳转到AFF。
需求,我想把所有项目中的go, mod,yaml, json, text文件包含在项目中,但是不想包含logs,polaris文件夹。在根的gitignore中可以这么写: * !...这一行非常重要,否则所有子目录的文件都没办法被git寻到。 第三行: 排除logs/polaris文件夹 第五行: !*.go,包含go类型的文件夹。 这下,使用白名单的方式,就会很安心,很强大。...再也不需要经常的修改gitignore的规则,也可以放心的git add .了。
当你能详细的、正确的描述一个问题时,你就知道如何解决该问题。 提问也是一种艺术,下面是在群里看到的一张图: ?...https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way指向 Github 的一个仓库:《How-To-Ask-Questions-The-Smart-Way
领取专属 10元无门槛券
手把手带您无忧上云