首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

反思管理犯过的重大错误

近一年来,管理犯下的2个重要错误。该错误导致团队结构不清晰,骨干核心人员不稳定,易流失。...1、资源错配 2、逮着一个人疯狂用 目录 1、背景描述; 2、是如何犯错的,以及为什么犯错; 3、这两个错误带来了哪些影响; 4、规避和改进方式; 一、背景描述 成立3年的初创公司,10人编制的测试团队...组内结构划分可见下图所示: 二、是如何犯错的,以及为什么犯错 错误一:资源错配 对于组长的选择,以及组内骨干的选择,如下图所示: 其中标记为组长的,是团队内部小组内被任命为小组长,标记为骨干的...两个业务小组,初中级员工干中高级员工的活,中高级人员为相对边缘角色。这样的资源错配,直接引发了核心、骨干员工的离职率高的后果。 为什么会这样做: 本质上是一个“谁能谁上”还是“谁上谁能”的问题。...喜欢将所有有挑战性的、开拓边界的任务给到这类员工。 为什么会这样做: 本质上是 个人的喜好问题(因为也属于这类人)。

1.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

为什么容器不能 kill 1 号进程?

而容器也是由init进程直接或间接创建了Namespace的其他进程。 linux信号 而为什么不能在容器kill 1号进程呢?进程收到信号后,就会去做相应的处理。...为什么容器不能kill 1号进程? 对于不同的程序,结果是不同的。把c程序作为1号进程就无法容器杀死,而go程序作为1号进程却可以。... Linux ,kill 命令调用了 kill() 系统调用(内核的调用接口)而进入到了内核函数 sys_kill()。...查看 1 号进程状态 SigCgt Bitmap。 Go 程序里,很多信号都注册了自己的 handler,包括 SIGTERM(15),也就是 bit 15。...0000000000004000 [root@043f4f717cb5 /]# kill 1 # docker ps CONTAINER ID IMAGE COMMAND CREATED 重点总结 “为什么容器不能

15010

什么是线程组,为什么 Java 不推荐使用?

线程,如果发生未捕获异常,可以通过 Thread.UncaughtExceptionHandler 进行处理。 Java ,虽然线程组是一种功能强大的机制,但实际上并不推荐使用。...下面主要从以下几个方面说明: 1、难以扩展 平常的开发,当我们需要对线程进行动态调度时,线程组往往过于笨重,这导致了代码难以扩展。...3、容易引起歧义 Java ,虽然 ThreadGroup 的设计旨在通过将一组线程分到同一个容器来轻松管理和控制它们,但如果使用错误,可能会导致线程状态。...因此, Java 线程组已基本过时,推荐使用 Executor 框架等新的更实用的工具来进行线程管理。... JDK8之后,API也推出了更加强大的CompletionService接口,它能够执行更为复杂的异步任务并得到结果,这极大地扩展了Java线程编程的功能性。

26120

应用开发为什么选择 Flutter 而不是 React Native ?

作为一位开发人员,想在本文中与大家聊聊跨平台开发领域的两大核心选项——Flutter 与 React Native 框架,并介绍自己为什么更偏爱 Flutter。...为什么更倾向于 Flutter 一段时间以来,React Native 一直是全球领先的跨平台开发框架。而且 Flutter 出现之前,React Native 可谓无可匹敌。...开发高性能应用 应用性能方面,Flutter 同样明显领先于 React Native。几乎所有性能测试,Flutter 的性能都比 React Native 更好。...例如,使用 Flutter 时,应用动画的运行速率可以达到每秒 60 帧。 对于混合应用开发,将代码、原生组件以及库集成至新架构时,React Native 会带来更高的复杂性。...React Native 官方文档并不提供任何明确的支持或定义步骤,导致开发者找不到得到广泛认可的发布流程自动化指南。

3.2K20

关于多线程异常的这个面试题再说最后一次!

然后通过上面的文章,源码寻找到了答案。 先给大家看两个案例。 sayHi 方法是会抛出运行时异常的。 当执行方式是 execute 方法时,控制台会打印堆栈异常: ?...具体原因,之前的文章里面详细分析过,就不赘述了,直接看结论: ? 然后一个读者找我聊天,说为什么他这样写,通过 future.get 方法没有抛出异常呢,和我文章里面说的不一样呢?...为什么当 submit 方法提交任务的时候,子线程捕获了异常,future.get 方法就不抛出异常了呢? 其实听到这个问题的时候都把干懵了。 这问法,难道你是想再抛一次异常出来?...对于抛出的这个异常,我们分为两种情况: 子线程捕获了异常,则调用返回的 future 的 get 方法,不会抛出异常。...循环体扔 10 个比较耗时的任务进去。有 3 个任务它处理不了,那么肯定是会触发拒绝策略的。 你觉得这个程序运行后会在控制台打印异常日志吗?会打印几次呢? 看一下运行结果: ?

