题目

 

面试记录

面试题搜索

  1. HTTP 的请求和响应都包含哪些内容
  2. spring的AOP的实现方式
  3. 数据库索引用的是哪种数据结构,为什么要用这个数据结构(https://blog.csdn.net/u013257679/article/details/80690521
  4. redis有哪几种数据类型
  5. 用redis 写一个一小时内登陆5次 就禁止登陆的方法,写出方法即可,不用方法名
  6. sql 查找薪水最高的一为员工的姓名,用一条sql 将表1的数据复制到表2
  7. url 访问到页面展示的过程
  8. 聚簇索引 非聚集索引   问题本质是它们结构不同,决定了他们的性质不同。
  9. hashMap的原理怎么优化
  10. jvm 调优
  11. 用两个栈实现一个队列,要求能多线程访问( 只会 单独push和pop的)

  12. refer

  13. 字符串反序
  14. finally 执行前在try 或者 catch 块中已经return的话,finally 块中再次赋值return变量不会改变retrun的值。如果在finally之后return 则返回finally块中的赋值。
  15. 面向对象
    面向对象编程:是一种编程风格或编程范式。以类或对象组织代码基本单元,并将封装、抽象、继承、多态作为代码设计和实现的基石。
    1. 封装:信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式(或者叫函数)来访问内部信息或者数据。
      需要编程语言本身提供一定的语法机制来支持。这个语法机制就是访问权限控制。private、public 等关键字就是访问权限控制语法。
    2. 抽象:封装主要讲的是如何隐藏信息、保护数据,而抽象讲的是如何隐藏方法的具体实现,让调用者只需要关心方法提供了哪些功能,并不需要知道这些功能是如何实现的。
      在面向对象编程中,我们常借助编程语言提供的接口类( interface 关键字语法)或者抽象类( abstract 关键字语法)这两种语法机制,来实现抽象这一特性。
      实际上,抽象这个特性是非常容易实现的,并不需要非得依靠接口类或者抽象类这些特殊语法机制来支持。换句话说,并不是说一定要为实现类(PictureStorage)抽象出接口类(IPictureStorage),才叫作抽象。即便不编写 IPictureStorage 接口类,单纯的 PictureStorage 类本身就满足抽象特性。
      是因为,类的方法是通过编程语言中的“函数”这一语法机制来实现的。通过函数包裹具体的实现逻辑,这本身就是一种抽象。调用者在使用函数的时候,并不需要去研究函数内部的实现逻辑,只需要通过函数的命名、注释或者文档,了解其提供了什么功能,就可以直接使用了。
      抽象有时候会被排除在面向对象的四大特性之外。抽象这个概念是一个非常通用的设计思想,并不单单用在面向对象编程中,也可以用来指导架构设计等。而且这个特性也并不需要编程语言提供特殊的语法机制来支持,只需要提供“函数”这一非常基础的语法机制,就可以实现抽象特性、所以,它没有很强的“特异性”,有时候并不被看作面向对象编程的特性之一。
    3. 继承是用来表示类之间的 is-a 关系
      从继承关系上来讲,继承可以分为两种模式,单继承和多继承。为了实现继承这个特性,编程语言需要提供特殊的语法机制来支持
      继承最大的一个好处就是代码复用。
      不过,这一点也并不是继承所独有的,我们也可以通过其他方式来解决这个代码复用的问题,比如利用组合关系而不是继承关系。
      继承的概念很好理解,也很容易使用。不过,过度使用继承,继承层次过深过复杂,就会导致代码可读性、可维护性变差。为了了解一个类的功能,我们不仅需要查看这个类的代码,还需要按照继承关系一层一层地往上查看“父类、父类的父类……”的代码。还有,子类和父类高度耦合,修改父类的代码,会直接影响到子类。
      所以,继承这个特性也是一个非常有争议的特性。很多人觉得继承是一种反模式。我们应该尽量少用,甚至不用。关于这个问题,在后面讲到“多用组合少用继承”这种设计思想的时候,我会非常详细地再讲解,这里暂时就不展开讲解了。
    4. 多态
      子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。
      多态这种特性也需要编程语言提供特殊的语法机制来实现:1.第一个语法机制是编程语言要支持父类对象可以引用子类对象。2.编程语言要支持继承。3.编程语言要支持子类可以重写(override)父类中的方法。
      对于多态特性的实现方式,除了利用“继承加方法重写”这种实现方式之外,我们还有其他两种比较常见的的实现方式,一个是利用接口类语法,另一个是利用 duck-typing 语法。不过,并不是每种编程语言都支持接口类或者 duck-typing 这两种语法机制,比如 C++ 就不支持接口类语法,而 duck-typing 只有一些动态语言才支持,比如 Python、JavaScript 等。
      多态特性能提高代码的可扩展性和复用性。
      多态也是很多设计模式、设计原则、编程技巧的代码实现基础,比如策略模式、基于接口而非实现编程、依赖倒置原则、里式替换原则、利用多态去掉冗长的 if-else 语句等等。关于这点,在学习后面的章节中,你慢慢会有更深的体会。

 

  1. 封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。它需要编程语言提供权限访问控制语法来支持,例如 Java 中的 private、protected、public 关键字。封装特性存在的意义,一方面是保护数据不被随意修改,提高代码的可维护性;另一方面是仅暴露有限的必要接口,提高类的易用性。
  2. 封装主要讲如何隐藏信息、保护数据,那抽象就是讲如何隐藏方法的具体实现,让使用者只需要关心方法提供了哪些功能,不需要知道这些功能是如何实现的。抽象可以通过接口类或者抽象类来实现,但也并不需要特殊的语法机制来支持。抽象存在的意义,一方面是提高代码的可扩展性、维护性,修改实现不需要改变定义,减少代码的改动范围;另一方面,它也是处理复杂系统的有效手段,能有效地过滤掉不必要关注的信息。
  3. 继承是用来表示类之间的 is-a 关系,分为两种模式:单继承和多继承。单继承表示一个子类只继承一个父类,多继承表示一个子类可以继承多个父类。为了实现继承这个特性,编程语言需要提供特殊的语法机制来支持。继承主要是用来解决代码复用的问题。
  4. 多态是指子类可以替换父类,在实际的代码运行过程中,调用子类的方法实现。多态这种特性也需要编程语言提供特殊的语法机制来实现,比如继承、接口类、duck-typing。多态可以提高代码的扩展性和复用性,是很多设计模式、设计原则、编程技巧的代码实现基础。

 

  1. 封装隐藏内部实现细节,提高安全性(暴露细节可能导致出现bug,如多线程,导致并发修改问题)和简化编程(不需要知道实现细节,只需要使用开放功能)
  2.   继承代码复用机制。但是注意继承是紧耦合的,父类修改方法,子类的行为也会变动。滥用继承会起到反效果。
  3.   多态重载和重写,向上转型重载:相同名字,不同参数的方法重写:相同名字,相同参数,相同返回值(返回值不同,不能通过编译)

OOP设计原则:SOLID设计模式,经典问题的总结

16.for 和foreach的区别

17.if 判断和 switch的区别

18.优化sql ,

从语句入手Select 剔除不需要的字段

From 检查是否过多的表连接,无效表连接,连接条件

where条件(查看查询计划)对索引的命中情况,为什么没有命中,命中了索引是否是Index Seek

嵌套查询有多少

查看数据库IO,物理读取(逻辑读取一般不能控制,要读取数据就得去磁盘读取),逻辑读取(优化从数据库缓存读取数据页次数)

 

表设计方面优化,字段类型,NULL字段可以给默认值,有需要的话权衡数据一致性对业务复杂度提升可以适当冗余

 19.sql 注入

 输入验证,(预)编译,参数化

posted @ 2018-12-11 10:02  vvf  阅读(149)  评论(0编辑  收藏  举报