计算机基础

二叉树转换为森林:

假如一棵二叉树的根节点有右孩子,则这棵二叉树能够转换为森林,否则将转换为一棵树。

1.从根节点开始,若右孩子存在,则把与右孩子结点的连线删除。再查看分离后的二叉树,若其根节点的右孩子存在,则连线删除…。直到所有这些根节点与右孩子的连线都删除为止。

2.将每棵分离后的二叉树转换为树。

如下图所示:

树、森林与二叉树的转换

 多型就是数据元素的类型不确定,字符串的每个元素始终都是字符(char),而不会是别的类型

 线性结构应满足:有且只有一个根结点与每个结点最多有一个前件,也最多有一个后件,所以 B 正确。所以有一个以上根结点的数据结构一定是非线性结构,所以 A 错误。循环链表和双向链表都是线性结构的数据结构。

 

所谓三元组就是一个元素存放三个信息,矩阵中的行号,列号以及值,这样就可以不存放值为0的元素,实现压缩。 十字链表相当于是邻接表和逆邻接表的合集,在一个元素里面存放了值以及出度表和入度表,这样也不需要像邻接矩阵那样存放大量0元素,而且找一个节点的入节点和找出节点一样快。

 

一个现有进程可以调用fork函数创建一个新进程。由fork创建的新进程被称为子进程(child process)。fork函数被调用一次但返回两次。两次返回的唯一区别是子进程中返回0值而父进程中返回子进程ID。

子进程是父进程的副本,它将获得父进程数据空间、堆、栈等资源的副本。注意,子进程持有的是上述存储空间的“副本”,这意味着父子进程间不共享这些存储空间。

 

队满条件是元素个数为m0。由于约定满队时队首指针与队尾指针相差1,所以不必再减1了,应当选A。当然,更正确的答案应该取模,即:QU->front = = (QU->rear+1)% m0

拓扑排序因此能够被用来检测有向图是否有环。

哈夫曼树

https://blog.csdn.net/Tommy1295/article/details/82841962

哈夫曼树的节点要么是叶子节点,要么是度为2的节点,不可能出现度为1的节点

Huffman编码使得每一个字符的编码都与另一个字符编码的前一部分不同,不会出现像’A’:00,  ’B’:001,这样的情况,解码也不会出现冲突。

树是图的特例,二叉树可以为空,图(包括树)不能为空

拓扑排序是一个比较常用的图论算法,经常用于完成有依赖关系的任务的排序。
举个栗 例子:有人想要制作一件工具,但是这个工具不是一次就可以完成的,分很多个步骤,而且这些步骤是有顺序的,也就是说,假设B的顺序在A的后面,那么你就必须要先完成A再完成B,但是也有些步骤不分顺序,意思是你先做哪一个都是可以的。
面对这样的问题,我们可以把步骤建立成一张有向无环图,A指向B意思是A要在B前面完成,那么下面,我们就要找到一个顺序,来使答案符合题目要求。拓扑排序就是干这样的事情的。

拓扑排序实现思路:先从第一个没有入度的节点开始(如果有多个则任意),将此点放入队列中,并且删除与之有关的边,再重复上述步骤,直到所有的点全部进入队列,此时输出即可。

快速排序是把数列按一个枢纽值分成两部分分别排序,所以效率高。但是若原数据为有序,并且选择的枢纽值为第一个数时,那在分块时会将一个第一个数前面的数(也就是没有)分为一块,将除第一个数的所有数分成了另一块。这样一来,每一次分块都只减少了一个值,而每次分块的时间为O(N),所以总时间为O(N^2)。

 小生成树是无向图的连通子图。从不同的结点开始,图的存储方式不同,生成树都不相同。

 B树只能进行索引查找,B+树既能顺序查找,也能索引查找。

grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 find只能匹配单个字符,

6个圆盘的汉诺塔,总的移动次数是2^n - 1

银行家算法:避免死锁

资源有序分配法:预防死锁

资源分配图化简法:检测死锁

撤销进程法:解决死锁

null既不是一种对象也不是一种类型,它仅是一种特殊的值,你可以将其赋给任何引用类型,也可以转化成任何类型。

进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程

在查询基础上使用函数速度更慢

interface 方法不能是private,如果是static的必须实现该方法。

32位系统最多只能寻址4GB空间。232B=222KB=212MB=22GB=4GB

C类专用网段:192.168.0.1~192.168.255.254    255.255.255.0很多公司网吧都是用这个网段 hoho

