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

为什么没有运营SaaS没有未来?

来源:大虫运营心经  作者 : 花大虫 ---- 职业生涯前几年一直在做C端互联网相关工作,这两年突然转做B端了,感受有很大差异,但是却又有很大相似性,To C运营经验对To B运营有巨大帮助...(NPS(Net Promoter Score),净推荐值,亦可称口碑,是一种计量某个客户将会其他人推荐某个企业或服务可能性指数), 将客户成功作为公司战略支点,各个团队围绕NPS这个指标做目标分解...这就是为什么很多SaaS公司前期可以靠市场红利,靠销售规模去赢得市场,到后期,客户续费率低,销售成本越来越高,导致亏损严重,就是这个原因。 据我了解业内有几家公司都遇到类似这样问题。...而单纯将成本投入在销售上只能带来新增客户增长和短期收入增长,无法带来客户留存和LTV提升,也没有资金杠杆效应,一个公司无法形成组织发展复利和产品复利。...再举一个链家例子: 请问各位链家模式重不重,买卖房产交易流程复不复杂? 贵吧,复杂吧,但链家服务费贵不贵,为什么好多人吐槽链家收费贵还有大把的人愿意在链家买房、卖房?

91110

量化你团队代码质量

本文围绕团队在产品质量攻坚工作中做一些质量检查手段,介绍如何让你团队代码质量可以量化,并保留最珍贵、可维护、可持续、可传承工程化代码。...整合目标 本文除了让大家了解这些工具如何使用以外,还会重点描述如何组织这些代码质量周边工具链使其达到工程化程度,讨论什么该做,什么不该做,为什么这么做。...即便你提供了所谓每天自动化测试报告,貌似可以量化,但真正作用谁有知道呢?虽然覆盖率统计并不能代表代码就是 100% 可靠。...但它可以通过量化数据告诉我们代码哪些分支、哪些逻辑我们还没有覆盖,至少能让你知道,你测试是不是在做一些无意义事情。...MR,并且在你有问题代码中添加评论,效果如下: 图片 图片 Pre-commit 集成 如果你团队启用了 pre-commit-hooks,您可以添加如下脚本,在每次提交时就检查一次变更文件,这样在没有上传代码

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

简化补充关联对象业务代码

这种模式非常常用,所以写了一个工具类,简化了这个步骤 场景描述 问题中有分类信息,但是默认保存在库表中只有分类Id(categoryId),但是接口返回给调用方时候,需要补充完整Category...class Category { private Integer id; private String name; } 默认情况下,从数据库中查询问题列表时,只有categoryId,没有....build(); supplement.supplementWithConverter(questions, categoryManager::getByList); 使用这种方式可以减少很多胶水代码...对象设置器 * @param objMap ID到对象Map * @param requireExists 是否要求必须(如果是,但是没有存在,则会抛出异常...{@link IllegalArgumentException}) * @param defaultObj 如果没有匹配到则使用默认值 * @param

45420

使用Java注解来简化代码

注解(Annotation)就是一种标签,可以插入到源代码中,我们编译器可以对他们进行逻辑判断,或者我们可以自己写一个工具方法来读取我们源代码注解信息,从而实现某种操作。...我们注解就是一种元数据,根据它所起到作用,我们可以大致将它分为以下三类: 编写文档:通过代码中标识元数据生成文档 代码分析:通过代码元数据获取其中信息内容 编译检查:通过标记注解可以完成对代码检查...文件中是不存在这一行注解代码,CLASS范围表示编译器编译之后,注解代码存在于class文件中,但是jvm在加载此class文件时候会自动忽略掉这一行注解代码。...粘贴到此处并没有显示)表示此类不推荐使用,但是我们可以看到在子类Student上是没有删除线,也就是父类废弃了,子类依然是正常。...以上我们定义是一个没有注解体一个注解,像这样注解我们叫做标记注解,这是表示一种标记,编译器根据某个类或方法是否具有此标记来判断是否要添加一些代码或做一定检测操作。

1.5K50

代码组件 | 我代码没有else

