随笔杂记


  • golang 计算字符串长度


    golang 计算字符串长度



  • java在windows下使用opencv实现大图找小图


    java在windows下使用opencv实现大图找小图



  • 查看ubuntu服务器的配置


    查看ubuntu服务器的配置(cpu+显卡+内存+硬盘)



  • 开源协议说明


    开源协议说明

    Apache 2.0 许可证、Megatron-LM 许可证、MIT 许可证和 CreativeML Open RAIL-M 许可证



  • pycharm debug模式开启失败


    pycharm debug模式开启失败

    使用pycharm开启debug模式时,启动报错

    Connection to Python debugger failed Timeout waiting for response on 501
    


  • windows11开启Copilot(预览版)


    windows11开启Copilot(预览版)



  • baichuan2模型微调


    baichuan2模型微调



  • minio上传SignatureDoesNotMatch错误


    minio上传SignatureDoesNotMatch错误



  • git pull fatal: Out of memory, malloc failed (tried to allocate 524288880 bytes)


    git pull fatal: Out of memory, malloc failed (tried to allocate 524288880 bytes)



  • goland控制台无法满行显示内容解决办法


    goland控制台无法满行显示内容解决办法



  • es数据迁移


    es数据迁移



  • java应用打包exe执行文件


    windows一键部署项目

    将使用的服务打包成一个exe应用程序,点击安装后运行、省去环境搭建和部署的时间。



  • 获取微软Office 365应用APPID、secret、access_token、refresh_token


    获取微软Office 365应用APPID、secret、access_token、refresh_token



  • Red Hat下chia安装和启动


    更新库,安装python



  • gomobile的使用


    gomobile的使用



  • Error: export ordinal too large after upgrading to Go 1.15


    Error: export ordinal too large after upgrading to Go 1.15



  • navicat oracle字符集问题


    navicat oracle字符集问题



  • oracle字符集修改


    oracle字符集修改



  • oracle在docker下的安装配置


    oracle在docker下的安装配置



  • protobuf学习使用


    protobuf学习使用



  • Error:Could not run Bazel info


    Error:Could not run Bazel info



  • docker重新进入容器时“/etc/profile”中环境变零失效问题


    在docker容器中的/etc/profile配置了环境变量,容器未重新启动是可以正常使用的,但是一旦重启就失效了,解决办法是在/root/.bashrc文件最下面添加如下指令:



  • docker开启api


    Docker常见端口



  • docker私服搭建-nexus3


    Nexus 3



  • 使用thrift


    使用thrift



  • tls学习整理




  • go 笔记


    目前尚需详细查看内容:



  • im部署文档


    一、部署聊天服务器文件上传服务配置 (一般由运维部署,也可以自己部署,后期统一) 1、安装tomcat

    1、systemctl status tomcat(查看是否有安装的tomcat或使用 ps -ef|grep tomcat。有tomcat直接跳过该部)
    2、yum info tomcat
    3、yum -y install tomcat(默认安装到/usr/share/tomcat/)
    

    1、vi /usr/share/tomcat/conf/server.xml 修改server.xml 端口改为8088 2、进入 /usr/share/tomcat/webapps/ 目录下 上传assist.war 3、systemctl start tomcat 启动tomcat解压包 4、 vi /usr/share/tomcat/webapps/assist/WEB-INF/classes/jdbc.properties 修改当前数据库账 号密码



  • mysqldump备份与还原


    #一. 备份类型

    逻辑备份:把数据导出到一个文档中(.sql/.txt) 适合场景:中小型数据库

    物理备份:保存/usr/local/mysql/data数据库文件目录 适合场景:大型数据库

    在线热备(冗余):需要有多台机器,主备模式,集群模式



  • ngrinder


    1、下载 在https://github.com/naver/ngrinder/releases选择合适版本下载



  • nginx 301跳转https后post请求失效问题解决


    app本地请求是http端口,后来升级https强制301跳转,设置如下

    server {
        listen 80;
        server name www.XXX.com;
        rewrite ^/(.*)$   https://www.XXX.com/$1 permanent;
    }
    


  • git开发流程


    Master 分支

    1. Master 分支应该始终和生产环境保持一致。
    2. 由于 master 和生产代码是一致的,所以没有人包括技术负责人能在 master 上直接开发。
    3. 真正的开发代码应当写在其他分支上。


  • kafka-入门


    概念:

    1. kafka作为一个集群运行在一个或多个服务器上。
    2. kafka集群存储的消息是以topic为类别记录的。
    3. 每个消息(也叫记录record,我习惯叫消息)是由一个key,一个value和时间戳构成。


  • 访问者模式


    在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。通过这种方式,元素的执行算法可以随着访问者改变而改变。这种类型的设计模式属于行为型模式。根据模式,元素对象已接受访问者对象,这样访问者对象就可以处理元素对象上的操作。



  • 模板模式


    在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。



  • 策略模式


    在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。



  • 状态模式


    状态模式



  • 观察者模式


    当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。



  • 单例模式


    单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。



  • 工厂模式


    工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。



  • 备忘录模式


    备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。



  • 中介者模式


    中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。



  • 迭代器模式


    用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。



  • 设计模式的六大原则


    设计模式三个分类 此处输入图片的描述



  • 解释器模式


    解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在 SQL 解析、符号处理引擎等。



  • 命令模式


    命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。



  • 责任链模式


    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。



  • 代理模式


    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。



  • JDK和CGLIB动态代理区别


    1. JDK动态代理


  • 享元模式


    享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。



  • 外观模式


    外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。



  • 装饰模式


    装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。



  • 组合模式


    组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。



  • 桥接模式


    桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。



  • 适配器模式


    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。



  • 原型模式


    原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。



  • 建造者模式


    建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 一个 Builder 类会一步一步构造最终的对象。该 Builder类是独立于其他对象的。



  • 红黑树


    二叉查找树(BST)具备什么特性呢?



  • Blowfish 加密算法


    Blowfish加密算法的特点:



  • 内置锁与显示锁


    Java中具有通过Synchronized实现的内置锁,和ReentrantLock实现的显示锁



  • ReentrantLock


    使用 synchronized 来做同步处理时,锁的获取和释放都是隐式的,实现的原理是通过编译后加上不同的机器指令来实现。



  • Random String来打印出”Hello World”


    ``` public static String randomString(int i) { Random ran = new Random(i); StringBuilder sb = new StringBuilder(); while (true) { int k = ran.nextInt(27); if (k == 0) break;



  • 泛型


    泛型基础



  • 三目运算符----类型自动提升


    public static void main(String[] args) {
    	int i=99;
    	System.out.println("99999判断结果:"+(true?'a':99999));
    	System.out.println("-1判断结果   :"+(true?'a':-1));
    	System.out.println("0判断结果    :"+(true?'a':0));
    	System.out.println("65535判断结果:"+(true?'a':65535));
    	System.out.println("65536判断结果:"+(true?'a':65536));
    	System.out.println("i判断结果    :"+(true?'a':i));
    }
    

    运算结果如下:



  • 线程池


    • 线程池原理



  • synchronized


    众所周知 synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式:



  • Java 枚举查找并不抛异常的实现


    • 问题


  • jvm堆内存


    此处输入图片的描述



  • ConcurrentHashMap


    1. Base 1.7

      ConcurrentHashMap 采用了分段锁技术,其中 Segment 继承于 ReentrantLock。不会像 HashTable 那样不管是 put 还是 get 操作都需要做同步处理,理论上 ConcurrentHashMap 支持 CurrencyLevel (Segment 数组数量)的线程并发。每当一个线程占用锁访问一个 Segment 时,不会影响到其他的 Segment。



  • Java类加载机制


    ##Java类加载机制的七个阶段