Be Me in Real Life

做自己,笑不羁

7-52 两个有序链表序列的交集
https://pintia.cn/problem-sets/15/problems/2999

这道题思路很简单,从一个链表(循环的内层)中多次搜索另一个链表(循环的外层)里面的数字。不过经过了简单的优化:因为链表有序,因此每次找到后记录内层被查找链表的位置,这样可以不用每次都从头开始搜索。

优化前大规模数据大概是400ms,优化后300+ms。
但是一直找不到大规模数据这组样例哪里错了……以后有时间了再找下。

阅读全文 »

对于各种设计模式解决了软件扩充时的难题,方便复用、后期改动小。

1. 单例模式:

单例模式特点是系统中该实例有且只有一个,并且其创建不被用户控制,用户需要使用时直接对唯一的实例进行唤醒。
例如:windows资源管理器、系统日志(日志只由一个程序读写,避免造成丢失等问题)。

根据上面的描述,从“创建不被用户控制”可知:实例的构造函数、事例对象需要是private的。那么如何在不能声明一个对象的情况下完成对对象的创建呢?这就需要该实例对象是static的,使用static不用手动管理资源分配、释放,还可以使得饿汉方式中实例对象永远存在(类似资源管理器,从开机到关机一直在后台运行);“用户需要使用时直接对唯一的实例进行唤醒”意味着需要实现一个专门用于返回实例的public方法,并且由于单例类不能被用户创建,这个方法只能是static的(否则没有对象可以调用这个方法)。

思路:

在singleTon类中有如下成员:

  • singleTon类型的指针This,静态私有数据成员(唯一的数据成员);
    This指针表示该单例模式的对象,只能存在一个。
  • getInstance(),返回This指针,静态公有函数成员;
    获取单例模式的对象,表示用户对单例模式对象的唤醒。
  • doSomething(),无返回值,静态公有函数成员;
    单例对象直接调用的方法,表示用户要求单例对象完成的某些功能。
  • 私有构造和析构函数,防止用户。
阅读全文 »

有次面试被问到static的作用,记录一下

  1. 在函数体内,一个被声明为静态的变量,在该函数被调用的过程中其值不变;

  2. 在模块内(但在函数体外),一个被声明为静态的变量,可以被该模块内的任何函数调用,但不能被模块外的函数调用,是一个本地的全局变量;

  3. 在模块内,一个被声明为静态的函数,只可以被该模块内的其他函数调用,也就是说被限制在本地范围内使用

1. 其他工程问题

头文件重复包含问题

为了防止同一个文件被include多次,有两种方式避免:

  1. 可以使用宏定义方式进行避免:

    1
    2
    3
    4
    5
    6
    #ifndef __SOMEFILE_H__
    #define __SOMEFILE_H__

    //to do

    #end if

    这种宏定义的方式优点:可移植性好;缺点:无法防止宏名重复(宏名重复时会出错),难以排错。

  2. 使用编译器的方式

    1
    #pragma once

    优点:可以防止宏名重复,容易排错;缺点:可移植性查,只能在win平台使用。

引用头文件

项目引用的各类头文件统一放到stdafx.h中,避免分散

阅读全文 »

第一章:

一、基础题

  1. 请说出C++语言的优点,缺点,和主要用途?(涉及知识点:1-4节 C++特点, 1-5 C++作用

优点:

  • 强大的抽象封装能力:这让C++语言具备了强大的开发工程能力,在封装的同时C++最大程度的保留了高性能;
  • 高性能:运行快,快并且占用资源少一直是C++语言的追求;
  • 低功耗:特别适合在各种微型的嵌入式设备中运行高效的程序;

缺点:

  • 语法相对复杂,细节比较多,学习曲线比较陡;
  • 需要一些好的规范和范式,否则代码很难维护;
阅读全文 »

前言

之前在Linux上使用过Git,生成了绑定GitHub的公私钥、也把两个密钥文件保存在了本地。现在也想要Windows下的Git绑定GitHub,但是不知道如何用同一对公私钥绑定GitHub。

如果不解决,拉取仓库就会有Please make sure you have the correct access rights
and the repository exists.的问题

1
2
3
4
5
6
7
8
9
10
ubuntu@instance:~$ git clone [email protected]:V2RaySSR/Trojan.git
Cloning into 'Trojan'...
The authenticity of host 'github.com (15.164.81.167)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Host key verification failed.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

网上关于绑定GitHub的大多数办法

首先去网上一搜,我看到的几乎所有答案都是只讲如何生成一对新的公私钥,用它绑定GitHub:

(BTW,网上关于GitHub密钥绑定的绝大部分文章都是这样新建密钥,同样的内容重复太多,降低了信息密度,查找起有效解决办法来很难)
难道已经有了密钥就不配用GitHub吗?Windows和Linux的Git各自使用一个ssh密钥和github绑定,非常麻烦,而且每次更换电脑,还要再次生成密钥、添加到github。

阅读全文 »

最近在学Linux,昨天顺便第二次白嫖了谷歌云服务器。但是和第一次一样,遇到了不能用ssh登录的问题,只能使用密码登录。虽然不影响使用,但是强迫症患者很想弄清楚到底是怎么回事。
为了解决这个问题,查了蛮多材料,整理下可能的一些情况:

阅读全文 »

融资:
直接融资(债权融资、股权融资),部分融资方式不可逆
间接融资(信贷融资)

股票 VS 股权
很多地方把这两个搞混

阅读全文 »

iOS面试之C/C++部分
https://edu.51cto.com/course/2306.html

虽说这门课是针对iOS面试,但知识点都是C/C++上的。里面有些内容讲的挺好,尤其是前几节对指针的讲解、最后一节关于函数参数以及二级指针的内容。个人认为这两块比较深入透彻,非常值得一看,其他地方相对比较一般,是比较基础、简单的内容。

阅读全文 »

前言:
为了找工作,再次刷一下PTA上的数据结构习题,顺便在博客里简单记录一下题目里面的一些坑。

6-10 二分查找
https://pintia.cn/problem-sets/15/problems/923

经典的二分查找,做这道题的时间都用在了二分查找的几个细节上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

Position BinarySearch(List L, ElementType X) {
int begin= 0, end = L->Last;

while (begin<=end)
{
int mid = (begin + end) / 2;

if (L->Data[mid] == X)
{
return mid;
}
else if (L->Data[mid]>X)
{
end = mid - 1;
}
else // mid < X
{
begin = mid + 1;
}
}

return NotFound;
}
0%