嗯,我代码没有else系列,一个设计模式业务真实使用golang系列。 ? 前言 本系列主要分享,如何在我们真实业务场景中使用设计模式。...,执行子组件逻辑 但是,golang里没有的继承概念,要复用成员属性ChildComponents、成员方法Mount、成员方法Remove怎么办呢?...----------------------- //我代码没有`else`系列 //组合模式 //@auhtor TIGERB //-------...我代码没有`else`,只是一个在代码合理设计情况下自然而然无限接近或者达到结果,并不是一个硬性目标,务必较真。 2....---- 我代码没有else系列 更多文章 代码模板 | 我代码没有else 链式调用 | 我代码没有else 点击https://github.com/TIGERB/easy-tips/tree

1.1K10

代码模板 | 我代码没有else

嗯,我代码没有else系列,一个设计模式业务真实使用golang系列。 ? 前言 本系列主要分享,如何在我们真实业务场景中使用设计模式。...比如抽奖系统抽奖接口,为什么: 抽奖步骤是稳定不变 -> 不变算法执行步骤 不同抽奖类型活动在某些逻辑处理方式可能不同 -> 变某些算法 怎么用「模板模式」?...------------ //我代码没有`else`系列 //模板模式 //@auhtor TIGERB //------------------...//------------------------------------------------------------ //我代码没有`else`系列 //模板模式 //@auhtor TIGERB...我代码没有`else`,只是一个在代码合理设计情况下自然而然无限接近或者达到结果,并不是一个硬性目标,务必较真。 2.

1K30

为什么所谓黑客都没有操作界面?都是代码呢?

说到使用命令行操作脚本,这种完全是个人习惯而已,很多老程序员都喜欢在命令行下调试代码,主要是以命令行方式效率比较高,但在梳理代码阶段还是图形界面的比较方便,毕竟直接可以看到脉络结构,命令行操作方式需要建立在对于命令行使用非常熟练...,其实大部分用命令行调试代码主要还是因为代码基本功比较扎实直接可以敲代码,现在很多程序员离开了百度就不会写代码了,这种属于基本功不是很扎实,黑客按照技术范畴来讲属于安全领域,现在很多大学专门开设了计算机安全这门课程...不要把黑客想那么神秘,黑客首先是一个能写代码技术人员,并且对于网络安全有着特殊兴趣爱好,凭着一股兴趣加入进来虽然在玩过程中比较辛苦但感觉比较美,程序员写代码主要是完成工作任务,黑客完成一件事主要还是兴趣引导...,两种在性质上有比较大差异,程序员更像是在企业完成强制任务拿工资,黑客做一些事件完全凭着一股热情没有薪资没有鼓励,无论是攻坚过程还是成功了都没有人知道,全部靠自己内心一种感受去做,所以黑客自我消化能力也不是一般人能比得上...回到正题黑客没有操作界面只是在影视剧中看到,现实真实情况只有黑客本人能够知道,而且还能本人操作习惯有着直接关系,你能说不在命令行下操作程序程序员就不是优秀程序员嘛,显然不是成正比关系,本身就是萝卜青菜各有所爱状态

2K40

pythonnumpy向量化语句为什么会比for快?

不过,python比起其它解释性语言还是强很多。因为它可以事先把文本代码编译成“字节码”(存储于扩展名为pyc文件里),从而直接处理整型“指令代码”,不再需要从头开始分析文本。...但是,从“字节码”翻译到实际CPU代码这步,仍然是省不下。 这个消耗,可看作“利用虚拟机”执行异构CPU上程序。有人证明过,哪怕优化到极致,这也需要10倍性能消耗。 这个消耗也有办法缩减。...JIT说白了,就是在第一遍执行一段代码前,先执行编译动作,然后执行编译后代码。 如果代码没有循环,那么这将白白付出很多额外时间代价;但若有一定规模以上循环,就可能节省一点时间。...它甚至能根据上次运行结果实时profile,然后花大力气优化关键代码,从而得到比C更快执行速度。 不过,理想很丰满,现实很骨感。...(笑~ 当然,如果不做这类较为复杂处理,仅仅是一些流程性东西的话,这类语言处理速度还是够用——至少与之交互的人感受不到丝毫延迟。 甚至,哪怕需要复杂处理,这类语言也可以其它语言求救啊。

88320

为什么HibernateDaoSupport没有注入SessionFactory

前言 很早之前,就打算写这一篇文章了(其实有很多源码分析文章打算写,但是自己太拖延了导致很多文章搁浅了)。我为什么要写这一文章呢?...事情缘由是同事在SpringBoot项目中有一个A类继承HibernateDaoSupport,但是程序运行总是抛出没有成功注入SessionFactory错误,后来我debug Spring源码解决了这个问题...这个错误原因是A类RootBeanDefinition中autowireMode值为0,在AbstractAutowireCapableBeanFactory类中populateBean方法中没有执行到...autowireByName(beanName, mbd, bw, newPvs),导致SessionFactory属性没有注入成功。...beanFactory)方法中不要使用beanFactory.getBean()会造成类性早熟,最终后果就是类中一些属性没有成功注入。

