在面试准备中总结的一些面试题

本文深入探讨了单例模式、Redis与Memcache的区别、session与cookie的工作原理、MySQL主从复制机制、负载均衡策略、MySQL事务回滚机制、git与svn的不同之处、MySQL优化技巧、接口安全验证方法、静态与伪静态页面的区别以及Linux进程管理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.单例模式
单例模式的特点是三私一公
三私分别是:私有的静态成员属性,私有的构造方法,私有的克隆方法
私有的成员属性是:保存类的唯一实例
私有的构造方法是:
防止外部程序new一个对象从而失去单例的意义
私有的克隆方法:
防止对象被克隆。
使用单例模式的场景:
大家都知道想调用一个类,必须用到new,但是每次new都会耗费内存资源以及系统资源,并且每次打开和关闭数据库都是对数据库的一种巨大的考验,所以单例模式会经常用到数据库操作中。
2.redis与memcache的异同
memcache运行速度快,并且便于水平扩展,它是把数据存到内存中,每个value值最大限制是2M。
redis是支持持久化缓存,而且也支持缓存多种数据结构,例如:资源型,set,zset,list,哈希,每个value值最大限制是1G,并且是存在磁盘上的,开机关机后可以再次使用,操作都是原子性的,并且可以支持多数据库。
3,session与cookie
每个cookie最多可以存4K,cookie是存在客户端的
Session对象没有对存储的数据量的限制,其中可以保存更为复杂的数据类型,session是存在服务器的
sessionid是存在cookie里面的
4.mysql的主从复制:
从数据库会产生两个线程,一个是I/O线程,另一个是mysql线程
i/o会去请求主数据库的belog日志,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
5.session共享
session共享是因为负载均衡而产生的一种方法,为什么呢。为什么负载均衡是至少二个服务器相互运行,从而造成了session的一方不存在的现象,所以便产生了session共享。
session共享可以分为三种方法,一种是将session存到数据库中,一种是将session存到redis中,另一种则是存到cookie里。
6.支付宝即时到账
支付宝即时到账的最大的特点:便是有两个通知,一个是异步通知,另一个则是同步通知。
同步通知则是前台所显示的一些效果,例如页面显示支付成功等一些通知。
异步通知则是在后台删除库存等一些数据操作。
具体操作以及说明支付宝文档和SDK也有明确写明。
7.负载均衡
负载均衡分为四种:
一种是DNS负载均衡
一种是软负载均衡
一种是硬件负载均衡
一种nginx负载均衡
DNS负载均衡是一种最常见,最简单的负载均衡了,它是按地理级别形成的一种负载均衡
它的优点是:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;
它的缺点就是:太过耗费IP资源,可能会造成用户访问网址失败。
软负载均衡(不再做详细介绍,自己去查资料)
硬件负载均衡
优点:性能高于软件,并且安全系数较高,而且较为稳定
缺点:就是价格太贵了
nginx负载均衡
Ngnix是一款轻量级的Web服务器/反向代理服务器
nginx负载均衡有常见的几种策略:
            轮询
            加权轮询
            ip_hash
            least_conn  最少连接
8.抽象类与接口类
抽象类与接口类都不能被直接实例化
抽象类只能通过继承使用,并且抽象类里面定义的一些方法,在子类中必须实现。
抽象类的关键字是abstract(定义抽象类),extends(继承)
接口呢,接口要通过implements操作符来实现
类中必须实现接口中定义的所有方法,否则会报一个致命错误。
类可以实现多个接口,用逗号来分隔多个接口的名称。
下面是实例(仅供参考)
<?php
 
// 声明一个'iTemplate'接口
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}
// 实现接口
// 下面的写法是正确的
class Template implements iTemplate
{
    private $vars = array();
   
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
   
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
  
        return $template;
    }
}
9.mysql的事务回滚
事务回滚通常运用于银行转账:例如一方若没有转入或者转出钱,事务回滚就会把一切回到最初的样子,从而不会造成用户的经济损失。
事务回滚的饿三个关键字:
begin 开始一个事务
rollback 事务回滚
commit 事务确认
下面是实例(仅供参考)
$conn = mysql_connect('localhost','root','root') or die ("数据连接错误!!!");
mysql_select_db('test',$conn);
mysql_query("set names 'GBK'"); //使用GBK中文编码;
//开始一个事务
mysql_query("BEGIN"); //或者mysql_query("START TRANSACTION");
$sql = "INSERT INTO `user` (`id`, `username`, `sex`) VALUES (NULL, 'test1', '0')";
$sql2 = "INSERT INTO `user` (`did`, `username`, `sex`) VALUES (NULL, 'test1', '0')";//这条我故意写错
$res = mysql_query($sql);
$res1 = mysql_query($sql2);
if($res && $res1){
mysql_query("COMMIT");
echo '提交成功。';
}else{
mysql_query("ROLLBACK");
echo '数据回滚。';
}
mysql_query("END");
10,git与svn的区别
git有分布式而svn没有
git的分支与svn的分支不同
git没有全局版本号
git保存数据的完整性要强于svn
git是用元数据保存内容的,而svn是用文件保存的
11.mysql的优化
如果查询结果只有一条数据,尽量要用limit 1
要查询某个字段,要精确到select 字段名
要在经常搜索的字段加上索引(索引分为唯一索引,组合索引,主键索引(是特殊的唯一索引,不允许有空值),以及普通索引 )
尽量不要使用order by(排序)
尽量将字段设为 not null
固定长度的表查询更快(char与varchar)
以及采用分区或分表。
12.接口的安全验证
在我的认知方面接口有五种:
一种是公共接口
一种是接口参数加密接口
一种是接口参数加密,时效验证
一种是接口参数加密,时效验证,私钥
最后一种是接口参数加密,时效验证,私钥,https。
13.静态与伪静态
需要先把网站的页面总结出来,分为多少个样式,然后把这些页面做成模板
,生成的时候需要先读取源文件然后生成独立的以.html结尾的页面文件
静态的优点是:
加快了反应的效率
防止了黑客的攻击
方便了搜索的引擎的抓取
缺点是:
占用了太多的空间
不好调试
伪静态:
伪静态的优点是:
使得黑客找不到具体的动态网址,
占用的内存少,
减少url的长度,
维护方便
缺点是:
伪静态文件太多的话会造成cpu的超负荷
14.linux杀死进程
ps -ef| grep 进程名称  获得进程号
kill 进程号         杀死进程
 
 
先写那么多,后期完善!!!         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_青涩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值