切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
面试题
笔试题
解决方法
术语和定义
计算机基础知识
C# 面试题
异常错误
待学习
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
QA
计算机编程基础概念与话术
[TOC] ### 1. 引用类型和值类型的区别 + **引用类型:**存储在堆上,包含一个指向实例的指针,默认赋值为null。 + **值类型:**存储在栈上,存储是一个实际值,未赋值前不同类型有不同的默认值但都不能为空 > Tips:值类型变量声明初始化后即可访问,引用类型变量必须先使用new关键字为其所声明的变量分配内存后方可访问 |**比较类型**|**值类型**|**引用类型**| |--|--|--| |**变量存储内容**|实际数据|数据的引用地址| |**存储分配位置**|堆栈|托管堆| |**内存大小**|较少|较多| |**空间释放**|运行时超过变量的作用域|由垃圾回收机制处理| ### 2. this关键字作用 + this是指当前对象自己 + 把this作为参数传递 + 在构造函数中,通过this可以调用一个类中其他的构造函数 ### 3. 简述堆和栈的区别 + **栈**是编译期间就分配好的内存空间,因此代码中必须就栈的大小有明确的定义 + **堆**是程序运行期间动态分配的内存空间,可以根据程序运行情况确定要分配的堆内存大小 + **栈**是系统提供的功能,特点是快速高效,缺点是有限制数据不灵活 + **堆**是函数库提供的功能,特点是灵活方便,数据适用面广泛,但效率有一定降低 ### 4. 简述枚举的作用 枚举可以避免不合理的赋值,它表示一组有限的值对可能的值进行约束,它更易于输入,使代码更清晰,并且允许使用过描述性的名称表示数据,使用时更直观方便。 > Tips:在不指定枚举类型中元素值的情况时,默认第一个元素的值从0开始,后面依次加1 ### 5. 空字符串与字符串引用为空值的区别 + 字符串引用为空值(string str = null)是不给它分配内存空间 + 空字符串(string str = “”)是给它分配内存空间,但它的长度为0 ### 6. 类与结构、对象之间的区别 + **结构**是值类型,而**类**是引用类型 + **结构**不支持继承,而**类**完全可以被其它类继承,其自身也能被继承 + **结构**不能定义默认的构造函数,也没有析构函数,并且不能有protected修饰符,而**类**有默认的构造函数和析构函数 ### 7. 类与对象的区别 类是抽象的概念,对象是真实的个体,类在面向对象观念中可视为对象的“模板”、“蓝图” ### 8. 接口和抽象类的区别 + 抽象类型可以提供成员的实现细节,而接口不能,设计抽象时如果要求提供成员的实现细节请选择抽象类 + 如果设计抽象时选择抽象类,在以后的版本中可以随意为抽象类添加新成员,而接口在这方面没有那么灵活,只能修改现有代码才能添加成员 + 一个类可以同时实现多个接口,但只能继承一个抽象类,如果要实现类似于多重继承的效果请选择接口,接口中所有方法必须是抽象的,并且不能指定方法的访问修饰符,抽象类中可以有方法的实现,也可以指定方法的访问修饰符 ### 9. 什么是强类型、什么是弱类型 强弱类型是指类型检查的严格程度,语言有无类型,弱类型,强类型三种 + **无类型:**不检查且不区分指令和数据 + **弱类型:**检查很弱,仅能严格的区分指令和数据(C和JS) + **强类型:**严格的在编译时进行检查(Java,C#等) ### 10. 面向对象的三大特点 + 封装 + 继承 + 多态 ### 11. 运算符的优先级 下面表格中按序号越小优先级越高展示 |序号|运算符|说明| |--|--|--| |1|一元运算符|只需要一个操作数的运算符,例如:【正 +】、【负 -】、【逻辑非 !】、【后缀递增和前缀递增 ++】、【后缀递减和前缀递减 --】、【位非 ~】| |2|乘除运算符|`*`、`/`、`%`| |3|加减运算符|`+`、`-`| |4|位运算符|`<<`、`>>`| |5|关系运算符|`<`、`<=`、`>=`、`>`、`is`、`as`| |6|相等运算符|`==`、`!=`| |7|位与运算符|`&`| |9|异或运算符|`^`| |9|位或运算符|<mark>Ι</mark>| |10|逻辑与运算符|`&&`| |11|逻辑或运算符|<mark>ΙΙ</mark>| |12|三元运算符|`?:`| |13|赋值运算符|`=`、`+=`、`==`、`*=`、`/=`、`%=`| > Tips:赋值操作符左操作数必须是变量、属性、索引器或者事件类型的表达式 ### 12. 为什么使用ViewModel MVVM(model,view,viewmodel) + 1、减少页面逻辑的复杂度 + 2、处理页面的数据逻辑,管理页面状态 + 3、各种组件可以相对解耦,即有利于团队协作与日后维护 ### 13. 区别委托回调的静态方法和实例方法 **静态方法和实例方法的区别** |静态|实例| |--|--| |使用static关键字|不需要static| |通过类名来访问|通过对象来访问| |可以访问静态成员|可以直接访问静态成员| |不能访问任何非静态成员|通过具体实例对象来调用| |调用前初始化|实例化时初始化| > **Tips:**委托不仅能绑定静态方法,同时也能绑定实例方法,当绑定实例方法时,delegate.Target 属性将会设置成指向该实例方法所属类型的一个实例对象,当绑定静态方法时,delegate.Target 属性将会被设置成null ### 14. 使用模型和数据仓库的好处 + 1、业务逻辑与数据模型紧密耦合,减少分层,降低代码数量 + 2、完全剥离数据库业务,程序员可以更专注于实现业务逻辑 + 3、面向对象编程,数据转化为对象,更符合程序员的思考方式 ### 15. 表达式的含义和作用是什么,它一定有返回结果吗 + 表达式的含义:表达式是由**操作数**(如变量、常量、函数调用等)和**操作符**(如加减乘除、逻辑运算符等)按照一定规则组合而成的语法结构,用于描述一个计算过程或值的获取方式。 - 例如:数学中的 `3 + 5`、编程中的 `a * (b + c)`、逻辑判断中的 `x > 0 && y != null` 等,都属于表达式。 + 表达式的主要作用 - **计算数值** 这是最基础的作用,通过操作符对操作数进行运算,得到具体的数值结果。 例:`10 / 2 + 3` 的结果为 `8`。 - **判断逻辑** 逻辑表达式通过比较或逻辑运算,返回“真”(`true`)或“假”(`false`),用于条件判断(如 `if` 语句、循环控制等)。 例:`age >= 18 && score > 60` 用于判断“是否成年且分数及格”。 - **获取或处理数据** 在编程中,表达式可以通过函数调用、数组/对象访问等方式获取数据。 例:`user.name`(获取对象属性)、`Math.max(2, 5, 8)`(调用函数返回最大值)。 - **组合复杂逻辑** 多个简单表达式可以通过操作符组合,形成复杂的计算或判断逻辑,简化代码结构。 例:`(a + b) * (c - d) / 2` 是多个基础运算的组合。 + 表达式是否一定有返回结果? >**是的,表达式必然有返回结果**。 + 表达式的本质是“一个有值的计算过程”,无论简单还是复杂,最终都会产生一个确定的结果(即使结果可能是“空”或“未定义”,但仍属于返回值)。 - 反例:“语句”(如 `if`、`for`、`console.log()`)不一定有返回结果,它们的作用是执行操作(如控制流程、输出内容),而不是返回值。 例:`console.log("hello")` 会输出内容,但返回值为 `undefined`(这是函数本身的特性,而非表达式的例外)。 表达式是“有返回值的语法结构”,核心作用是计算、判断或处理数据,且**必然会产生一个结果**。它与“语句”的关键区别在于:表达式侧重“返回值”,语句侧重“执行操作”。
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号