牛客网题目六

1.广义表即我们通常所说的列表(lists)。它放松了对表元素的原子性限制,允许他们有自身结构。

广义表的长度:最大括号中的 逗号数+1

广义表的深度:展开后含括号的层数。

2.数组和矩阵不同,数组元素可以是字符,即字符数组,矩阵中都是数

3.环境变量可在编译source code时指定

javac一次可同时编译数个Java源文件

javac.exe能指定编译结果要置于哪个目录(directory)

4.通过反射可以动态的实现一个接口,形成一个新的类,并可以用这个类创建对象,调用对象方法。

通过反射,可以突破Java语言提供的对象成员、类成员的保护机制,访问一般方式不能访问的成。

Java的反射机制会给内存带来额外的开销。例如对永生堆的要求比不通过反射要求的更多。

5.覆盖索引:SQL只需要通过索引就可以返回查询所需要的数据,而不必通过二级索引查到主键之后再去查询数据。

 覆盖索引是一种非常强大的工具,能大大提高查询性能,只需要读取索引而不需要读取数据,有以下优点:

 1)、索引项通常比记录要小,所以MySQL访问更少的数据。

 2)、索引都按值得大小存储,相对于随机访问记录,需要更少的I/O。

 3)、数据引擎能更好的缓存索引,比如MyISAM只缓存索引。

 4)、覆盖索引对InnoDB尤其有用,因为InnoDB使用聚集索引组织数据,如果二级索引包含查询所需的数据,就不再需要在聚集索引中查找了。

 限制:

 1)、覆盖索引也并不适用于任意的索引类型,索引必须存储列的值。

 2)、Hash和full-text索引不存储值,因此MySQL只能使用BTree。

 3)、不同的存储引擎实现覆盖索引都是不同的,并不是所有的存储引擎都支持覆盖索引。

 4)、如果要使用覆盖索引,一定要注意SELECT列表值取出需要的列,不可以SELECT * ,因为如果将所有字段一起做索引会导致索引文件过大,查询性能下降。

6.

内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序

用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取。

简单来讲一个进程由于执行系统调用而开始执行内核代码,我们称该进程处于内核态中. 一个进程执行应用程序自身代码则称该进程处于用户态.

为什么要有用户态和内核态

由于需要限制不同的程序之间的访问能力, 防止他们获取别的程序的内存数据, 或者获取外围设备的数据, 并发送到网络, CPU划分出两个权限等级 -- 用户态 和 内核态

用户态与内核态的切换

所有用户程序都是运行在用户态的, 但是有时候程序确实需要做一些内核态的事情, 例如从硬盘读取数据, 或者从键盘获取输入等. 而唯一可以做这些事情的就是操作系统, 所以此时程序就需要先操作系统请求以程序的名义来执行这些操作.

这时需要一个这样的机制: 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令

这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction)

他们的工作流程如下:

  1. 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务.
  2. 用户态程序执行陷阱指令
  3. CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问
  4. 这些指令称之为陷阱(trap)或者系统调用处理器(system call handler). 他们会读取程序放入内存的数据参数, 并执行程序请求的服务
  5. 系统调用完成后, 操作系统会重置CPU为用户态并返回系统调用的结果。

7.快速排序和堆排序的平均时间复杂度都是O(nlogn)

快速排序最差 n平方 归并排序最差nlogn

快速排序空间复杂度 logn 堆排序1

快速排序最好复杂度 nlogn 希尔排序n的1.3-2次方

8.UDP协议的特点 :没有拥塞控制

9.不能用来修饰interface的有 :private static protected

10.关于windows的消息机制

SendMessage等待消息处理完成后返回

线程可以没有消息队列

11. Windows中,以下关于动态链接库(DLL)的说法

DLL中可以导出变量

DLL不可以脱离EXE独立运行

12.软件工程的基本原则包括:抽象,信息隐蔽,模块化,局部化,确定性,一致性,完备性,可验证性。

13.进程的描述

进程是动态的概念

进程的执行需要CPU

进程具有生命周期

14.数据存储和数据流都是(  数据  ),仅仅是所处的状态不同

15.进程通信的途径:管道,信号量,消息队列,共享内存

16.

c语言中的union 是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值;

(1)32位:double 8字节,long 4字节,则最终12字节;

(2)64位:double8字节,long8字节,最终16字节

17.

基于TCP(面向连接)的Socket编程 
一、客户端: 
1、打开一个套接字(Socket); 
2、发起连接请求(connect); 
3、如果连接成功,则进行数据交换(read、write、send、recv); 
4、数据交换完成,关闭连接(shutdown、close); 
二、服务器端: 
1、打开一个套接字(Socket); 
2、将套接字绑定到服务器地址上(bind); 
3、指定套接字为服务器套接字(listen),做好连接请求准备; 
4、等待连接请求(connect); 
5、如果连接请求到,则连接建立,进行数据交换(read、write、send、recv); 
6、数据交换完成,关闭连接(shutdown、close); 
  
基于UDP(面向无连接)的Socket编程 
一、客户端\服务器端: 
1、打开一个套接字(Socket); 
2、将套接字绑定到指定的服务器地址和端口上(bind); 
3、进行数据交换(read、write、send、recv); 
4、数据交换完成,关闭连接(shutdown、close); 
  
三、MFC对Socket的支持: 
1、创建CAsyncSocket对象; 
2、发送接收数据报(SendTo、RecvFrom); 
3、连接服务器(Connect); 
4、接收连接(Listen); 
5、发送和接收流式数据(Send、Receive); 
6、关闭套接字(Close); 
7、差错处理(GetLastError) 

18.

java.lang.Object

    java.lang.Throwable

        java.lang.Error

        java.lang.Exception

            java.lang.Exception.RuntimeException

throw指令能够抛出Throwable及其子类

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LeetCode和牛客网都是在线编程练习平台,供程序员进行算法和编程题目的练习。两个平台有一些区别。 LeetCode是一个以算法为主的平台,题目描述简练,直奔主题,通常使用英文进行描述。LeetCode注重算法思维和解题能力的锻炼,题目更偏向于算法和数据结构的应用。许多人在LeetCode上进行练习,习惯了它的题目风格和解题模式。 而牛客网是一个综合性的在线编程平台,除了算法题,还包括面试题、笔试题、实习生项目等。牛客网题目描述相对LeetCode来说更加贴近实际场景,有更多的描述和背景信息。这也可能导致牛客网题目相对较长,需要花费一些时间来阅读和理解。 不同的人对于这两个平台的喜好和适应程度各有差异。有的人可能习惯于LeetCode的简练风格,而对牛客网题目描述感到吃力;有的人则喜欢牛客网提供的更多背景和场景信息。 总的来说,LeetCode和牛客网都是很好的编程练习平台,可以根据个人的需要和喜好进行选择和使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [LeetCode和牛客网的对比](https://blog.csdn.net/zr1076311296/article/details/51606300)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值