1.1K10

软件工程师生涯犯下的七个错误

和其他人一样,在这条职业道路上也犯过不少错误。一般来说,不会在犯错的当时就意识到自己做错了什么事情;往往是接触了正确的做事方式之后才知道自己之前的路走岔了。...希望阅读这篇文章后,你会从中得到一些有用的东西,这样以后就不要再像我一样犯错——并付出那么多代价了。 1没有使用合适的 ORM 数据访问层代码总是会一团乱麻、无聊和令人生厌。...本可以通过编写自动化脚本来真正“节约”一些时间,但是浪费修复每个错误和支持其他人上的时间比我可以“节约”的时间要多很多倍。你的软件应该支持一键构建;需要的操作再多一点都是浪费时间。...而且 Visual Studio 是如此强大,以至于人们可以轻松地一步步检查代码并即时检查代码的值。但是,如果你沉迷调试器里面,它就会带来害处。...但是有了单元测试后,你的开发生活就会得到显著的改善。希望能从第一天开始就学习单元测试的艺术,从第一天开始就勤加练习单元测试。可惜学校并不教单元测试。

57710

为什么校招面试线程与进程的区别”老是被问到?该如何回答?

进程与线程?(Process vs. Thread?) 面试官(正襟危坐):给我说说“线程”与“进程”吧。 ? (总是不太聪明的样子):“限乘?”、“进什么城(程)?”...面试官:“操作系统的进程与线程,你回去了解一下。门左边,记得关门。” ?...如果你能看到这,能否给我点个关注,点个赞让也收到鼓励。如果觉得写的内容有误,也欢迎评论指出。 注意,要敲黑板啦。 ? th (2).jpeg 进程是什么?它指的是一个运动的程序。...从名字上看,进程表示的就是进展的程序。一个程序一旦计算机里运行起来,它就成为一个进程。进程与进程之间可以通信、同步、竞争,并在一定情况下可能形成死锁。 那么线程是什么?...我们知道,进程是运转的程序,是为了CPU上实现多道编程而发明的一个概念。但是进程一个时间只能干一件事情。如果想同时干两件事,办法就是线程线程是进程里面的一个执行上下文或者执行序列。

1.1K30

Spring Security 就想从子线程获取用户登录信息,怎么办?

大家知道 Spring Security 想要获取登录用户信息,不能在子线程获取,只能在当前线程获取,其中一个重要的原因就是 SecurityContextHolder 默认将用户信息保存在 ThreadLocal...为什么它就可以支持从子线程获取数据呢?今天松哥就来和大家聊一聊这个话题。...这个问题搞懂了,就理解了为什么 Spring Security ,只要我们稍加配置,就可以线程获取到当前登录用户信息。...同一个线程,一个 ThreadLocal 只能保存一个对象,如果需要保存多个对象,就需要多个 ThreadLocal,同一个线程的多个 ThreadLocal 最终所保存的变量实际上同一个 ThreadLocalMap...修改完成后,再次启动项目,就可以线程获取到登录用户数据了,至于原理,就是前面所讲的。

4.5K30

【Java提高十九】Iterator&fail-fast机制

所以要保证遍历过程不出错误,我们就应该保证遍历过程不会对集合产生结构上的修改(当然remove方法除外),出现了异常错误,我们就应该认真检查程序是否出错而不是catch后不做处理。...因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。 在这两段话反复地提到”快速失败”。那么何为”快速失败”机制呢?...例如:假设存在两个线程线程1、线程2),线程1通过Iterator遍历集合A的元素,某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出...诚然,迭代器的快速失败行为无法得到保证,它不能保证一定会出现该错误,但是快速失败操作会尽最大努力抛出ConcurrentModificationException异常,所以因此,为提高此类操作的正确性而编写一个依赖于此异常的程序是错误的做法...modCount是 AbstractList 定义的,为全局变量: 那么他什么时候因为什么原因而发生改变呢?

795110

Java程序员的经典错误,请注意

