用Recover来实现更健壮的go程序】的更多相关文章

缘起:线上的go service 挂了,无法启动. 原因:采用的第三方库有个bug, 在go携程里面执行task的时候会产生out of range 的panic, 而我又把任务队列每次加载的时候重做一次,导致无法启动. 分析:go携程里面某个task执行失败,不应该影响service的正常运行. 解决:在go协程插入recover, 出现panic的时候,自己退出而不影响整个service func server(workChan <-chan *Work) { for work := ran…
      如何编写更少bug的程序?  尽可能避免常见的程序错误.              沟通设计先行 + 编写可复用代码 + 做得更多 + 做的更少 + 创造“编程心流”+ 严格的程序测试            一. 沟通设计先行        为避免需求或业务逻辑理解的不完全或偏差,  或者设计上存在较大的缺陷, 导致后期不必要的返工, 耗费宝贵的时间和精力, 编程开发遵循的首要准则是沟通设计先行: 与需求方.业务方和工作伙伴多多沟通交流, 进行设计评审, 能够有效地减少因为需求.业务…
说到在http协议下用户登录如何保证密码安全这个问题:    小白可能第一想法就是,用户在登录页面输入密码进行登录时,前台页面对用户输入的密码进行加密,然后把加密后的密码作为http请求参数通过网络发到服务器.    这样做是无法保证用户的账户安全的,因为稍微懂一点编程知识的人就可以通过你发送的http请求知道了你的密码,小白又说了,我密码加密了,它拿到的也是加密后的密码,它不知道我的原始密码它是无法从登录页面登录的. 原文和作者一起讨论:http://www.cnblogs.com/intsm…
说到在http协议下用户登录如何保证密码安全这个问题:    小白可能第一想法就是,用户在登录页面输入密码进行登录时,前台页面对用户输入的密码进行加密,然后把加密后的密码作为http请求参数通过网络发到服务器.    这样做是无法保证用户的账户安全的,因为稍微懂一点编程知识的人就可以通过你发送的http请求知道了你的密码,小白又说了,我密码加密了,它拿到的也是加密后的密码,它不知道我的原始密码它是无法从登录页面登录的. 原文和作者一起讨论:http://www.cnblogs.com/intsm…
在众多语言中, Java 生态系统发展得最好, 比如异常logging报警, 比如性能监控工具. Python其实生态也不错, 这里列出一些出色的工具. LogBook, 并结合 raven-python handler 与 sentry 集成. http://logbook.readthedocs.io/en/stable/index.htmlsentry raven-python https://docs.sentry.io/clients/python/ sentry, 专注于程序异常lo…
一.序言 空值异常是应用运行时常见的异常,传统方式为了编写健壮的应用,常常使用多层嵌套逻辑判断回避空指针异常.Java8新特性之Optional为此类问题提供了优雅的解决方式. 广大程序员朋友对空值异常刻骨铭心,因此Optional一经推出,广受赞誉. 二.问题复原 (一)素材准备 public class LoginUser implements UserDetails { private Long deptId; private String token; private Long logi…
如果是编写一个服务器demo,比较简单,只要会socket编程就能实现一个简单C/S程序,但如果是实现一个健壮可靠的服务器则需要考虑很多问题.下面我们看看需要考虑哪些问题. 一.维持心跳 为何要维持心跳,TCP难道不是一个安全可靠的连接么?正常情况下,C端和S端无论是谁掉线,对方都能感知到.从而进行后续处理,比如释放维持的资源并通知业务层进行相应的业务处理. 如果TCP通道非常繁忙,C端和S端都能通过正常的业务通信感知到对方的存在与否.但如果TCP通道长时间无数据往来,这种感知就无法主动获取到,…
JavaFxTemplate 使用说明 项目基于maven,请确保maven配置成功,否则,可能会出现问题 项目内置了commons-io的jar包,Jfoenix的jar包以及常用的工具类JFxUtils,具体使用请看注释! 原本是想将JFxUtils单独出来,打成一个jar包,不过,项目引用之后一起打成jar包,项目的jar包跑不起来,报找不到类的错误. 复制该项目,修改项目名,之后修改pom.xml中的 groupId,artifactId,version. 打开IDEA,Main.jav…
1. public 成员(公共成员) (1)使用this 关键字的类的成员允许在任何地方被访问. (2)使用 prototype 定义的属性和方法都是公共成员. 这些属性和方法可以在外面任何地方被访问. 2.private 成员(私有成员) 如果不想类的成员在外部被访问到,那么就可以使用var 关键字. private 方法可以使用匿名函数来定义,也可以使用ming命名函数定义. function Person(){ var showInfo = function(){} //或者 functi…
第1章 CLR的执行模型 托管模块的各个组成部分:PE32或PE32+头,CLR头,元数据,IL(中间语言)代码. 高级语言通常只公开了CLR的所有功能的一个子集.然而,IL汇编语言允许开发人员访问CLR的所有功能. JITCompiler函数负责将一个方法的IL代码编译成本地CPU指令.由于IL是“即时”(just in time)编译的,所以通常将CLR的这个组件称为JITter或者JIT编译器. Microsoft定义了一个“公共语言规范”(Common Language Specific…
摘要:90 年代,LAMP 曾风靡一时,然而随着需求的变迁和数据流量的激增,LAMP 已不可避免的走下神坛.近日,在 MongoDB Blog 中,Dana Groce 介绍了一个基于新时代架构的实践 MEAN ,下面一起走进. [编者按]在九十年代,Linux+Apache+Mysql+PHP 架构曾风靡一时,直到现在仍然是众多 Web 应用程序的基本架构.然而随着需求的变迁和数据流量的激增,LAMP 已不可避免的走下神坛.近日,在 MongoDB Blog 中,Dana Groce 介绍了一…
在CLR的世界中,有一系列的令人Amazing的技术和架构.其中,CLR对应用程序在内存中内存分配,执行模型,程序之间的交互等一系列的技术,值得每一个致力于DotNet平台的技术人员深究. 编程人员在开发的过程中,如果把程序集的加载(Assemblies Load),反射(Reflection),寄宿(Hosting),应用程序域(AppDomain),这四种技术结合起来使用的话,不仅能更好的使用CLR这个平台提供的强大的功能,而且能够构建更安全,更健壮的应用程序代码. 这篇博文里,就是使用托管…
有几天没有写一写博客了,今天就带给大家一些面试题和参考答案吧! 这些都是上海尚学堂Java培训的学员去面试时遇到的问题,今天总结出来的是Java线程相关类的面试题.把参考答案和解析也发布出来,供大家学习参考. 1.线程是什么?进程是什么?二者有什么区别和联系? (1)线程是CPU独立运行和独立调度的基本单位:(2)进程是资源分配的基本单位:是执行着的应用程序两者的联系:进程和线程都是操作系统所运行的程序运行的基本单元. 区别:(1)进程具有独立的空间地址,一个进程崩溃后,在保护模式下不会对其它进…
1.进程和线程 (1)进程是资源分配的最小单位,线程是程序执行的最小单位. (2)进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段.堆栈段和数据段,这种操作非常昂贵.而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多. (3)线程之间的通信更方便,同一进程下的线程共享全局变量.静态变量等数据,而进程之间的通信需要以通信的方式(IPC)进行.不过如何处理好同步与互斥是编写多线…
线程和进程各自有什么区别和优劣: 进程是资源分配的最小单位,线程是程序执行的最小单位 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数据表来维护代码段.堆栈段和数据段,这种操作非常昂贵.而线程是共享进程中的数据的,使用相同的地址空间,因此CPU切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也比进程要小很多,线程的上下文切换的性能消耗要小于进程. 线程之间的通信更方便,同一进程下的线程共享全局变量.静态变量等数据. 多进程程序更健壮,多线程程序只要有一个线程死…
我们可以使用 go tool pprof 命令来交互式的访问概要文件的内容.命令将会分析指定的概要文件,并会根据我们的要求为我们提供高可读性的输出信息. 在 Go 语言中,我们可以通过标准库的代码包 runtime 和 runtime/pprof 中的程序来生成三种包含实时性数据的概要文件,分别是 CPU 概要文件.内存概要文件 和 程序阻塞概要文件.下面我们先来分别介绍用于生成这三种概要文件的 API 的用法. CPU 概要文件 在介绍 CPU 概要文件的生成方法之前,我们先来简单了解一下 C…
复习进程知识: python:主进程,至少有一个主线程 启动一个新的子进程:Process,pool 给每一个进程设定一下执行的任务:传一个函数+函数的参数 如果是进程池:map函数:传入一个任务函数+一个序列 启动:start 多进程执行的时候:如果主进程退出了,子进程还在执行 如何让主进程等待子进程执行完毕再退出:调用join函数 多进程之间共享变量:跨进程的锁Manager.lock() 共享证书:Manager.Value(‘i’,0) 共享列表: 共享字典: 共享字符串“ 3个多进程的…
题一,同步和异步有啥区别? 题二,TCP与UDP有啥区别? 题三,进程和线程有啥区别? 题一答案: 同步(Sync):所有的操作都做完,才返回给用户.这样用户在线等待的时间太长,给用户一种卡死了的感觉(比如系统迁移中,点击了迁移,界面就不动了,但是程序还在执行,卡死了的感觉). 这种情况下,用户不能关闭界面,如果关闭,那么迁移程序也会中断,用户体验不好. 异步(Async):将用户请求放入消息队列,并反馈给用户,比如系统迁移程序已经启动,提示你可以关闭浏览器了.然后程序再慢慢地写入数据库.但是用…
题一,堆和栈的区别是? 题二,Volatile与Register的区别是? 题三,ARM里的大端格式和小端格式分别是什么意思? 题一答案:   (1)存储内容不同 栈:在函数调用时,栈中存放的是函数中(最底下是函数调用后的下一条指令)的各个参数(局部变量). 堆:一般是在堆的头部用一个字节存放堆的大小.堆中的具体内容由程序员分配. (2)管理方式上不同 栈:由系统自动分配并释放空间. 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间,当对应的生存周期结束后栈空间被自动释放…
Ben Werdmuller 是一位 Web 策划师和开发人员,他专注于开放源码平台.他是开源社交网络框架 Elgg 的共同创始人和技术带头人.Ben 的博客 http://benwerd.com/. 简介: 实时 web 应用程序是联网的应用程序,带有基于 web 的用户界面,能够及时显示刚刚发布的 Internet 信息.这样的应用程序示例包括社会新闻聚合器和监控工具,它们能够使用来自外部源的数据持续更新.在本教程中,您将创建一个小型通知工具 Pingstream,它使用 PHP 和 Jav…
1.到底什么是线程?什么是进程? Python自己没有这玩意,Python中调用的操作系统的线程和进程. 2.Python多线程情况下: 计算密集型操作:效率低,Python内置的一个全局解释器锁,锁的作用就是保证同一时刻一个进程中只有一个线程可以被cpu调度,多线程无法利用多核优势,可以通过多进程方式解决,但是比较浪费资源. IO操作:效率高 3.Python多进程的情况下: 计算密集型操作:效率高(浪费资源),不得已而为之. IO操作:效率高(浪费资源) 4.为什么有这把GIL锁? Pyth…
一.多线程基础知识 1.进程和线程 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程:进程也是程序的一次执行过程,是系统运行程序的基本单位:系统运行一个程序即是一个进程从创建.运行到消亡的过程. 线程:进程内部的一个独立执行单元:一个进程可以同时并发的运行多个线程,可以理解为一个进程便相当于一个单 CPU 操作系统,而线程便是这个系统中运行的多个任务. 进程和线程的区别: 进程有独立的内存空间,进程中的数据存放空间(堆空间和栈空间)是独立的,至…
http://www.hoterran.info/otp-gen_server-sourcecode 在阅读erlang的otp源码gen_server.erl的时候,一直想写点什么,用一种最好的方式表达出来,最终却总是没法表达清楚,困惑之余看到这篇文章,作者用图解的方式,非常清晰明了的表达了我一直想表达的东西,下面是原文链接: http://www.hoterran.info/otp-gen_server-sourcecode 感谢原创作者热心的分享. 阅读OTP源码可以帮助你写出更好.更健壮…
Python并发编程内容回顾 并发编程小结 目录 • 一.到底什么是线程?什么是进程? • 二.Python多线程情况下: • 三.Python多进程的情况下: • 四.为什么有这把GIL锁? • 五.Python中线程和进程(GIL锁) • 六.为什么要创建线程? • 七.为什么要创建进程? • 八.进程和线程的区别? • 九.线程创建的越多越好吗? • 十.生产者消费者模型解决了什么问题? • 十一.Lock和RLock的区别? • 十二.进程和线程以及协程的区别? • 十三.IO多路复用作…
一.Java 基础 1.JDK 和 JRE 有什么区别? JDK是java开发工具包,提供java的开发环境和运行环境.包括编译器.开发工具和更多的类库等.JDK包含了JRE. JRE是java运行环境,为java的运行提供了所需环境.包括JVM虚拟机和基本的类库. 2.== 和 equals 的区别是什么? ==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同 ==是指对内存地址进行比较 , equals()是对字符串的内容进行比较…
静态链接库和动态链接库的区别 一个进程可以通过调用waitpid函数来等待它的子进程终止或者停止 Debug和Release的区别 临界区互斥量信号量事件进程互斥与同步 进程有哪几种状态,状态转换图,及导致转换的事件 进程由运行态进入就绪态和阻塞态的原因 进程切换 进程调度算法 死锁 哲学家就餐问题 linux运行时内存映像 通过虚拟地址访问内存的优势 缓存是数据交换的缓冲区(称为Cache) 线程访问某数据 无名管道  FIFO(命名管道)消息队列信号量信号共享内存 1.    静态链接库和动…
content: 1. 为什么要多进程编程?和多线程有什么区别? 2. python 多进程编程 3. 进程间通信 =======================================   一. 为什么要多进程编程?和多线程有什么区别? 由于GIL的存在,所以对于某一些多线程任务来说,无法利用多核的优势,对这些耗cpu的任务,用多进程反而能利用多cpu. 所以多cpu的操作用多进程编程. 对io操作较多的任务来说,瓶颈不在于cpu,更多的在于io的切换中的消耗和时间等待.用多线程反而能…
Java多线程涉及的概念 在理解进程和线程概念之前首选要对并发有一定的感性认识,如果服务器同一时间内只能服务于一个客户端,其他客户端都再那里傻等的话,可见其性能的低下估计会被客户骂出翔来,因此并发编程应运而生,并发是网络编程中必须考虑的问题.实现并发的方式有多种:比如多进程.多线程.IO多路复用. 进程(process) 进程是资源(CPU.内存等)分配的基本单位,它是程序执行时的一个实例.程序运行时系统就会创建一个进程,并为它分配资源,然后把该进程放入进程就绪队列,进程调度器选中它的时候就会为…
其实说JVM的时候有很多人会懵, 也很不理解,我会写Java代码就可以了,我干嘛要学这个,其实不是的,学习JVM是很有必要性的; 为什么要了解JVM 1:写出更好,更健壮的Java程序; 2:提高Java应用的性能,排除问题; 3:面试 估计很多人面试都会被问到,当然初级是不会的,毕竟面试初级的时候是你会SSM的使用基本就可以了,再会点前端比如Ajax,Jquery,一般进一些小公司,外包,是没有问题的,但是我们想要的仅仅是这样吗?当然不是我们的目标永远只有一个,那就是一线互联网公司;如果要进这…
第一节:线程安全和锁Synchronized概念 一.进程与线程的概念 (1)在传统的操作系统中,程序并不能独立运行,作为资源分配和独立运行的基本单位都是进程. 在未配置 OS 的系统中,程序的执行方式是顺序执行,即必须在一个程序执行完后,才允许另一个程序执行:在多道程序环境下,则允许多个程序并发执行.程序的这两种执行方式间有着显著的不同.也正是程序并发执行时的这种特征,才导致了在操作系统中引入进程的概念. 自从在 20 世纪 60 年代人们提出了进程的概念后,在 OS 中一直都是以进程作为能拥…