3K10

让你代码MISRA靠近

,各大软件评估工具,有的软件开发工具IDE也集成有MISRA,为了使软件更安全,MISRA组织花了大量时间和精力,MISRA标准出版和推广是软件更加安全和标准,尤其在汽车电子方面,MISRA规则似乎应用很广...我们先来看看官方组织对MISRA解释 ? MISRA规则有很多条,当然不是说你在设计时候全部规则都要遵守,MISRA允许可以背离有的原则,根据你实际情况。...所有的规则分为建议规则和强制规则,通常强制规则建议都遵守,那么有的人说了,这么多规则,我怎么记得住,没关系,不用死记硬背,在使用使用中慢慢熟悉,也可以在设计时候就打开MISRA检查,例如如果我们用IAR在设计代码时候...如果对MISRA完全没有一点概念,建议先浏览下MISRA规则,选一两条来使能检查你代码,如果一下全开的话,你代码可能会检查出很多错误,你都傻了,例如可以先从简单注释规则开始,例如MISRA规则...将注释改为/* */在编译,就会消除这个错误, 好了快快行动起来,从这个简单点开始,使你代码越来越靠近MISRA。

68220

为什么我们没有自己编程语言

我们互联网公司生态不好,公司不怎么鼓励员工创新,当然这个现状也有一些改变了,比开始时候好多了,只是要真正从语言开始确实还有很长很长路要走。...好不容易找个志同道合可能开发个半年,发现食不果腹,还要奶孩子,真心没有办法玩呀,项目也就烂尾了。 一些项目放到网上,流言蜚语也一大堆,鼓励少,BB 多,生态不好。...在这个时候谁有心思去研究那些东西,哪怕是别人把源代码都公开了,我们都还没有读透。 别说语言了,哪怕是 Spring 这个框架,有多少公司和人能真正深入研究过。...Spring 最早来源就是大家对 EJB 极度不满,臃肿部署和开发,为什么我们没有想到再换个思维呢?...与其他所有东西都一样,我们奉行拿来主义,没有创新土壤,没有狂躁和狂野内心,我们公司需要是听话 Worker,我们公司不需要真正 Builder。

1.2K50

PHP技巧和窍门来简化代码

PHP技巧和窍门来简化代码 技巧1 : (if and else) 技巧2 : (if blocks: less vs more) 技巧3 : (验证多个字符串) 技巧4: (??)...技巧5 :(递归优先于重复) 技巧6 : (PHP + HTML) 技巧7: (编写功能块) 技巧8: (使用类型) 技巧9 : (框架/库是没有坏处) 提示10 : (不要只是为了写代码!)...,为什么不直接返回$ item是candy还是toy,因为那也只是一行,就像这样: return ($item == 'candy' || $item == 'toy'); 这将给我们相同结果,但是假设我们正在检查...这是创建没有两个部分内联条件最简单方法。我什么意思 让我们看一个示例,该示例将为我做所有解释。...这里危险之处在于,传递字符串不会破坏应用程序,它仍然可以完美运行。为什么? 如果将“ chair”传递到函数中,它将被评估为allItems()["c"],最终将导致错误,使您在12am起床。

3.1K40

typescript装饰器:简化代码、增加功能利器