B类专用网段:172.16.0.1~172.31.255.254      255.255.0.0

A类专用网段:10.0.0.1~10.255.255.254        255.0.0.0

几个特殊的IP地址:127.0.0.1为本地回路测试地址

255.255.255.255代表广播地址

0.0.0.0代表任何网络

网络号全为0的代表本地网络和本地网段

网络号全为1的代表所有的网络

主机位全为0的代表某个网段的任何主机地址

主机位全为1的代表该网段的所有主机

在聚合函数中遇到空值时,除了COUNT(*)外,都跳过空值而去处理非空值。 

1.数据结构化 2.数据的共享性高,冗余度低,易扩充 3.数据独立性高 4.数据由DBMS统一管理和控制

外模式/模式映像定义了数据库中不同用户的外模式与数据库逻辑模式之间的对应关系。当数据库模式发生变化时,通过调整外模式/模式映像间的映像关系,使得应用程序不必随之修改,从而保证数据与应用程序间的逻辑独立性,简称数据的逻辑独立性,所以本题选A。 模式又称逻辑模式,模式/内模式映像定义了数据库中数据全局逻辑结构与这些数据在系统中的物理存储组织结构之间的对应关系,保证数据库中数据与应用程序问的物理独立性。 

需求分析:确立系统所需要实现的功能模块

概念设计:设计E-R图

逻辑设计:E-R图转换成关系模式

物理设计:设计的具体的表,使用具体的数据库关系软件如MySQL

chmod改变文件权限

touch新建文件或者对文件时间戳进行修改

cat文本输出命令,一般用来查看文件内容

chown改变文件所有者

原码 10000111 

反码  11111000

补码 (加一)11111001

哈夫曼数叶子节点比非叶子节点数多一,所以为2*n+1;

几种常见的操作系统调度策略

https://blog.csdn.net/jiaochiwuzui/article/details/80963012

进程具有独立的数据堆栈空间和数据段,线程有独立的堆栈空间,但共享数据段 

top:系统中各个进程的资源占用状况

硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。

软连接可以跨文件系统,可以是任意文件;

硬链接。必须在同一个文件系统,且不能建立指向目录的连接。

 

删除时,因为软连接相当于指向原文件的指针,删除被指文件时,指针指向不明,即失效。

             相反,硬链接和被连接文件互为别名,删除任何一个都不会影响源文件,除非删掉最后一个指向源文件的目录。

线程安全函数 
• 概念: 
       线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。 
• 确保线程安全: 
       要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄存器。因此,对于同一进程的不同线程来说,每个线程的局部变量都是私有的,而全局变量、局部静态变量、分配于堆的变量都是共享的。在对这些共享变量进行访 问时,如果要保证线程安全,则必须通过加锁的方式。
• 线程不安全的后果: 
       线程不安全可能导致的后果是显而易见的——共享变量的值由于不同线程的访问,可能发生不可预料的变化,进而导致程序的错误,甚至崩溃。 

对于任何一种二叉树,其总支线有n0+n1+n2-1 = 2*n2+n1,n0-1= n2,即叶子节点-1等于子节点数为2的节点数

进程的组成

进程通常由程序、数据和进程控制块(Process Control Block,PCB)组成。

管道
      1,匿名管道:

                 概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,一般使用fork函数实现父子进程的通信。

  1. 它是半双工的(即数据只能在一个方向上流动),具有固定的读端和写端。

  2. 它只能用于具有亲缘关系的进程之间的通信(也是父子进程或者兄弟进程之间)。

  3. 它可以看成是一种特殊的文件,对于它的读写也可以使用普通的read、write 等函数。但是它不是普通的文件,并不属于其他任何文件系统,并且只存在于内存中。

      2,命名管道: 

                  概念:在内核中申请一块固定大小的缓冲区,程序拥有写入和读取的权利,没有血缘关系的进程也可以进程间通信。

信号量

信号量(semaphore)与已经介绍过的 IPC 结构不同,它是一个计数器。信号量用于实现进程间的互斥与同步,而不是用于存储进程间通信数据。

