3.31串讲
Posted 今天你学Java了吗
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了3.31串讲相关的知识,希望对你有一定的参考价值。
3.31串讲 面向对象
文章目录
什么是对象、类:
- 类:是对具有相同特性事物的抽象;在java中Class就是类,类是有属性(成员变量)和方法
- 对象:对象是类的具体实例
类是一个抽象的概念,把组成的抽象叫属性,把行为的抽象叫方法
面向对象,面向过程
- 面向对象:一切皆对象,注重结果
- 面向过程:一切皆方法,注重过程
面向对象特征
- 封装:
- 属性私有化,提供公开的getter、setter方法,
- 安全性,可以不用在意具体实现细节
- 继承:
- extends
- java中是单继承,但可以多层继承
- 一个类只能继承一个类
- 所有类都有父类,如果没有看到 extends,它的父类就是 Object
- 代码复用
- 多态:
- 同一个事物在不同环境下表现出不同的形态
- 行为(方法)的多态:
- Override 重写/覆盖
- Overload 重载
- 对象的多态:
- 父类 f = new 子类;
- 父接口 f = new 实现类;
- 条件:继承或实现的关系,从左到右:has a;从右到左:is a 关系
- 抽象:
- abstract
- 不容易出错
接口&抽象类
- 抽象类:特殊的类,类名前用abstract 修饰
- 抽象类不一定有抽象方法,有抽象方法的类必须是抽象类
- 抽象类不能实例化,必须通过子类继承后来new 对象
- 接口:特殊的抽象类,用 interface 修饰
- 接口中的方法都是 public abstract 修饰的,所以默认省略这两个关键字
- 接口中的变量都是常量
- 类和接口之间可以多实现,接口与接口之间可以多继承
- 在有继承和实现的情况下,先继承后实现
构造方法/构造器
- 特点:与类名一致,没有返回值类型,也不写void
- 作用:创建对象,给属性赋值,初始化
- 一个类中可以有多个构造方法,如果不写,系统默认提供一个无参构造方法,如果写了构造方法,系统不在默认提供,写了有参构造方法,建议加上无参构造,因为继承时子类会默认调用父类的无参构造方法
- 构造方法之间相互调用,使用 this(xxx),并且必须放在构造方法的第一行,只能调用一次
关键字
- this:当前对象
- this.XXX 调用本类的属性
- this(XXX) 调用本类的其他构造方法,,必须放在构造方法第一行
- super:
- super.XX调用父类的属性
- super(XXX)调用父类的构造方法,,必须放在构造方法第一行
- static
- 静态的
- 静态方法、静态内部类、静态变量、静态代码块
- 属于类的成员
- 一个类只有一份,所有对象共享
- final
- 最后的,最终的
- 修饰变量:赋值后不能被修改
- 修饰方法:方法不能被重写
- 修饰类:类不能被继承
- instanecof 判断对象类型转换
修饰符
访问修饰符 | 本类 | 同包 | 派生类 | 其他 |
---|---|---|---|---|
private | √ | × | × | × |
默认 | √ | √ | × | × |
protected | √ | √ | √ | × |
public | √ | √ | √ | √ |
内部类
- 匿名内部类
- 成员内部类
- 局部内部类
- 静态内部类
枚举 Enum
- 用来定义一组常量,对象数目固定,不可随便造
- 季节、月份、星期
重载和重写
- 重载:
- 发生在同一个类中
- 方法同名不同参
- 重写:
- 发生在父子类中
- 子类方法与父类方法关系:两同两小一大
- 方法名相同、参数列表相同
- 返回值类型小于等于父类、抛出异常小于等于父类
- 访问修饰符大于大于父类
父子类方法调用关系
父子类之间的方法有以下关系:
- 父类中有,子类中没有:调用父类的
- 父类中有,子类中也有:调用子类的重写后的方法
- 父类中没有,子类中有:子类特有方法需要强转后调用
串讲-crm项目
注意:只有必答题部分计算分值,补充题不计算分值。
第一部分 必答题
注意:除第四题4分以外,其他题均每题3分。
-
写出常用的bootstrap的样式。
栅格系统
<body>
<div class="container">
<div class="row">
<div class="col-md-1>1</div>
<div class="col-md-2>2</div>
<div class="col-md-3>3</div>
<div class="col-md-4>4</div>
<div class="col-md-2>2</div>
</div>
</div>
</body>
?
表格
?
<table class="table">
...
</table>
?
表单
?
<form class="form-horizontal">
<div class="form-group">
<label for="inputEmail3" class="col-sm-2 control-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
<div class="form-group">
<label for="inputPassword3" class="col-sm-2 control-label">Password</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Password">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<div class="checkbox">
<label>
<input type="checkbox"> Remember me
</label>
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-default">Sign in</button>
</div>
</div>
</form>
?
按钮
<!-- Standard button -->
<button type="button" class="btn btn-default">(默认样式)Default</button>
?
<!-- Provides extra visual weight and identifies the primary action in a set of buttons -->
<button type="button" class="btn btn-primary">(首选项)Primary</button>
?
<!-- Indicates a successful or positive action -->
<button type="button" class="btn btn-success">(成功)Success</button>
?
<!-- Contextual button for informational alert messages -->
<button type="button" class="btn btn-info">(一般信息)Info</button>
?
<!-- Indicates caution should be taken with this action -->
<button type="button" class="btn btn-warning">(警告)Warning</button>
?
<!-- Indicates a dangerous or potentially negative action -->
<button type="button" class="btn btn-danger">(危险)Danger</button>
?
<!-- Deemphasize a button by making it look like a link while maintaining button behavior -->
<button type="button" class="btn btn-link">(链接)Link</button> -
什么是响应式布局?
一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本
-
请通过jQuery发送ajax请求。
$.ajax({
‘url‘:‘/calc/‘,
‘type‘:‘post‘,
‘data‘:{
‘k1‘:$(‘[name="i1"]‘).val(),
‘k2‘:$(‘[name="i2"]‘).val(),
},
success:function (ret) {
$(‘[name="i3"]‘).val(ret)
}
}) -
JavaScript与this相关的面试题(4分)
name = ‘老男孩‘;
?
info = {
name:‘alex‘,
age:123,
func:function(){
console.log(this.name);
}
}
?
info.func()
?
老男孩name = ‘老男孩‘;
?
info = {
name:‘alex‘,
age:123,
func:function(){
console.log(this.name);
function f1(){
console.log(this.name);
}
f1()
}
}
?
info.func()
老男孩 Alexname = ‘老男孩‘;
?
info = {
name:‘alex‘,
age:123,
func:function(){
console.log(this.name);
(function(){
console.log(this.name);
})()
}
}
?
info.func()
老男孩 老男孩name = ‘老男孩‘;
?
info = {
name:‘alex‘,
age:123,
func:function(){
console.log(this.name);
var xxx = this;
(function(){
console.log(xxx.name);
})()
}
}
?
info.func()
老男孩 Alex -
什么是跨域?如何解决?
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
?
使用代理 -
简述你对Http协议的理解?
http协议是一种应用层超文本传输协议 默认端口 80 无状态: 每次请求都是独立的, 两个请求之间没有联系, 但是会引入 Cookie 和 Session 机制来关联请求 无连接:服务端收到客户端请求后, 响应完成并收到客户端的应答之后, 立即断开连接 HTTP连接7步骤 1.建立tcp/ip连接 (3次握手) 2.客户端向服务端发送HTTP请求 3.客户端发送请求头信息,请求内容,最后会发送一行空白,表示客户端发送完毕 4.服务器做出应答 5.服务器向客户端发送应答头信息 6.服务端发送应答头信息,应答内容,最后会发送一行空白,表示服务端发送完毕 7.服务端关闭tcp连接(4次挥手)
-
简述你对Https协议的理解?
默认端口号是 443 客户端请求 https 连接, 服务器收到请求后会把证书信息(包含公钥和签名) 返回给客户端 客户端会校验这个证书签名的有效性从而获取到公钥 客户端随机生成会话密钥(对称加密), 然后利用证书里面的公钥将会话密钥加密, 连同加密后的内容传送给服务端 服务器利用私钥解密出会话密钥, 然后解密出内容 服务端利用会话密钥通信
-
列举常见的http请求头及作用?
Accept: 浏览器可以接受的 MIME 类型 Accept-Encoding:浏览器支持的编码类型 Accept-Language: 浏览器支持的语言 Content-Length : 请求消息的正文长度 Content-Type : 客户端接受服务器返回的文件类型 User-Agent : 请求的用户信息, 浏览器类型 Host : 给出接受请求的服务器主机名和端口号
-
列举常见的http请求方法及作用?
GET 、POST 、HEAD、PUT、DELETE、OPTIONS GET: 可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。 HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。 PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。 DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。 POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。 OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。
-
列举常见的http响应状态码。
1xx : 临时响应, 需要请求者继续执行操作 2xx: 成功处理了请求的状态码 3xx : 如果要完成请求, 需要进一步操作, 重定向 4xx : 请求出错 5xx: 服务器内部错误
-
http中
connections:keep-alive
的请求头的作用?因为HTTP是无状态的,connections记录了个人信息,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的TCP连接。但是Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
-
django请求生命周期?
客户端发送请求 经过中间件找到url 根据请求URL在路由系统查询相应的视图函数 视图函数根据调用数据库获取相应数据 视图函数根据模板渲染生成页面 返回客户端
-
什么是wsgi?
WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。WSGI一开始是在PEP-0333中定义的,最新版本是在Python的PEP-3333定义的。
-
什么是MVC ?什么是MTV?
mvc 1.模型层: model 负责业务对象和数据库的对象(ORM)的映射 2.视图层 views 负责与用户的交互(书写逻辑) 3.控制器 Controller 完成用户对模型层和视图层调用,来完成用户的请求 mtv 1.模型层: model 负责业务对象与数据库的对象(ORM)的映射 2.模板层 Template 负责如何把页面展示给用户(html) 3.视图层: View 负责业务逻辑,并在适当的时候调用Model和Template
-
django中间件作用以及应用场景?
作用:在request和response之间的一道处理过程,用于全局范围改变django输入和输出 应用场景:比如博客园你需要登录才能发表博客,在你每次访问博客园或刷新的时候中间件判断你有没有登录,避免了每次刷新都要登录一遍
-
django中FBV和CBV有什么区别?
-
FBV 再视图里使用函数处理请求
-
CBV 再视图里使用类处理方法
-
-
django orm中如何批量创建数据?
-
django 如何执行原生SQL?
-
django的orm如何查询id不等于5的数据。
-
cookie和session的区别?
-
cookie 保存在浏览器缓存中,关闭浏览器就失效
-
session 保存在数据库中,只要不删除,在设定的有效期内一直有效
-
-
django的orm中on_delete的作用?
-
级联
-
models.CASCADE 级联删除 当关联表中的数据删除时,该外键也删除
-
models.SET_NULL 置空 当关联表中的数据删除时,该外键置空,当然,你的这个外键字段得允许为空,null=True
-
models.SET_DEFAULT 设置默认值 删除的时候,外键字段设置为默认值,所以定义外键的时候注意加上一个默认值。
-
-
描述crm有哪些功能?
-
公户转私户(批量)
-
私户转公户(批量)
-
创建班级
-
创建课程
-
跟进记录
-
权限管理
-
-
crm中什么是公户?什么是私户?为什么要做这个区分?
-
公户 就是没有销售跟进的,私户就是有销售正在跟进
-
因为销售在选人的时候不知道有谁已经被别的销售选过了,重复挑选
-
-
请列举出CRM系统中的表。
-
部门表
-
用户表
-
客户表
-
校区表
-
班级表
-
跟进记录表
-
报名表
-
缴费记录表
-
课程记录表
-
学习记录表
-
-
对数据库的数据做展示时,不同字段类型有不同的展示方法,分别是什么?
-
请详细说说你们公司销售是如何使用CRM的。
-
CRM中有哪些技术点?
-
为什么不用现成的crm而是自己去开发?
-
请简述实现权限控制的流程。
-
列举权限有多少张表?表中都有那些字段?
-
为什么要把权限信息放到session中?权限信息放到session有什么优缺点?
-
权限控制到按钮级别是如何实现的?
-
如何实现把权限粒度控制到数据行?
第二部分 补充题
-
详细描述是jsonp实现机制?
-
django的orm如何通过数据自动化生成models类?
-
django中如何设置缓存?
-
django中信号的作用?
-
django中如何设置读写分离
以上是关于3.31串讲的主要内容,如果未能解决你的问题,请参考以下文章