近期碰到的一些面试题--WPF、C#、数据库
最近想换工作的念头特别强烈,面了几家公司没有拿到满意的offer,心仪的公司面完锁HC,有点无奈,感觉今年有点卷,把碰到过的面试题总结下。
WPF相关:
1.定义依赖属性需要注意哪些地方?
(1)依赖属性的名字必须以Property结尾。
(2)如果不需要监听属性值的变化,不需要绑定,可以用PropertyMetadata,避免性能的浪费。
(3)对依赖属性值的变化监听应该使用回调,而不是写在属性构造器里面。因为对依赖属性的赋值,不一定会走属性构造器。
2.Invoke和BeginInvoke的区别。
(1)Invoke是同步的,将消息丢入消息泵后会等到消息被消费完才会返回。
(2)BeginInvoke是异步的,将消息丢入消息泵后直接返回。
两者在使用区别上,主要是看后续的代码是否需要异步进行。比如说,后台有上百张图片文件需要读取并显示到界面上,则可以将读取的操作放入子线程中操作,将生成BitmapSource通过BeginInvoke推送给UI线程去显示,可以不影响后续其他文件的读取。如果这个地方使用Invoke,则可能会需要后续其他文件的读取效率。
3.ControlTemplate 和DataTemplate的区别。
ControlTemplate定义控件的外观,DataTemplate定义数据展示的外观。
4.WPF和Winform有什么区别?
winform 的界面绘制是基于GDI的,程序启动速度快,适合敏捷性开发。WPF是基于DirectX,依赖硬件,可以发挥硬件加速。对于大型项目来说,WPF要比Winform性能更好,界面能够高度定制。
C#相关:
1.接口和抽象类的区别。
(1)接口没有构造函数,不能有字段变量,不能定义每个方法的访问权限,方法必须是抽象的,没有函数体。
(2)抽象类可以有构造函数,可以有普通的字段变量,可以定义每个方法的访问权限,方法可以是非抽象的,可以有函数体。
2.说下CLR的内存管理机制。
CLR的GC使用的是引用跟踪算法(不是引用计数!),每次GC开始时会从一个根开始沿着对象引用的链路去查找链路上所有对象的引用,找到该对象的引用,则将该对象的内存标志字段设为1。遍历结束,会将所有标记字段为0的对象清除,并将幸存对象压缩,清除内存碎片化。
其中的根,可以是全局对象和静态变量的引用,形参的引用,局部变量的引用,还有所有对象引用的CPU寄存器。
再深入一些,可以讲GC的0代,1代,2代。0代就是内存堆初始化时生成的对象,初始大小为256KB,当0代即将超出容量的时候,会进行一次GC,将幸存的对象转入1代,并将0代扩容。1代初始大小为2M,当即将超出容量的时候也会进行一次GC,将幸存对象转入2代,并将1代扩容。2代的初始大小为10M,当二代即将超出容量的时候进行一次GC,并将2代扩容。此时2代的幸存对象不会升入3代,2代的垃圾回收即是完整回收,会回收所有代的对象。
这样做的好处是可以提升垃圾回收的性能。
另外,可以触发GC的几种情况:
(1)主动调用GC.Clloect()方法,并不推荐这种主动调用的方式。
(2)系统报告低内存。
(3)CLR卸载AppDomain
(4)CLR正在关闭,应用程序退出。
3. EF中的AsEnumerable和AsQueryable 的区别
AsEnumerable是现将数据加载进缓存再进行处理,消耗更多的资源提升查询效率。AsQueryable 是现将操作翻译为Sql语句操作数据库。
如果是查询操作比较多,可以用AsEnumerable。如果是一次性获取较多的数据集,则优先使用AsQueryable 。
4.引用是指针么?有什么区别么?
引用本质上是指针,但是引用≠指针。引用在初始化的时候已经确定了类型对象,创建之后无法再变更到其他类型对象上,而指针可以指向任何对象的地址。
5.new 关键字有哪些用法?
1.运算符,创建对象
2.修饰符,隐藏基类中的继承成员
3.用于泛型类型中的类构造函数约束
6.new 关键字创建对象的时候做了那些事情?
1.计算类型及其所有基类字段所需要的内存,其中包括同步索引块和类型对象指针所需要的内存。
2.在托管堆分配内存。
3.调用类型的构造函数并传参,初始化字段,同步索引块,类型对象指针。
4.返回地址引用。
7.设计模式的几大原则。
职责单一原则,开闭原则,依赖倒置原则,迪米特法则,里氏替换原则,接口隔离原则,合称复用原则。
数据库相关:
1.什么是脏读,不可重复度,幻读?
脏读:一个事务读取了另一个事务已经修改但还未提交的数据。
不可重复度:同一个事务多次执行同一条查询语句,得到的行结果可能不一样。
幻读:同一个事务多次执行同一条查询语句,得到的数据集结果可能不一样。
2.事务的隔离级别?
1.未提交读:最不安全的隔离级别,允许脏读,不可重复度,幻读
2.提交读:不允许脏读,允许不可重复度和幻读
3.可重复度:不允许脏读,不可重复读,但允许幻读
4.串行:安全级别最高,不允许脏读,不可重复读,幻读,但执行效率最低
3.Mysql中的MVCC是什么?解决了什么问题?
MVCC,多版本并发控制,快照读,给每一个执行事务创建某个版本的数据镜像,在不使用数据库锁的情况下解决不可重复读的问题,提高数据库的并发性能。
后面想到了会继续补充。
近期碰到的一些面试题--WPF、C#、数据库的更多相关文章
- 云时代架构阅读笔记十五——之前碰到的Java面试题
1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致. 2.Java有 ...
- php面试题之五——MySQL数据库(基础部分)
五.MySQL数据库 mysql_num_rows() mysql_affected_rows() 这两个函数都作用于 mysql_query($query)操作的结果,mysql_num_rows( ...
- wpf linq数据库无法插入
最近做wpf应用程序,遇到一个很奇怪的问题,我用代码往数据库里插入数据成功了,但去vs的服务器资源管理器里查看数据库总是最开始的样子,什么都没有插入进去,然后就检查代码,打日志查看sql语句,发现都没 ...
- wpf C# 数据库 c/s 个人信息管理 wpf局域网通信
系统功能基本要求 wpf局域网通信 WPF跨线程访问线程安全的数据如解决该类型的CollectionView不支持从调度程序线程以外的线程对其SourceCollection 读取信息null 读取发 ...
- Python 经典面试题汇总之数据库篇
数据库和缓存 1.列举常见的关系型数据库和非关系型都有那些? 关系型数据库(需要有表结构) mysql.oracle.splserver.postgresql.db2.sybase 非关系型数据库(是 ...
- 面试题:oracle数据库行转列的问题
今天我一个学弟问了一个面试题: 有表A,结构如下:A: p_ID p_Num s_id1 10 011 12 022 8 013 11 013 8 03其中:p_ID为产品ID,p_Num为产品库存量 ...
- 8月份21道最新Java面试题剖析(数据库+JVM+微服务+高并发)
前言 纵观几年来的Java面试题,你会发现每家都差不多.你仔细观察就会发现,HashMap的出现几率未免也太高了吧!连考察的知识点都一样,什么hash碰撞啊,并发问题啊!再比如JVM,无外乎考内存结构 ...
- python面试题七: mysql数据库
---------------------------------------------------------------------------------------------------- ...
- WPF——绑定数据库数据(Listview)
一.首先先画一个窗体,放进一个Listview 然后给每列起好名字,并且绑定的数据是临时表的列名 二.造一个临时表用来存储数据,并且将扔进去的Listview绑定到这个临时表DataTable上面 p ...
随机推荐
- linux创建磁盘阵例10
Linux创建RAID10 生产环境中用到的服务器一般都配备RAID阵列卡,尽管服务器的价格越来越便宜,但是我们没有必要为了做一个实验而去单独购买一台服务器,而是可以学会使用mdadm命令在Linux ...
- idea打开service窗口
- GET 与 POST 其实没有什么区别
GET 与 POST 其实没有什么区别 本文写于 2020 年 12 月 30 日 GET 与 POST 是两种 HTTP 方法,并且是最常用的两种. 今天在使用 Postman 测试 api 的时候 ...
- [源码解析] TensorFlow 分布式之 ParameterServerStrategy V2
[源码解析] TensorFlow 分布式之 ParameterServerStrategy V2 目录 [源码解析] TensorFlow 分布式之 ParameterServerStrategy ...
- EF Core 的关联查询
0 前言 本文会列举出 EF Core 关联查询的方法: 在第一.二.三节中,介绍的是 EF Core 的基本能力,在实体中配置好关系,即可使用,且其使用方式,与编程思维吻合,是本文推荐的方式. 第四 ...
- Redis设计与实现3.3:集群
集群 这是<Redis设计与实现>系列的文章,系列导航:Redis设计与实现笔记 集群中的节点 创建集群 通过 CLUSTER NODE 命令可以查看当前集群中的节点.刚启动时,默认每一台 ...
- 流,用声明性的方式处理数据集 - 读《Java 8实战》
引入流 Stream API的代码 声明性 更简洁,更易读 可复合 更灵活 可并行 性能更好 流是什么? 它允许以声明方式处理数据集合 遍历数据集的高级迭代器 透明地并行处理 简短定义:从支持数据处理 ...
- linxu篇-centos搭建ftp服务器
1安装vsftpd 2备份配置文件 3修改配置文件 vi /etc/vsftpd/vsftpd.conf anonymous_enable=NO #允许匿名用户访问为了安全选择关闭 local_ena ...
- 110_Power Pivot特殊结算日期及财年日期
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 1.背景 前几天看到群里有朋友在搞特殊结算日期,主要不是按照正常日期里的整月,按照比如:上月21号至本月20号作为结算周期 ...
- Hapoop安装学习(第一天)
学习任务: 1.安装虚拟机 Linux使用版本为Centos7,共安装3台虚拟机,一台主机和两台从机.主机命名为master,两台从机分别命名为s1和s2. master分配磁盘空间30G,s1和s2 ...