总结一下
面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。
还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。
万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。
前端面试题汇总
public function index($p=0){
echo $p;//输出6
}
**$this->input**
输入类
是CI_Input类的实例 system/core/Input.php
CI_Input类提供方法:
t
h
i
s
−
>
i
n
p
u
t
−
>
p
o
s
t
(
′
u
s
e
r
n
a
m
e
′
)
;
/
/
this->input->post('username'); //
this−>input−>post(′username′);//_POST[‘username’]
t
h
i
s
−
>
i
n
p
u
t
−
>
s
e
r
v
e
r
(
′
D
O
C
U
M
E
N
T
R
O
O
T
′
)
;
/
/
this->input->server('DOCUMENT_ROOT'); //
this−>input−>server(′DOCUMENTROOT′);//_SERVER[‘DOCUMENT_ROOT’]
在视图中,直接用$this来访问超级对象中的属性<?php echo $this->input->server('REMOTE_ADDR')?>
**数据库访问**
修改配置文件
application/config/database.php
将数据库访问对象,装载到超级对象的属性中 $this->db
$this->load->database();
r
e
s
=
res=
res=this->db->query($sql);//返回对象
r
e
s
−
>
r
e
s
u
l
t
(
)
;
/
/
返回数组,数组中是一个一个的对象
res->result();//返回数组,数组中是一个一个的对象
res−>result();//返回数组,数组中是一个一个的对象result->id
r
e
s
−
>
r
e
s
u
l
t
a
r
r
a
y
(
)
;
/
/
返回二维数组,里面是关联数组
res->result_array();//返回二维数组,里面是关联数组
res−>resultarray();//返回二维数组,里面是关联数组result[‘id’]
$res->row()//返回第一条数据,直接是一个对象
参数绑定
$sql=“select * from blog_user where name=?”;
t
h
i
s
−
>
d
b
−
>
q
u
e
r
y
(
this->db->query(
this−>db−>query(sql,$name);//如果有多个问号时,需要传入一个索引数组
表前缀
$db[‘default’][‘dbprefix’] = ‘blog_’;
$db[‘default’][‘swap_pre’] = ‘blog_’;
配置为一样,代码中,直接硬编码表前缀就行了,如果以后项目数据库表前缀发生变化,
只需要修改$db[‘default’][‘dbprefix’] = ‘new_’;代码中的blog_会自动替换为new_
db的自动加载
application/config/autoload.php
a
u
t
o
l
o
a
d
[
′
l
i
b
r
a
r
i
e
s
′
]
=
a
r
r
a
y
(
′
d
a
t
a
b
a
s
e
′
)
;
不需要:
autoload['libraries'] = array('database'); 不需要:
autoload[′libraries′]=array(′database′);不需要:this->load->database();
自增id
$this->db->insert_id();
受影响行数
$this->db->affected_rows();
**Active Record**
1.application/config/database.php
$active_record = TRUE;
2.application/config/autoload.php
$autoload[‘libraries’] = array(‘database’);
3.在配置文件中,配置表前缀后,会自动添加
r
e
s
=
res=
res=this->db->get(‘表名’);//返回结果集对象
$res->result();
b o o l = bool= bool=this->db->insert(‘表名’,关联数组);
b o o l = bool= bool=this->db->update(‘表名’,关联数组,条件);
b o o l = bool= bool=this->db->delete(‘表名’,条件);
//select id,name from tableName where id>=3 order by id desc limit 2,3
r
e
s
=
res=
res=this->db->select(‘id,name’)
->from(‘user’)
->where(‘id >=’,3)
->limit(3,2)//跳过2条,取出3条数据
->order_by('id desc ')
->get();
//显示最近一条SQL
echo $this->db->last_query();
//where
//
r
e
s
=
res=
res=this->db->where(‘name’,‘mary’)->get(‘user’);
//
r
e
s
=
res=
res=this->db->where(‘name !=’,‘mary’)->get(‘user’);
//
r
e
s
=
res=
res=this->db->where(array(‘name’=>‘mary’))->get(‘user’);
//
r
e
s
=
res=
res=this->db->where(array(‘name’=>‘mary’,‘id >’=>2))->get(‘user’);
复杂的查询,请用 t h i s − > d b − > q u e r y ( this->db->query( this−>db−>query(sql,$data);//使用问号绑定参数
**扩展CI控制器**
application/core/MY_Controller.php
控制器就要以继承自MY_Controller
可以在自定义的控制器中扩展一些类。
application/config/config.php
$config[‘subclass_prefix’] = ‘MY_’;
**模型**
继承自CI_Model
在模型中,可以直接使用超级对象中的属性
文件名,全小写
类名首字母大写
建议使用_model作为后缀,防和控制器类名冲突
控制器要什么数据,model就写一个方法,model提供数据。
**url相关函数**
t h i s − > l o a d − > h e l p e r ( ′ u r l ′ ) ; / / 可以根需要配置自动加载 / / a p p l i c a t i o n / c o n f i g / a u t o l o a d . p h p / / this->load->helper('url'); //可以根需要配置自动加载 //application/config/autoload.php // this−>load−>helper(′url′);//可以根需要配置自动加载//application/config/autoload.php//autoload[‘helper’] = array(‘url’);
site_url(‘控制器/方法’)
base_url()//index.php的主入口。
**路由**
application/config/routes.php
//默认控制器
$route[‘default_controller’] = “welcome”;
//http://localhost/ci/index.php/news/201309/4.html
$route[‘news/[\d]{6}/([\d]+).html’]=‘article/show/$1’;
**隐藏入口文件**
开始apache的rewrite模块,在httpd.conf文件中
LoadModule rewrite_module modules/mod_rewrite.so
重启apache
在入口文件同级目录中,放入一个.htaccess文件
内容如下:
**分页**
//装载类文件
$this->load->library(‘pagination’);
$this->load->helper(‘url’);
//每页显示10条数据
$page_size=10;
$config[‘base_url’] =site_url(‘user/test’);
//一共有多少条数据
$config[‘total_rows’] = 100;
//每页显示条数
$config[‘per_page’] = $page_size;
$config[‘first_link’] = ‘首页’;
$config[‘next_link’] = ‘下一页’;
$config[‘uri_segment’]=3;//分页的数据查询偏移量在哪一段上
t h i s − > p a g i n a t i o n − > i n i t i a l i z e ( this->pagination->initialize( this−>pagination−>initialize(config);
o
f
f
s
e
t
=
i
n
t
v
a
l
(
offset=intval(
offset=intval(this->uri->segment(3));//与$config[‘uri_segment’]对应
$sql=“select * from blog_user limit $offset, $page_size”;
echo $sql;
d a t a [ ′ l i n k s ′ ] = data['links']= data[′links′]=this->pagination->create_links();
t h i s − > l o a d − > v i e w ( ′ u s e r / t e s t ′ , this->load->view('user/test', this−>load−>view(′user/test′,data);
**文件上传**
1.手动创建好上传目录
//上传目录需要手工创建
$config[‘upload_path’]=‘./uploads/’;
//允许
$config[‘allowed_types’]=‘gif|png|jpg|jpeg’;
$config[‘max_size’] = ‘10000’;
//生成新文件名
$config[‘file_name’]=uniqid();
//装载文件上传类
t
h
i
s
−
>
l
o
a
d
−
>
l
i
b
r
a
r
y
(
′
u
p
l
o
a
d
′
,
this->load->library('upload',
this−>load−>library(′upload′,config);
$this->upload->do_upload(‘pic’);
var_dump($this->upload->data());
//获取上传之后的数据
d
a
t
a
=
data=
data=this->upload->data();
echo $data[‘file_name’];
**验证码**
//生成一个随机不重复的字符串作为加密用的key
//保存到application/config/config.php
//$config[‘encryption_key’] = ‘adb8bf6d0ac4e17b42a80941582497a4’;
//echo md5(uniqid());exit;
$this->load->library(‘session’);
u
s
e
r
=
a
r
r
a
y
(
′
i
d
′
=
>
3
,
′
n
a
m
e
′
=
>
′
j
a
c
k
′
)
;
/
/
s
e
s
s
i
o
n
s
t
a
r
t
(
)
;
/
/
user=array('id'=>3,'name'=>'jack'); //session_start(); //
user=array(′id′=>3,′name′=>′jack′);//sessionstart();//_SESSION[‘user’]=$user;
t
h
i
s
−
>
s
e
s
s
i
o
n
−
>
s
e
t
u
s
e
r
d
a
t
a
(
′
u
s
e
r
′
,
this->session->set_userdata('user',
this−>session−>setuserdata(′user′,user);
//不在这这里获取刚放入的数据
//只有页在从新加载或跳转到别的url中,才能获取到
//一次性的数据,只能读取一次
$this->session->set_flashdata('test','aaaaaaaaaaaaaa');
}
public function show_session(){
$this->load->library('session');
//取CI session中的数据
$user=$this->session->userdata('user');
var_dump($user);
//下次刷新,就没有了
$test=$this->session->flashdata('test');
echo $test;
}
**表单验证**
$this->load->library(‘form_validation’);
$this->form_validation->set_rules('name', '用户名', 'required');
$this->form_validation->set_rules('email', '邮箱', 'valid\_email');
$bool=$this->form_validation->run();
if($bool){
//调用模型保存到数据库
}else{
//显示错误信息
$this->load->view('user/add');
}
<?php echo validation_errors();?>
<form action="<?php echo site\_url('user/insert');?>" method="post">
name <input type="text" name="name" value="<?php echo set\_value('name')?>" />
<?php echo form_error('name','<span>','</span>')?>
<br>
password <input type="password" name="password" /><br>
email <input type="text" name="email" value="<?php echo set\_value('email')?>" />
<?php echo form_error('email')?>
<br>
<input type="submit" value="submit" />
</form>
//生成一个随机不重复的字符串作为加密用的key
//保存到application/config/config.php
//$config['encryption\_key'] = 'adb8bf6d0ac4e17b42a80941582497a4';
//echo md5(uniqid());exit;
$this->load->library('session');
$user=array('id'=>3,'name'=>'jack');
//session\_start();
//$\_SESSION['user']=$user;
$this->session->set_userdata('user',$user);
//不在这这里获取刚放入的数据
//只有页在从新加载或跳转到别的url中,才能获取到
//一次性的数据,只能读取一次
$this->session->set_flashdata('test','aaaaaaaaaaaaaa');
}
public function show\_session(){
$this->load->library('session');
//取CI session中的数据
$user=$this->session->userdata('user');
var_dump($user);
//下次刷新,就没有了
$test=$this->session->flashdata('test');
echo $test;
}
表单验证
$this->load->library('form\_validation');
$this->form_validation->set_rules('name', '用户名', 'required');
$this->form_validation->set_rules('email', '邮箱', 'valid\_email');
$bool=$this->form_validation->run();
if($bool){
//调用模型保存到数据库
}else{
//显示错误信息
$this->load->view('user/add');
}
<?php echo validation_errors();?>
<form action="<?php echo site\_url('user/insert');?>" method="post">
name <input type="text" name="name" value="<?php echo set\_value('name')?>" />
<?php echo form_error('name','<span>','</span>')?>
<br>
password <input type="password" name="password" /><br>
email <input type="text" name="email" value="<?php echo set\_value('email')?>" />
<?php echo form_error('email')?>
<br>
<input type="submit" value="submit" />
</form>
**最终user.php**
<?php class User extends CI\_Controller{ //连接数据库操作 public function showusers(){ //1.装载数据库操作类 $this->load->database();//可以传参,表示连接哪个数据库,在配置中配置多个数据库即可。 //装载成功后,可以用$this->db; //var\_dump($this->db); $sql = 'select \* from users'; $res = $this->db->query($sql);//msql\_query(); //var\_dump($res); $users = $res->result();//返回对象数组; //echo "
"; //var\_dump($users); // mysql\_fetch\_assoc(result);//关联数组 // mysql\_fetch\_object(result);//返回对象 // 在页面中将数据带过去 $data['user\_list'] = $users; $this->load->view('user/showusers',$data); } public function add(){ $this->load->database(); $sql = "insert into users (id,name,password,age,sex) values (5,'xiao','34234',23,'男')"; $bool = $this->db->query($sql); if($bool){ //mysql\_affected\_rows(); echo "受影响的行数:".$this->db->affected\_rows(); echo "自增id为:".$this->db->insert\_id(); } } public function insert(){ $data['id'] = 6; $data['name'] = 'guo'; $sql = "insert into users (id, name) values(?,?)"; $bool = $this->db->query($sql,$data); if($bool){ //mysql\_affected\_rows(); echo "受影响的行数:".$this->db->affected\_rows(); echo "自增id为:".$this->db->insert\_id(); } } //AR模型简化操作 public function get(){ //查询 // $res = $this->db->get('users'); // foreach ($res->result() as $item) { // echo $item->name; // echo "
"; // } //增加 /\*$data = array( 'id'=>8, 'name'=>'xiaoxiao', 'sex'=>'男' ); $bool = $this->db->insert('users',$data); var\_dump($bool);\*/ //改 /\*$data = array( 'name'=>'果果', 'sex'=>'女', 'age'=>44 ); $bool = $this->db->update('users',$data,array('id'=>1)); var\_dump($bool);\*/ //删 // $bool = $this->db->delete('users',array('id'=>0)); // var\_dump($bool); // select id, name, age,sex,from users where id <=5 order by id desc limit 2,3; $res = $this->db->select('id','name','age','sex') ->from('users') ->where('id <=5') ->order\_by('id desc') ->limit(3,2) ->get(); var\_dump($res->result()); } // private function \_test(){ // echo "string"; // } public function index(){ //$this->\_test(); // $this->load->view('user\_index'); $list = array( array('id'=>1, 'name'=>'xiao', 'email'=>'xiao@gmail.com'), array('id'=>2, 'name'=>'guo', 'email'=>'guo@gmail.com'), array('id'=>3, 'name'=>'ping', 'email'=>'ping@gmail.com'), ); //标量分配,在视图中直接可以$title.获得变量 //$this->load->vars('title','这是标题'); $data['title'] = '这是标题'; //分配多个变量 $data['list'] = $list; #### 总结 * 对于框架原理只能说个大概,真的深入某一部分具体的代码和实现方式就只能写出一个框架,许多细节注意不到。 **[开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】](https://bbs.csdn.net/topics/618166371)** * 算法方面还是很薄弱,好在面试官都很和蔼可亲,擅长发现人的美哈哈哈...(最好多刷一刷,不然影响你的工资和成功率????) * 在投递简历之前,最好通过各种渠道找到公司内部的人,先提前了解业务,也可以帮助后期优秀 offer 的决策。 * 要勇于说不,对于某些 offer 待遇不满意、业务不喜欢,应该相信自己,不要因为当下没有更好的 offer 而投降,一份工作短则一年长则 N 年,为了幸福生活要慎重选择!!! ![](https://img-blog.csdnimg.cn/img_convert/41a409bca685b4ea0e0aa1a5589c3e09.png) 第一次跳槽十分忐忑不安,和没毕业的时候开始找工作是一样的感受,真的要相信自己,有条不紊的进行。**如果有我能帮忙的地方欢迎随时找我,比如简历修改、内推、最起码,可以把烦心事说一说**,人嘛都会有苦恼的~ 祝大家都有美好的未来,拿下满意的 offer。