今天,总结一些常见的编码错误,然后给出解决方案。希望大家日常编码能够避免这样的问题。 1. 使用Objects.equals比较对象 这种方法相信大家并不陌生,甚至很多人都经常使用。...日期格式错误 我们日常的开发,经常需要对日期进行格式化,但是很多人使用的格式不对,导致出现意想不到的情况。请看下面的例子。...公司就因为这个bug造成了生产事故。 3. ThreadPool 中使用 ThreadLocal 如果创建一个ThreadLocal变量,访问该变量的线程将创建一个线程局部变量。...但是如果没有特殊处理,这个异常就会被线程池吃掉。这样就会导出出现问题你都不知道,这是很严重的后果。因此,最好在线程池中try catch捕获异常。...往期推荐 的学习小圈子 现在做这几件事,一定好起来! 大厂做程序员两年半,终于学会了。。。 为什么抓不到baidu的数据包? 是后端,要学前端嘛? 好好的系统,为什么要分库分表?

30230

Java基础三:Java 核心技术

大家好,又见面了,是你们的朋友全栈君。 目录 3. Java 核心技术 3.1. 反射机制 3.2. 异常 3.3. 多线程 3.4. 文件与 I\O 流 ---- 3....这些错误是不可查的,因为它们应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了错误,本质上也不应该试图去处理它所引起的异常状况。... Java 错误通过 Error 的子类描述。 Exception(异常):是程序本身可以处理的异常。Exception 类有一个重要的子类 RuntimeException。...注意:异常错误的区别:异常能被程序本身处理,错误是无法处理。 3.2.2....对于 NIO 来说,我们的业务线程 IO 操作准备好时,得到通知,接着就由这个线程自行进行 IO 操作,IO 操作本身是同步的。

56120

线程池拒绝策略我们可以学到什么?

2.1 为什么提供多种拒绝策略? 不知道你有没有思考过,为什么会有那么多编程语言?为什么会有那么多算法?为什么会有那么多设计模式?为什么会有那么多存储方式?为什么会有那么多线程池拒绝策略?...(图片来源:美团技术) 启发:没有最好的选择,只有最适合的选择 我们要做的是某个特定场景下选择最适合的技术,而不是最新、最热的技术。 2.2 如果来设计拒绝策略,能想到几个?...显然超出“承载能力” 丢弃任务并抛出异常是一个更适合的选择。不提供服务,没啥好说的,已经超过能力了,没法提供服务。抛出异常为了让上游感知到并做出相应处理。...:从设置了过期时间的key随机淘汰 6.volatile-ttl:设置了过期时间的key,淘汰过期时间剩余最短的 我们会发现两者也有“惊人”的相似性,都是不提供服务,返回错误。...作者为什么这么设计? 这么设计的优点是什么? 这么设计的核心原理是什么(作者是怎么设计的) ? 如果是我会怎么设计? 别人是如何设计的? 能从中学到什么,得到什么对未来技术成长有帮助的启发?

34420

Iterator,fail-fast机制与比较器

所以要保证遍历过程不出错误,我们就应该保证遍历过程不会对集合产生结构上的修改(当然remove方法除外),出现了异常错误,我们就应该认真检查程序是否出错而不是catch后不做处理。...因此,编写依赖于此异常的程序的做法是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。 在这两段话反复地提到”快速失败”。那么何为”快速失败”机制呢?...例如:假设存在两个线程线程1、线程2),线程1通过Iterator遍历集合A的元素,某个时候线程2修改了集合A的结构(是结构上面的修改,而不是简单的修改集合元素的内容),那么这个时候程序就会抛出...诚然,迭代器的快速失败行为无法得到保证,它不能保证一定会出现该错误,但是快速失败操作会尽最大努力抛出ConcurrentModificationException异常,所以因此,为提高此类操作的正确性而编写一个依赖于此异常的程序是错误的做法...modCount是 AbstractList 定义的,为全局变量: protected transient int modCount = 0; 那么他什么时候因为什么原因而发生改变呢?

69920

使用 ExceptionDispatchInfo 捕捉并重新抛出异常

更新于 2017-10-26 23:38 当你跑起了一个异步线程,并用 await 异步等待时,有没有好奇为什么能够线程 catch 到异步线程异常?...它在 .NET Framework 4.5 首次引入,并原生在 .NET Core 和 .NET Standard 得到支持。...---- 先探索为什么需要重新抛出异常,再了解如何最佳地重新抛出异常。如果你只希望了解 ExceptionDispatchInfo,请直接从以下导航中点击跳转到最后一节。...throw ex; } 为了防止这段代码被意外复制出去危及项目,特地注释中标明了永远不应该直接写出 throw ex 这样的句子!...然而,一旦 catch 写出了 throw ex 这样的语句,那么 ex 的调用栈将会被重写,范围从这一句 throw 开始,到外面能 catch 的地方为止。