# 装饰器语法 装饰器是 TypeScript(简称 TS)中一个特性,它可以在不修改 原始代码情况下,通过添加额外功能来改进代码。装饰器通常以@符号紧跟着一个函数或者类来表示。...} } # 解决痛点和实战案例 装饰器在 TS 中作用非常重要,它可以帮助我们简化代码、增加功能,提高代码重用性和可维护性。...hasPermission(permission)) { throw new Error(`没有权限进行操作:${permission}`); } return...} } 装饰器是 TS 中非常有用特性,它可以帮助开发者在不修改原始代码情况下,为代码添加功能和行为。...通过使用装饰器,我们可以简化代码、增加功能,解决一些常见痛点,如性能监测、权限控制等。希望这些例子能帮助你理解装饰器作用和使用场景。

30410

公开代码,我量化程序开发历程!

今天给大家分享一位好朋友六年量化程序开发历程,最后他策略实现了很高收益,身边有很多朋友也都是主业码农,副业量化,这种搭配是现在非常流行量化代码给大家放在了文章末尾,看完后希望对你有所启发与帮助...接下来一段时间主要是以优化代码为主,各种代码重构,外围功能增加和完善,比如和同花顺交互,交易信号告警优化等。...总结:这个过程其实蛮无聊,整个量化策略没有任何实质性进展,个人对此也没有任何信心,也没想过这个东西最后真能帮我赚钱,只是凭借着对写程序兴趣,无聊时用于打发时间而已。...这也从另外一个角度证明我最初决定自己从头写量化程序是一个相当正确选择,不然现在市场上那些回测框架那种性能,根本就没法用,但是到那个时候可能我已经没有勇气从头来过了。...六、持续改进 从2023年开始,我觉得自己量化程序应该都做差不多了,接下来可能没有太多开发和策略调整事情了。

43540

如何编写没有bug代码

有一个受众面很广 twitter 讨论就是由 Ruby on Rails 创建者所启动。 ? 那么,为什么一开始会认为这种行径是不好呢?...因为它有若干缺点: 会导致你复制到糟糕设计决策或易受其他人攻击代码 会形成一种依赖心态:要是我们不能google到内容,那么只能向人求助了 没有网就不能工作 但是,我不认为这些是大问题。...关于“学习如何编写没有bug代码魔法书是不存在。因为所有软件都有bug——除了这个框架之外。遇到bug我们就应该处理掉。 关键要点是:每个人编写代码都不应该带有明显错误。...05 应用程序部署后,我仍然不自信 终于,我应用程序已经进入了产品阶段。它可以工作了。我可以休息休息,应该不会出什么问题了。等等,不!一切都崩溃了。是的,我没有说错:一切。...如果我们想编写出好软件,那么我们需要不断地学习怎么做。没有捷径也没有魔法。每天进步一点点,就会越来越好。 总之,我们需要理解两件基本事情: 每个人都会遇到问题。

86110

为什么处理排序后数组比没有排序快?想过没有

就比如说这个:“为什么处理排序后数组比没有排序快?”...但本着“知其然知其所以然”态度,我们确实需要去搞清楚到底是为什么?...未排序时候,等待结果时候让我有一种担心:什么时候结束啊?不会结束不了吧? 读者朋友们有没有玩过火炬之光啊?...那这个代码分支就好像火炬之光中地图分支,如果处理器能够像我一样提前预判,那累加操作就会快很多,对吧?...完全没有办法预测。 对比过后,就能发现,排序后数据在遇到分支预测时候,能够轻松地过滤掉 50% 数据,对吧?是有规律可循。 那假如说不想排序,又想节省时间,有没有办法呢?

85810

为什么switch里case没有break不行

小姐姐接着问我为什么,我说少个break,但凡再问一句:为什么少个break结果就不一样,我就回答不出来了。所以,为了将尴尬扼杀于摇篮,还是研究一下break在switch作用。...,结果如下: *明明只匹配了case 0,为什么1和2也执行了?...从字节码可以看出:switch中case条件和对应代码块是分开。...其实这就涉及到了编译器优化技术,最后一个goto也是跳转到标号55指令,但没有goto下一步也一样顺序执行此行指令,所以这个goto被编译器视为无用代码进行了消除。...结语 case中break告诉前端编译器:「给每个case对应代码最后加上goto」。这样,执行完匹配上代码之后,就可以略过后面的case代码块了。

67620
领券