• 2024-10-24处理异常的13条军规
    前言在我们日常工作中,经常会遇到一些异常,比如:NullPointerException、NumberFormatException、ClassCastException等等。那么问题来了,我们该如何处理异常,让代码变得更优雅呢?1不要忽略异常不知道你有没有遇到过下面这段代码:反例:Longid=null;try{id=Long.parseLon
  • 2024-10-07再谈如何优雅修改代码
    书接上回( https://www.cnblogs.com/OceanEyes/p/18450799)再做下扩展上文谈到:“基于抽象接口编程确实是最佳实践:把易于变动的功能点通过定义抽象接口的形式暴露出来,不同的实现做到隔离和扩展,这体现了开闭原则”publicclassFoo{  privateBarbar;  @Inject 
  • 2024-07-24为什么C++模板只能在头文件中实现
    为什么C++模板只能在头文件中实现答案:模板的实现并非必须在头文件中。bug再现:当我尝试将模板的定义和实现分别保存在头文件(Foo.h)和实现文件(Foo.cpp)中时,程序在链接时报错:错误 LNK2019 无法解析的外部符号"public:void__cdeclFoo<int>::doSomething(int)"(?doSome
  • 2024-06-16C++智能指针
    std::unique_ptr:独特所有权模型,一个std::unique_ptr在同一时间内只允许有一个对象实例。它不允许被复制,但可以被移动。std::shared_ptr:共享所有权模型,多个std::shared_ptr可以指向同一对象,通过引用计数机制来管理对象的生命周期。当最后一个指向对象的std::shared_ptr被销毁时,对
  • 2024-06-13React函数式组件环境中父组件调用子组件的方法
    importReact,{useRef,useCallback}from'react';//子组件constChildComponent=React.forwardRef((props,ref)=>{constdoSomething=useCallback(()=>{console.log('Dosomethinginthechildcomponent');},[]);
  • 2024-06-05static vs Singleton,静态类vs单例模式之争
    https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton-pattern?answertab=modifieddesc#tab-top单例模式可以用接口,Singletoncanimplementinterface可以通过单例类来实现接口,但不能通过类的静态方法或者在某些语言(如C#)中的静态类来
  • 2024-05-25用层级理解冲突
    概述当上层软件提供了名称相同,但功能不同的api时,下层使用该api的软件就会不知道如何选择,或随机选择。进而可能造成软件故障,崩溃。所以起冲突的是上层软件,造成影响的却是下层软件。示例背景假设有一个小型的软件生态系统,包含两个上层库——LibraryA和LibraryB,以及一个下层的应
  • 2024-04-15java中接口多个实现类,如何指定实现类,根据子类类型选择实现方法
    问题背景在Java代码中,经常会遇到一个接口有多个实现的情况。而这些实现类的参数又是不同的子类,这时候我们该如何选择正确的实现方法呢?解决方案我们可以通过判断参数的子类类型来选择正确的实现方法。具体实现可以使用Java中的instanceof关键字,它可以判断一个对象是否是某个类的
  • 2024-04-15多线程整理
    一、简介    1.1、进程        当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。一个进程是由多个线程组成。    1.2、线程        线程是程序中的一个执行流,每个线程都有自己的专有寄
  • 2024-04-10C#:用Lambda表达式来实现接口中的方法
    在C#中,你可以使用Lambda表达式来实现接口中的方法。Lambda表达式是一种简洁的代码构造,它可以在需要委托类型的地方定义匿名函数。假设你有一个接口IMyInterface,它有一个方法voidDoSomething(),你可以这样使用Lambda表达式来实现这个接口:interfaceIMyInterface{voidDo
  • 2024-04-07JS模块化——AMD、CommonJS和ESModules
    文章目录JS模块化——AMD、CommonJS和ESModules方法介绍传统方法:立即执行函数:异步模块定义AMD:CommonJS:ESModules:CommonJS和ESModules区别JS模块化——AMD、CommonJS和ESModules前端模块化是指将前端代码拆解成互相独立的小块,每一块完成特定的功能,这些小块被
  • 2024-03-02shared_ptr, unique_ptr,weak_ptr
    #include<iostream>#include<memory>classMyClass{public:MyClass(){std::cout<<"MyClassconstructed"<<std::endl;}~MyClass(){std::cout<<"MyClassdestructed"<<std::endl;}v
  • 2024-02-27do{}while(0)用法
    更安全的展开宏定义#defineDOSOMETHINGfoo1();foo2();if(condition) DOSOMETHING/*if(condition) foo1();foo2;*/以上代码会导致foo2();始终运行。改为do{}while(0)就可以。do{}while(0)会在任何场景下表现一致。#defineDOSOMETHING\ do{\ foo1()
  • 2024-01-21js 函数作用域和块作用域
    但是,究竟是什么生成了一个新的气泡?只有函数会生成新的气泡吗?JavaScript中的其他结构能生成作用域气泡吗?函数中的作用域对于前面提出的问题,最常见的答案是JavaScript具有基于函数的作用域,意味着每声明一个函数都会为其自身创建一个气泡,而其他结构都不会创建作用域气泡。但
  • 2023-12-29函数式接口@FunctionInterface
    有以下特点:1.该注解只能标记在“有且仅有一个抽象方法”的接口上。2.JDK8接口中的静态方法和默认方法,都不算事抽象方法。3.接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,那么也不算抽象方法。4.该注解不是必须的,如果一个接口符合“函数式接口”定义,那么加不
  • 2023-12-02DI依赖注入
    usingAutofac;publicinterfaceIService{voidDoSomething();}publicclassService:IService{publicvoidDoSomething(){Console.WriteLine("Doingsomething...");}}//注册服务varbuilder=newContainerBuilder();
  • 2023-11-29JavaScript编码风格指南
    sidebar:autosidebarDepth:4JavaScript编码风格指南内容出处:NicholasC.Zakas《编写可维护的JavaScript》GoogleJavaScriptStyleGuidecrockfordJSLintESLint好狗电影导航源文件基础命名文件名必须全部小写,并且可以包含下划线(_)或短划线(-),但不包含
  • 2023-10-30设计模式-装饰器模式
    目录设计模式-装饰器模式什么是装饰器设计模式?java示例设计模式-装饰器模式什么是装饰器设计模式?装饰器设计模式(DecoratorPattern)是一种结构型设计模式,它允许你通过将对象包装在一个装饰器类中来动态地扩展其功能。装饰器模式能够在不改变原有对象的情况下,通过添加新的装饰器类
  • 2023-10-16在Java中,如何避免检查空值?
    内容来自DOChttps://q.houxu6.top/?s=在Java中,如何避免检查空值?我使用x!=null来避免空指针异常。有没有其他的替代方法?if(x!=null){//...}在我看来,这是一个相对常见的问题,初级到中级的开发人员在某个时候都会遇到:他们要么不知道,要么不信任他们参与的合同,
  • 2023-08-28Javascript中this的用法小结
    1.概述this是面向对象语言中的一个重要概念,在JAVA,C#等大型语言中,this固定指向运行时的当前对象。但是在javascript中,由于javascript的动态性(解释执行,当然也有简单的预编译过程),this的指向在运行时才确定。这个特性在给我们带来迷惑的同时也带来了编程上的
  • 2023-07-20java中2个冒号啥意思
    Java中双冒号的含义及用法解析作为一名经验丰富的开发者,我将向你介绍Java中双冒号(::)的含义以及用法。双冒号是Java8中引入的一种新的语法,在函数式编程中起到了重要的作用。1.双冒号的流程使用双冒号的过程可以通过以下表格来展示:步骤动作代码示例1定义函数接口
  • 2023-05-30转:多线程详解
    转自:https://juejin.cn/post/71230166680951849331.什么是多线程1.1进程当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。而一个进程又是由多个线程所组成的。1.2线程线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈
  • 2023-05-20C#异步编程之async/await
    https://blog.csdn.net/wulex/article/details/127380403  异步、多线程的区别 异步:属于通信的范畴,在发出消息当下不等待对方回应,便开始继续自己的任务。所以c#的很多_异步_操作都在io、socket这些类库下面,都是通信性质的类库, io可以理解向系统内核发送文件
  • 2023-04-17使用JavaScript的原型
    在javascript中,函数可以有属性。每个函数都有一个特殊的属性叫作原型(prototype)。functiondoSomething(){}console.log(doSomething.prototype);运行这段代码之后,控制台上面应该出现了像这样的一个对象。{constructor:ƒdoSomething(),__proto__:{const
  • 2023-04-17TStringList分割字符串
    beginTmpStrList:=TStringList.Create;tryTmpStrList.Delimiter:='-';TmpStrList.StrictDelimiter:=True;TmpStrList.NameValueSeparator:=#0;TmpStrList.Duplicates:=dupAccept;TmpStrList.QuoteChar:=#0;DoSomething;finallyTmpStrList.Fr