79910

一文看懂wait和notify的虚假唤醒(spurious wakeups)

但是不能明白为什么就会出错,继续问他,他看我好学的劲头,满意的笑了笑:“看好你的未来!”。 昨天,微信群里有一个网友面试时,被问到了 wait 方法为什么必须写在 while 循环中?...如果你也有这样的疑问,那说明你对 wait 方法原理的实际运行效果不是很了解,或者也存在错误的理解。群里对他们说, wait 方法的前后都加上输出提示语句,后来的打印结果出乎他们意料。...然后错误出现了。 虚假唤醒导致的程序错误 数组越界,为什么会这样? 问题的关键就在于7号消费线程唤醒了 6 号消费线程,而 6 号消费线程被唤醒以后,它从哪里开始执行是关键!!!!...列举的生产者消费者例子,在用通俗的白话解释一下。 单消费者和单生产者的模式,因为只有两个线程,消费者 pop 方法 notify 通知到的一定是生产者线程,使其执行 push 操作。...被唤醒的消费者线程由于已经 if 方法,不需要再判断剩余的元素数量,又紧接着执行了消费一个元素的操作,此时无元素可消费,程序就异常了。

51710

一点一滴探究JVM之内存结构

,知道为什么会报这个错误吗?...另外,需要说明的一点是,程序计数器是Java虚拟机规范唯一一个没有规定任何内存错误的区域! 虚拟机栈(Vm Stack) 这块区域是干啥的?为啥也是线程私有的?...这也就能回答开头我们看到的那个问题了,很简单错误线程情况下肯定是StackOverFlowError,多线程下OutOfMemoryError(上图已经写得很清楚了) 比如 public void...方法返回地址: 当一个方法被执行后,有两种方式退出该方法:执行引擎遇到了任意一个方法返回的字节码指令或遇到了异常,并且该异常没有方法体内得到处理。...一般来说,方法正常退出时,调用者的PC计数器的值就可以作为返回地址,栈帧很可能保存了这个计数器值,而方法异常退出时,返回地址是要通过异常处理器来确定的,栈帧中一般不会保存这部分信息。

1.4K00

如何优雅地中止线程

通过 Java 线程的生老病死的学习,相信大家对线程的运行以及线程的状态有一定了解了,那么我们现在来学习中止线程错误线程中止 - stop 首先来讲解一个错误的方式来中止线程 — stop:中止线程...接下来通过一段程序来讲解为什么 stop 会导致线程安全问题?...正确的线程中止 - interrupt 介绍了错误的中止方式后,让我们来学习正确的线程中止 - interrupt : 如果目标线程调用 Object class 的 wait() 、wait(long...,而是抛出异常通知我们,开发者就可以控制收到异常后的执行逻辑,让整个程序处于线程安全的状态,这是目前 JDK 版本推荐的 interrupt 方法。...除了 interrupt 的正确方法外,还可以通过标志位的形式来中止线程: 正确的线程中止 - 标志位 如果代码程序逻辑是循环执行的业务,可以程序的执行中线程代码增加一个标志位,比如下面代码

72540

Bug是如何产生的?

的回答 早些时候,写过一篇文章:趣图|为什么祖传代码被称为“屎山”? 那篇文章的观点认为,那种一个类成百上千行代码堆在一起,经过一个又一个接盘侠维护后的“屎山代码”,是很容易产生bug的。...在这里,深度总结了以下10种场景,与你分享: 编程错误: 最常见的Bug产生原因之一是编程错误。本质原因还是程序员代码写的不规范或有漏洞,导致逻辑错误和数据错误。...需求变更: 开发过程,项目需求可能会发生变化,但这些变化可能会导致现有的代码出现Bug。未能适应新需求的代码可能会出现问题。...并发和同步问题: 线程或多进程环境,竞争条件和同步问题可能会导致Bug。例如,两个线程同时访问共享数据可能导致数据损坏或不一致。...不一致的环境: 不同的操作系统、浏览器和硬件环境可能对程序的行为产生影响,特别是跨平台开发。 压力测试不足: 当系统高负荷下运行时,可能会出现性能问题或崩溃。

19810
领券