1、特点

  1. 信号量用于进程间同步,若要在进程间传递数据需要结合共享内存。

  2. 信号量基于操作系统的 PV 操作,程序对信号量的操作都是原子操作。

  3. 每次对信号量的 PV 操作不仅限于对信号量值加 1 或减 1,而且可以加减任意正整数。

  4. 支持信号量组。

  5. 共享内存

    共享内存(shared memory)可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。

    套接口

    套接口(socket):更为一般的进程间通信机制,可用于不同机器之间的进程间通信。

    消息队列:

    消息队列是一列具有头和尾的消息排列,新来的消息放在队列尾部,而读取消息则从队列头部开始。这样看来,它和管道十分类似,一头读,一头写?的确,看起来很像管道,但又不是管道:

      (1)消息队列无固定的读写进程,任何进程都可以读写;而管道需要指定谁读和谁写;

      (2)消息队列可以同时支持多个进程,多个进程可以读写消息队列;即所谓的多对多,而管道是点对点;

      (3)消息队列只在内存中实现,而管道还可以在磁盘上实现;
    数据库系统的数据独立性体现在不会因为数据存储结构与数据逻辑结构的变化而影响应用程序

  6. 所谓Belady现象是指:采用 [1]  FIFO算法时,如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。

  7. Session 在服务器上,一定时间之后是由服务器销毁的。

  8. 如果有上一次握手的话,

    本次握手的确认号ACK = 上一次的Seq+1,表示上一次对方发送的序列号我已经成功收到了,然后想要接收下一个序号的报文;

    本次握手的序列号Seq = 上一次的ACK,表示对上一次对方想要接收的序号进行回应,发送对方想要的报文给他。

考察测试用例设计思路,从功能、性能、安全等多方面思考;结合测试用例设计方法回答。 答案要点: 功能测试 1. 正向功能; 2. 参数为空; 3. dealid不存在; 4. dealid为非数字的值; 5. quantity为0或负值; 6. quantity大于库存量; 7. token无效 8. 入参不是JSON 性能测试 1. 压力测试,考察系统在极限压力下的处理能力 2. 狭义性能测试,验证系统能够达到一定的处理能力 3. 并发测试,测试数据库和应用服务器对并发请求的处理 安全性测试 1. 伪造token攻击 2. 订单潮水攻击 3. deal遍历攻击 4. SQL注入攻击 加分项 订单复用:当同一个用户提交的dealid、quantity相同时,返回的orderID总是一样(没有重复创建订单) 

302:临时重定向(指出被请求的文档已被临时移动到别处,此文档的新的URL在Location响应头中给出)
304:未修改(表示客户机缓存的版本是最新的,客户机应该继续使用它。) 

http的header分割符是/r/n

 

请求参数如果包含&,需要进行encode

树的入度=树的出度=总节点数-1。设出度为0的节点有n0,为1的节点为n1=100,为2的节点有n2=100,0*n0+1*n1+2*n2=n0+n1+n2-1,所以n0+n1+n2 =301

数据可以共享(或数据结构化)<br>(2)数据独立性<br>(3)数据冗余小,易扩充<br>(4)统一管理和控制
TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码
TDD的基本思路就是通过测试来推动整个开发得进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程
TDD的重要目的不仅仅是测试软件,测试工作保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员去除模棱两可的需求
TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证

风吹云动天不动水推船移岸不移

1.Python比Java简单,学习成本低,开发效率高

2.Java运行效率高于Python,尤其是纯Python开发的程序,效率极低

3.Java相关资料多,尤其是中文资料

4.Java版本比较稳定,Python2和3不兼容导致大量类库失效

5.Java开发偏向于软件工程,团队协同,Python更适合小型开发

6.Java偏向于商业开发,Python适合于数据分析

7.Java是一种静态类型语言,Python是一种动态类型语言

8.Java中的所有变量需要先声明(类型)才能使用,Python中的变量不需要声明类型

9.Java编译以后才能运行,Python直接就可以运行;

10.JAVA 里的块用大括号对包括,Python 以冒号 + 四个空格缩进表示。

11.JAVA 的类型要声明,Python 的类型不需要。

12.JAVA 每行语句以分号结束,Python 可以不写分号。

13.实现同一功能时,JAVA 要敲的键盘次数一般要比 Python 多。

分析思路,只要回答出相应的知识点,得右侧括号内的分数: 
(1)客户端资源问题:手机状态,如内存、垃圾文件等;手机配置等等 (1分)
(2)网络问题:弱网;移动网络/wifi;运营商等等 (1分)
(3)服务端问题:接口延时/服务端TPS、资源利用率等等 (2分)
(4)前端问题:首屏加载逻辑;资源大小;(1分)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值