自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 如何使用一个随机数生成器构造另一个随机数生成器

有一次在知乎突然看到一个很有趣的问题,如果使用一个rand(8)构造一个rand(7),如何用一个1-8随机数生成器制作一个1-7随机数生成器?754 关注 · 69 回答问题还有leetcode的这个问题力扣​leetcode-cn.com/problems/implement-rand10-using-rand7/总体就是讨论如何使用一个随机数生成器构造另一个随机数生成器,并且希望效率比较高,我这里只是提炼一下各位大佬的想法。具体想看各种数学细节的可以看知乎的那个回答。在此之前,我们先来思考一个比较简单

2021-12-21 17:51:50 365

原创 如何查看一个进程打开的文件

今天突然看到一个问题,如何查看一个进程打开的文件?我脑子里的第一个想法就是,肯定和pcb有关,于是就是看了操作系统课本。看到了这样一段话。此外还需要为进程设置数据结构,用来描述进程的状态信息、本身的属性、对资源的占用及调度信息等,称为进程控制块,简称PCB(Process Control Block)对资源的占用,这不正是看打开文件的地方吗?后来发现主要有两种方法使用lsof命令进入/proc目录中查看首先我们来明确一下在linux系统中,那些东西可以被当作文件打开。1.普通的文件,

2021-12-10 12:43:38 2871

原创 实现一个java版本的redis(1)——实现一个内存型KV存储

前排说一下,这是一个十分简陋的KV内存数据库,作为笔者实现redis的第一章,大佬可以走了,因为真的很简陋。仅供学习。心血来潮,看到了开源项目godis,但自己对go又没有很熟悉,一开始去看了godis,一头雾水,索性想到为什么不用java来实现一个redis呢?说干就干​ 第一步,我们来实现一个简单的运行在单机的内存型的KV数据库,严格来说这不是redis,和redis差了十万八千里。就是将一个字典,通过网络的方式提供了出去。但毕竟第一步,我们就来实现一个简单一点的(十分的简陋)。​ 我们主要来实

2021-12-08 17:52:42 680

原创 使用java实现redis客户端(简单的jedis)

redis服务器默认使用端口6379与外界进行通信,我们其实可以自己实现一个简单的redis客户端。这里用java来实现一下。实现一个redis客户端主要实现两个部分就可以socket通信redis通信协议(resp协议)的编码与解码主要是第二部分resp的实现。这里先简单介绍一下resp。RESP 协议简介Redis 的客户端和服务端之间在 TCP 协议的上层采用一种独立名为 RESP(REdis Serialization Protocol) 协议作为进行通讯的标准方式。**Redis

2021-12-06 23:58:30 1223

原创 java socket read 堵塞问题的解决方法

