近期碰到的一些面试题--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 ...
 
随机推荐
- XCTF练习题---MISC---something_in_image
			
XCTF练习题---MISC---something_in_image flag:Flag{yc4pl0fvjs2k1t7T} 解题步骤: 1.观察题目,下载附件,这是一道2019湖湘杯的题目 2.下 ...
 - 聊聊如何在华为云IoT平台进行产品开发
			
摘要:华为云物联网平台承载着南北向数据互通的功能职责. 本文分享自华为云社区<如何基于华为云IoT物联网平台进行产品开发>,作者: Super.雯 . 华为云物联网平台承载着南北向数据互通 ...
 - 干货 | 手把手教你搭建一套OpenStack云平台
			
1 前言 今天我们为一位朋友搭建一套OpenStack云平台. 我们使用Kolla部署stein版本的OpenStack云平台. kolla是用于自动化部署OpenStack的一个项目,它基于dock ...
 - 手脱FSG(2.0)
			
1.查壳 2.x32dbg脱壳 在第二个xchg处使用ESP定律脱壳: 由于FSG壳特性,在跳转后位置向上查找,找到js\jne\jmp,jmp就是OEP位置: 在此处使用工具进行脱壳: 完成! 3. ...
 - axios源码解析 - 请求拦截器
			
axios请求拦截器,也就是在请求发送之前执行自定义的函数. axios源码版本 - ^0.27.2 (源码是精简版) 平时在业务中会这样去写请求拦截器,代码如下: // 创建一个新的实例 var s ...
 - TS 自学笔记(一)
			
TS 自学笔记(一) 本文写于 2020 年 5 月 6 日 日常废话两句 有几天没有更新了,最近学的比较乱,休息了两天感觉好一些了.这两天玩了几个设计软件,过几天也写篇文章分享分享. 为啥要学 TS ...
 - Fluent-Validator 业务校验器
			
Fluent-Validator 业务校验器 背景 在互联网行业中,基于Java开发的业务类系统,不管是服务端还是客户端,业务逻辑代码的更新往往是非常频繁的,这源于功能的快速迭代特性.在一般公司内部, ...
 - 485. Max Consecutive Ones - LeetCode
			
Question 485. Max Consecutive Ones Solution 题目大意:给一个数组,取连续1的最大长度 思路:遍历数组,连续1就加1,取最大 Java实现: public i ...
 - 好客租房31-事件绑定this指向(bind)
			
事件this指向bind 利用ES5中bind方法 将事件处理程序中的this和组件实例绑定在一起 //导入react import React from 'react' ...
 - Hadoop安装学习(第二天)
			
学习任务: 1.对VMnet8进行设置 2.配置主机名,对host文件进行编辑 3.将Hadoop文件以及jdk通过Xshell7传输到Linux系统 4.设置免密登录