• 随便扯扯东北师大的面试


    昨天跑到东北师大招聘会面试, 一位面试官问我:"说说C#中的属性, 严格来讲应该是特性"

    东北师大昨天有个大型的招聘会, 今天吉大有, 今天的这个我没去, 说说昨天的经历吧。总的来说吧, 计算机的方面的真多, 我同学还听见有人尴尬说, 当初学计算机就好, 找工作也不会这么愁了, 作为计算机的, 说句公道话, 计算机专业的就是找工作的时候机会多而已, 但是走技术路线要求也是很高的, 先不说学历(昨天有个公司的应聘人员清一色研究生...我同学跑过去了, 问了两句, 看了下应聘人员名单, 就走了, 有点尴尬, 因为那些都是2清一色的计算机研究生硕士学位...), 其次就是技术能力了, 讲真, 计算机的这个专业, 没有技术真混不开, 说白了一句话, 你需要学到老学到老, 因为技术变革太快了, 你需要掌握的很多, 单单是语言就需要掌握多个语言, 没有一个程序员是只会一门语言的, 其次就是广度与深度了, 尽管现在框架满天跑, 但是讲真, 光会用真没有, 你需要的就是了解底层, 而且你觉得你真会用那些框架? 而且一个框架是远远不够的, 一言不合就是三四个框架。哎, 废话太多, 总而言之一句话, 计算机其实也不好找工作, 只是机会多.

    扯淡完了, 说正题吧, 我找了一家专门搞asp.net的公司, 为什么说专门呢!我特意问了下, 他们用不用asp.net core, 一句话, 我们现在的产品不需要跨平台*-*, 这家公司有点靠谱(最起码比我投简历的前两家靠谱, 因为是一个懂技术的人来面试, 估计是个技术主管, 因为他的年纪比我爸还大, 其余的企业都是女HR, 长得一般吧, 没有我在武汉实习那家公司的女HR漂亮)。一来就问我C#中的一些好用的特性, 我有半年没用c#了, 一直在学python, 我原本打算面python的, 结果140家没有一家招python, 我也是很无奈, 能回答出来都是靠自己大二大三的积累, 讲真, 还好当初好好学了点, 但是也忘了很多重要的. 随后再说。凭记忆我说了lambda表达式, async/await, 还有我忘了...说完了C#的一些好用的特性(类似语法糖), 我装了下逼, 反正那位和蔼的老叔叔(他实在太和蔼了, 说话轻声细语的, 很好听*.*, 而且有些许白发)也不懂python, 我就对比了下两者, 也算是个加分点吧(面试一开始我就说了, 我原本打算面python的, 好久没用C#了, 比较生疏, 他说没事没事, 想说啥说啥, 我就不客气了*-*), 数据结构是必须的, 问了我快排, 我之前学设计模式之策略模式的时候, 看到资料上说asp.net的排序算法是用策略模式进行设计的, 哎, 说到这个真无奈啊, 我当时忘了是啥设计模式了, 就没有说到这个点。他问的也比较笼统, 我也没有怎么说, 然后还有其他的一些, 我完全凭印象说的, 随后就是我们文章的重头戏了, "你觉得C#中的属性, 严格来讲应该是特性, 有什么用, 你用过吗?" 我当然用过了, 但是我当时忘了, 因为一开始我听成了属性, 就扯淡说C#2.0属性定义比较麻烦, get, set设置还得引入第三个变量, C# 3.0之后就直接一个花括号里面加个get;set就行, 这就是一个属性, 等我说完, 他说不是属性, 是特性。 这个我还真懂!当初特意研究了这个, asp.net mvc框架的过滤器其实就是特性的一种, 我写了一篇文章<<ASP.NET MVC Filter的思考 >> <<Attribute在.net编程中的应用(二)>>我当初还一边摸着头一边研究这玩意(因为序列化就是基于特性attribute的), 写的有点抽象, 研究起来有点难...我还思考了下asp.net中AOP, 其实可以理解为attribute, 哎, 这些都没有说出来, 因为我忘了o(╥﹏╥)o, 然后就没有答上来, 技术问完之后, 我扯淡了一会, 问了下他们的项目之类的, 他说部署在微软云上, 本来就对azure感兴趣, 因此深入问了下他一些, 还扯了一些自己的思考问题, 聊得还行吧, 他们的SQL SERVER是2014版本的, 我就顺嘴问了句, 对比Oracle怎么样, 我说其实现在的SQL SERVER不比oracle差, 很巧, 看法一样, 说了一些相关的, 哦, 对, 他问我, 关键词检索你会怎么做, 我说sql模糊查询 + 缓存(memcached) + C#代码优化(比如string类型少用之类的), 明显回答不好, 我也就能想到这些了, 不可能像百度, 谷歌搜索那样有专门的算法, 其实应该有, 只不过没有不是那么大的算法, 关于这个我特意问了下我专业算法科老师, 回头和她讨论下, 这是个很不错的老师!博客园的搜索就做的很不错, 不知道是什么思路, 除去最基本的sql模糊查询, 缓存之外还有啥?总的来说, 应该有一个很好的设计思路(也算是算法吧), 不知道是怎么样的?C#不比Python, C# 的搜索库不怎么了解, python就光说词云处理就有好几个库, 搜索的库也有好几个库, 关键词搜索说白了, 先是断句, 随后选择关键的词去sql查询, 断句就是一个算法, 这也是最基本的, 搜索结果很大程度上取决于这个断句, 而Python做词云处理很不错, 库多啊, C#不了解了,哎, 这些当时都没有说o(╥﹏╥)o

    这次面试感觉不好, 没想到不招python, asp.net面试准备不足, 全是靠自己大二大三的积累, 加上比较紧张, 一些基本的没有想起来, 哎...还是基础不扎实, 面试的确就是面基础 + 一定的自我思考。东北师大不错, 环境, 学习氛围, 有点想考研了, 读个真正的好学校....我朋友还加了一句, 东北师大女生穿衣风格和气质都和普通院校不一样,挺漂亮的, 有知性美...我一脚踹过去了,说了一句死胖子。

    回到C#代码上:

    [你必须知道的.NET] 第三回:历史纠葛:特性和属性

     /*
         特性就是为目标元素, 可以是数据集, 模块, 类, 属性, 方法, 甚至是函数参数等加入附加信息, 类似于注释, 但是可以在运行期间以反射的方式获得。
         * 特性主要应用在序列化, 编译器指令, 设计模式, ORM等方面
         */
        [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method,
            Inherited = true)]
        public class MyselfAttribute : System.Attribute
        {
            public string Name { get; set; }
    
            public int Age { get; set; }
    
            public string Memo { get; set; }
    
            public MyselfAttribute()
            {
            }
    
            public MyselfAttribute(string name, int age)
            {
                Name = name;
                Age = age;
            }
    
            public void ShowName()
            {
                Console.WriteLine("Hello, {0}", Name == null ? null : "world.");
            }
        }
    
        [MyselfAttribute("Ryan", 22)]
        public class mytest
        {
            [MyselfAttribute("Ryan", 22)]
            public void SayHello()
            {
                Console.WriteLine("Hello, asp.net ");
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                //mytest test = new mytest();
    
                //test.SayHello();
    
    
                Type tp = typeof(mytest);
    
                //获取成员方法的反射信息
                MemberInfo methof_info = tp.GetMethod("SayHello");
    
                MyselfAttribute myAttribute = (MyselfAttribute)Attribute.GetCustomAttribute(methof_info, typeof(MyselfAttribute));
    
                if (myAttribute != null)
                {
                    Console.WriteLine("你查看的是{0}的反射信息", methof_info.Name);
                    Console.WriteLine("Name: {0}", myAttribute.Name);
    
                    Console.WriteLine("Age: {0}", myAttribute.Age);
    
                    Console.WriteLine("Memo of {0} is {1}", myAttribute.Name, myAttribute.Memo);
    
                    myAttribute.ShowName();
                }
    
                //获取类的反射信息
                MemberInfo info = tp;
    
                MyselfAttribute class_myAttribute = (MyselfAttribute)Attribute.GetCustomAttribute(info, typeof(MyselfAttribute));
    
                if (class_myAttribute != null)
                {
                    Console.WriteLine("你查看的是{0}的反射信息", info.Name);
                    Console.WriteLine("Name: {0}", class_myAttribute.Name);
    
                    Console.WriteLine("Age: {0}", class_myAttribute.Age);
    
                    Console.WriteLine("Memo of {0} is {1}", class_myAttribute.Name, class_myAttribute.Memo);
    
                    class_myAttribute.ShowName();
                }
    
                Console.Read();
            }
        }
  • 相关阅读:
    TreeSelect组件:vmodel语法糖进行父子组件传值案例
    带 icon 的输入框:slot方式。slot="prefix"和slot="suffix"
    双向绑定vmodel与单向绑定vbind:value
    使用Set集合对List集合去重
    前端报错: error in ./src/assets/fonts/iconfont.svg?t=1523541245904,Module parse failed: Unexpected token (1:0),vue.config.js中引入chainWebpack后报错
    当主键不是id时,而是其他字段,那么该字段要加上@Id注解(除了表中指定主键,实体类中也要用@Id指定主键)
    java将文件转为base64字符串和将base64字符串转为文件
    父组件向子组件传递getList方法:provide/inject
    带卡片的input输入框
    C#中使用#if DEBUG
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/7586920.html
Copyright © 2020-2023  润新知