最近在学socket的网络编程,但遇到了一点问题,就是每次循环从缓冲区读数据时,如果缓冲区没有数据,这时候read方法会堵塞,此时也没有办法输入了。后来发现了主要有两种解决方法:在消息开头标记消息长度新启动一个线程进行读操作,阻塞就阻塞吧,反正读写没在一个线程(也算某种意义的读写分离)这是最初会阻塞的代码后来就用了读写分离class read implements Runnable{ BufferedReader bufferedReader; read(Buffere

2021-12-06 23:26:45 1657 1

原创 java Socket实现一对一,一对多通信(BIO)

java socket通信可以实现一对一和一对多通信,两种写法的不同仅仅在于服务端socket写法的不同,简单来说,在一对多情况下,服务端需要启动多线程。下面来看一下代码(tcp实现),顺便提一嘴,这种写法其实是BIO的。首先看一下客户端public class client { public static void main(String[] args) { try{ Socket socket = new Socket("localhost",88

2021-12-05 22:15:45 1354

原创 说一说单例模式

单例模式就是某个类最多只能创建一个对象,有很多种实现方式,下面就介绍一下这几种实现方式以及各自的优缺点。饿汉式饿汉式顾名思义就是在最开始就创建好该对象,即使对象没有被使用public class Singleton{ //构造函数私有,防止外部初始化对象 private Singleton(){} //类加载时就进行初始化 private static final Singleton singleton = new Singleton(); publi

2021-11-30 15:59:34 217

原创 sql count 有条件计数时为什么要or null

在sql中一个常用的计数函数是count,最常用的方法是select count(*) from table但其实count中也可以加条件,比如我们有一张学生表,我们需要统计男同学的个数,如果使用带条件的count来实现的话,我的第一反应应该是这样写select count(sex = 'male') from Student但运行一下会发现这种结果是错误的,不会统计男生的个数,而会输出男生+女生,即全班的总人数。这是为什么呢?我们来分析一下:count方法不论其中的值是true还是fals

2021-11-26 15:36:40 1056

原创 从0到1实现RPC(1)——什么是RPC

首先来回答几个问题,什么是RPC?为什么需要RPC?RPC和本地调用有什么区别?RPC全名叫做Remote Procedure Call(远程过程调用),故名思义,就是如果在一台电脑上调用另一台电脑上的某个方法或者函数。本文将主要围绕以下三个问题来讲:1. 什么是RPC?2. 为什么需要RPC?3. RPC和本地调用有什么区别?首先来思考一个问题,当我们想调用一个函数或者方法时,我们会怎么做?有同学就说了,这很简单啊,直接调用方法名然后传参数拿返回值不就完事了吗?对,就是这么调用,就像下图这样,

2021-11-20 10:50:10 395

原创 java进行防御性编程的一些技巧

防御性编程是指在大型工程中,为了开发可靠的软件,需要对很多潜在的为止的情况进行考虑,使得调用方在错误的调用你所编写的软件模块时,也要能够进行及时的扑获和处理,防止影响面扩大。通俗来说,就是软件模块要具有良好的鲁棒性。1.在大型项目开发中,推荐使用包装类,尽可能减少基本数据类型的使用。2.枚举类可以使用静态字符串常量进行替代3.及时的对方法的入参数进行校验4.善用断言,当方法中需要使用不是该方法入参的数据时,可以使用断言进行校验5.善用工具类,如果方法返回值为集合类,那么永远不要返回null值

2021-07-01 01:36:16 424

原创 java 泛型类型擦除的一个问题

java中的泛型采用了类型擦除的方法,但这种方法会存在一些问题。下面举一个在方法重载时的问题,由于才有了类型擦除,导致两个源码看起来可以重载的方法无法重载(编译无法通过)由于采用了类型擦除,使得两个方法内参数类型判断为相同。...

2021-03-08 23:23:10 75

原创 浅谈Java中String

依然是源码阅读系列首先来看String的源码首先String类使用final修饰(一个知识点,final可以修饰类),所以String是不可变对象。同时看到String类中主要有四个成员变量,byte数组value存储字符串。byte类型的coder表明编码类型,如utf-8等。以及hash值。hash值是否为空。这里不同的JDK版本实现有差异,在jdk1.8中使用char[] 类型value存储字符串。而笔者的jdk15中使用byte[]进行存储。一个类一旦用final,就无法被继承,其中的

2021-03-02 11:06:26 115

原创 Hashmap节点中Node数据结构浅谈

首先来看源码。node以一个静态内部类的方式存在于Hashmap中,可以发现node节点中共有四个属性。hash值keyvaluenext指针static class Node<K,V> implements Map.Entry<K,V> { final int hash; final K key; V value; Node<K,V> next; Node(int hash,

2021-02-28 16:58:49 2188

原创 java中String equals方法的实现

java的String提供了equals方法来比较两个String的值是否相等。对于String类型,如果使用==比较,则是对引用类型的比较。首先我们来看String类中equals方法的实现。首先比较是否和自身引用相同,相同就返回true,否则就会进入StringLatin1.equals方法,继续看StringLatin1.equals的方法可以看到十分的简单粗暴,先比较两个String长度是否相等,如果相等那就一个个字符比较。可以看到jdk源码对于String equals的实现也是比较简

2021-02-14 00:16:52 703

原创 Cannot download ‘https://start.spring.io‘: connect timed out

有时候使用idea创建spring项目时,spring的官网总是上不去,这时候可以用阿里的网站,简直快到飞起https://start.aliyun.com/

2021-02-03 19:51:03 371

原创 org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: java.sql.SQ

有一次使用mybatis连接数据库时,出现了以下错误后来发现是时区问题,要么在连接数据库时设置,要么在数据库中设置。在mysql中执行以下代码即可set global time_zone = '+8:00';  ##修改mysql全局时区为北京时间,即我们所在的东8区set time_zone = '+8:00';  ##修改当前会话时区flush privileges;   ##立即生效...

2021-02-01 20:20:45 1040 1

原创 maven项目存在xml或properties配置文件运行找不到问题

最近在使用idea写java时,有时候出现了项目中明明存在xml配置文件,但编译运行后依然显示找不到。可以看到,源代码中明明存在userMapper.xml文件,但编译运行后显示找不到,并且在生成的class文件中也无法找到。后来发现是maven项目在编译时,默认只会保留resours中的配置文件,所以需要进行一些配置,将以下配置加入maven即可<build> <resources> <resource>

2021-02-01 01:06:22 822 1

原创 Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource could

今天用idea跑spring-boot项目时,突然报错了查找了半天,终于找到了问题所在,检查我的pom.xml文件后发现,我导入了JDBC,但在编码中却没有指定相应的数据库,导致报错。此类错误大多数是因为在pom.xml中导入了模块,但却没有指定导致的。所以在pom.xml中注释掉并更新maven即可。所以注释掉相应的模块后更新maven就可以了。...

2021-01-29 15:40:24 75

原创 IDEA报错:java: 错误: 不支持发行版本 5

今天在用IDEA写java时,在运行的时候显示:错误: 不支持发行版本 5对此上网看了一下,大致整理了一下,对于非maven项目,请移步:Intellij idea 报错:Error : java 不支持发行版本5改了之后依然会报错,后来发现对于maven项目只需要在xml中添加以下片段即可:(15为我用的Java版本,改成自己当前使用的版本即可)<properties> <maven.compiler.source>15</maven.compil

2020-12-08 22:05:35 137

原创 将SVG转化为jpg png等

最近做一些项目需要用到SVG(矢量图)格式的图片,那么如何读入就成了个问题,由于本人使用python,所以没有找到很好的办法,网上的办法大部分也都没法用(及其难用),最后就用了很捞的的办法来转化,不过很好用。先用浏览器打开SVG文件,然后另存为.jpg即可...

2020-10-06 10:51:33 1973

原创 git clone 下载慢的解决办法(借助国内gitee)

在国内使用git clone命令时,网速十分的慢,经常断连,导致体验极差,这里给出一种结果国内码云(gitee)的解决办法,速度简直飞起(芜湖,起飞)。比如要在下载caffe的源码。首先在GitHub上找到caffe的url地址然后进入码云(gitee),选择从GitHub/gitlab导入仓库将刚才在GitHub复制的url地址填入,完成仓库的新建之后进入仓库,复制码云的clone地址进行下载即可下载速度简直起飞,很快...

2020-09-23 11:04:44 373

原创 python安装cv2(ModuleNotFoundError: No module named ‘cv2‘ 解决办法)

对于python报错:ModuleNotFoundError: No module named 'cv2'只需用以下语句即可安装pip install opencv-python

2020-07-14 21:50:00 2633 2

原创 使用code-server来配置web端vscode

我们有时候需要随时随地的写代码,但环境、设备这些并无法随处获得,所以如果可以在浏览器中写代码的话,并且可以云端编译运行。code-server就为我们提供了一个这个浏览器端的vscode,只需要讲code-server配置在云服务器上就可以了只需要这两部就可以首先安装code-serverdocker pull registry.cn-shanghai.aliyuncs.com/shuzhi-amd64/code-server:v2启动code-server并设置密码在password...

2020-07-10 19:31:41 1816 2

原创 ssh连接报错

本人在ssh连接云服务器时,突然报了这个错,很是困惑。@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING ...

2020-06-17 21:46:49 367

转载 基于Ubuntu16.04的caffe安装与配置及其使用(1)

主要参考博客:https://blog.csdn.net/pangyunsheng/article/details/79418896搞了一个学期的caffe,这里想要来简要整理一下caffe的安装以及基本使用。我本人使用VMware,Linux版本为Ubuntu16.04。一、安装依赖包打开linux命令行,先执行下面指令进行更新:sudo apt-get update再依次执行以下语句,安装依赖包(一定要全部安装成功!!!):sudo apt-get install libprotobuf-d

2020-05-12 16:23:08 344

原创 编译原理---词法分析器的简单实现(c++)

什么是词法分析器简单来说,词法分析器,就是将用户输入的代码(一个个字符)通过某种方式拼接成有意义的一个个字符片段,什么是有意义呢?不同语言的定义不太相同,但大体来说,有意义表示这五类:关键字、标识符、数字串、运算符和分隔符、空白字符。拼接的方式多种多样,可以使用DFA也可以单纯的进行字符的拼接。大致思路这里就使用字符的拼接,由于这个程序比较简单,就每次判断下一个字符是字母、数字或者下划...

2020-04-05 10:51:50 4612

原创 关于C++文件读写操作

在c++中我们经常需要对文件进行操作,而文件的格式可能大不相同,主要有以空格分隔的记事本文件和以逗号分隔的.csv文件,这里简单介绍一下这两种文件的读写及处理操作( 主要使用ifstream和ofstream来完成读写)以空格分隔的记事本文件(有多行,每行有多个数字,不同数字之间使用空格分隔)读入数据格式(以空格分隔的记事本文件)读入代码#include<bits/stdc++.h...

2020-02-28 17:06:25 385

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除