本文将为您提供关于面试题中遇到的SQL题目的详细介绍,我们还将为您解释面试题中遇到的sql题目有哪些的相关知识,同时,我们还将为您提供关于3个面试中遇到的问题、Java面试中遇到的坑、L(A/N)MP
本文将为您提供关于面试题中遇到的SQL题目的详细介绍,我们还将为您解释面试题中遇到的sql题目有哪些的相关知识,同时,我们还将为您提供关于3个面试中遇到的问题、Java 面试中遇到的坑、L(A/N)MP 中遇到的MySQL的坑、MySQL 5.7 安装过程中遇到的坑的实用信息。
本文目录一览:面试题中遇到的SQL题目(面试题中遇到的sql题目有哪些)
<div>
要求查询结果:
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82<span>
3个面试中遇到的问题
前言
6月是个忙碌的月份,结完婚,处理完家事,也换了份工作。以至于6月都没有写blog,今天闲来无事,将之前面试的问题,以及一些感悟分享给大家。
3个问题3个感悟
1. http get问题影射思维问题
与面试官的交流如下:
面试官:“一个http 请求,接受json数组,数组内容是id,返回用户信息,在测试上是ok的,到预生产就报错了,可能是什么问题?”
我想了想说:“代码一致吗?”
面试官:“当然”
我立刻说:“id中没有中文吧?”
面试官:“没有”
我略有疑虑的说:“是压力测试中,报的错吗? 如果是可能是这个借口需要加缓存提高tps了”。
面试官微微一笑说:“不是压力测试,就是单独一次调用”。
我立刻又说:“是不是后台对应的数据库挂了。造成的?”
面试官:“不是”
我再思索中,到底是什么问题呢,左思右想没有想法,正在苦恼中。
面试官略有失望的说:“你遇到bug一般如何处理呢?”
我有种瞬间被闪电击中的感觉,原来思路比答案重要
我平静的说:“定位问题,分析问题,尝试解决,重复上述步骤直到问题解决。定位问题,一般就是先看日志”
面试官略有肯定的说;“调用者的日志,显示调用的接口是500”
我进一步说:“那提供者的日志呢?”
面试官:“提示一大长串的Id,就没有其他日志了”
我细细一想说:“这个可能是测试数据少,预生产数据多,具体不是数据库的数据问题,而是传递的id多了,造成这个查询接口返回慢,可以尝试进行拆分,分批次查询”
面试官:“这个问题,先到这里,咱们换一个问题。”
看到这里,大家可能会觉得这个问题,根本不值一提,或者说记录也是没有任何意义的。但在这里我不得不说这是一个非常严重的问题,是我底层认知中的一个重要缺陷 !在信息不足的情况下,靠猜处理问题!,上边的问题如果不是面试官打断我我会一直往下猜,这种主观片面的方式如果不改,不仅面试会碰壁,生活也会走很多弯路。
**感悟1 **
在信息不足以判断时,应先尽量通过合理有效的沟通获取更全面的信息,而不是在信息不足的情况下贸然尝试
2.半小时只能发3次消息的问题
上边的问题如果你觉得没有意思或者觉得我小题大做,没关系,下面这问题就有意思了。
面试官:“问你个算法问题吧,如何实现半小时只能发3次消息。”
我心中窃喜这个不就是限流,得意的说:“可以适用Guava的RateLimiter”
面试官略有深意的说:"不是每10分钟1次,用户可以1分钟内发3次 "
我语无伦次的说了些方案,这里经过了至少5分钟,都不对。
面试官不耐烦的说:“你刚才提到RateLimiter,它的基本实现原理是什么?”
我深吸一口气说:“令牌桶机制”
面试官略有期待的说:“如何维护令牌的?”
我战战兢兢的说;“以1s一次为例,如果没有尝试获取令牌,每秒都会更新令牌桶中的数量为1”
面试官打断我说:“你再想想这个半小时只能发3次的问题”
我心中明白这是最后一回了,如果在答不对,等待我的就是一首《凉凉》了,但是面试官问我如何维护令牌桶干什么呢?在深思10s后,我想明白了,这个问题本质还是限流,令牌桶算法还是可以解决,只是不是定时维护令牌桶中的令牌数量了,而且每次用户调用时进行维护,并且除了了令牌本身,还需要一个时间戳来协助调整令牌。
我笃定的说:"这个问题就是限流问题,还是参照令牌桶算法,但是维护机制变了。"
面试官微微一笑说;“你说说具体如何实现呢”
我淡定的说:“简单的说,系统持有一个表,表中有1个用户id,1个int类型作为剩余令牌数,1个Date类型作为上次发送时间,具体实现如下流程图”
感悟2
经典算法,活学活用,大多数业务问题均可解决。
3.线程池运行原理
面试官看了看我的简历说:“线程池用过吧”
我信心满满的说:“当然,我们项目都是使用的自扩展的线程池,我非常的熟悉”
面试官很有期待的说:“哦,那你介绍下如何扩展的吧”
我侃侃而谈:“线程池扩展,使用的是ThreadPoolExecutor,核心参数有,核心线程数,最大线程数,存活时间,存活时间的单位,队列大小,拒绝策略,拒绝策略分为4种,”
面试官:“具体说下拒绝策略”
我心想这个小意思,昂首挺胸的说:“
- AbortPolicy默认策略 抛出未检查的异常RejectedException
- DiscardPolicy 新任务无法保存到队列,抛弃该任务
- DiscardOldestPolicy 新任务无法保存到队列,抛弃下一个执行的,再提交最新的
- CallerRunsPolicy调用者执行 不抛弃任务,不抛弃异常,而将某些任务退回到 调用者。 如果队列满了,下个任务会在调用execute的主线程中执行。 有界队列和调用者执行策略,实现高负载下平缓的性能降低 ”
面试官:“概念咱们就不聊了,考虑下面这个场景,核心线程5,最大线程10,队列大小2,同时来了20个任务,使用默认的拒绝策略,任务是如何被执行的。”
我心里一下就蒙了,一般线程的队列大小至少要上千,这个队列数是2,还真没设置过。
硬着头皮,故作镇定的说:“这个最开始的5个任务会被执行,之后的2个任务会进入到队列,之后线程池新开2个线程执行队列中的任务,其他的任务都拒绝了”。
面试官:“这个问题你有点犹豫啊!”
我心里咯噔一下,哎看了是猜错了。
回家以后,我非常好奇,写了程序来校验这个问题,代码如下:
public class IndexBinarySearch<T> {
public static void main(String[] args) {
ThreadPoolExecutor poolExecutor=new ThreadPoolExecutor(5, 10,
1,
TimeUnit.MINUTES,
new LinkedBlockingDeque<Runnable>(2)
);
List<Runnable> rlist=new ArrayList<>();
for(int i=0;i<20;i++){
rlist.add(new RunnableTest(poolExecutor));
}
for(int i=0;i<20;i++){
poolExecutor.execute(rlist.get(1));
}
}
}
class RunnableTest implements Runnable{
ThreadPoolExecutor poolExecutor;
public RunnableTest( ThreadPoolExecutor poolExecutor){
this.poolExecutor=poolExecutor;
}
@Override
public void run() {
int threadSize=this.poolExecutor.getActiveCount();
int queueCurrentSize=this.poolExecutor.getQueue().size();
System.out.println(Thread.currentThread().getName()+":执行开始:"+"当前线程数:"+threadSize+"当前队列大小:"+queueCurrentSize);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果如下图:
从代码的运行结果上看,
前5个立即执行,后2个入队列,
之后线程池开新线程处理后边的任务,如上图紫色框部分线程6-10,直到到达最大线程数为止
之后的任务都拒绝了,如上图报错部分
等有线程执行完任务后,会从线程池中取之前的任务执行。如上图红色框部分。
总结下其大致流程图如下:
感悟3
只有了解原理,才能把一项技术应用在不同的场景下。
总结
3个问题3个感悟
- 在信息不足以判断时,应先尽量通过合理有效的沟通获取更全面的信息,而不是在信息不足的情况下贸然尝试
- 经典算法,活学活用,大多数业务问题均可解决。
- 只有了解原理,才能把一项技术应用在不同的场景下。
Java 面试中遇到的坑
Java 开发中很多人都不愿意修改自己以前的代码,看别人的代码更是无法忍受,当看到别人代码里面一些匪夷所思的写法实现时,恨不得找到负责人好好跟他谈谈心,那么你在开发中是不是也使用到以下几种实现呢。
1.StringBuilder 替代 String 拼接面试中经常问
String,StringBuilder,StringBuffer 的区别。
1. 对参数未做空验证,就做判断值相等
下面的写法将常量放到方法左边,能防止 NPE。
2. 这个坑很多兄弟都踩过,知道为什么?
打印结果为 false, 而下面结果为 true,为啥?
3. 将变量作为参数传递,在方法中改变参数值,变量的值改变了么?下图 total 值到底是几?
4. 由数组转换的 list, 只能循环遍历,而不能看长度,增加元素,删除元素,这是为何?下图代码执行竟然出错!
5. 将列表中李明的名字移除掉,下图实现有无问题?
6. 在指定目录下创建文件目录,到底使用哪一种呢,两个方法都没报错,为何第一次没创建目录而第二次创建?
7. 老板从客户那里回来后骂了我一顿,说是客户界面显示金额很奇怪,我的代码那里有问题?
8. 面试官:你能说出来 java 中实现多线程的几种方法么?
面试者:继承 Thread 类和实现 runnable 接口!
面试官:除此以外还有方法么?
面试者:就这两种实现啊?!
面试官:我们聊点别的,呵呵。
9. 我只是想让这个好好循环三次,有什么问题么?
10. 这个一直没有弄明白,到底返回哪个 true 还是 false?
L(A/N)MP 中遇到的MySQL的坑
1.登录phpmyadmin 账号密码正确,提示以上错误信息。
phpMyAdmin - 错误
配置文件权限错误,不应任何用户都能修改!
解决方法:查看了一下phpmyadmin 权限是777 .
phpmyadmin必须在755权限下才可以运行。
chmod -cR 755 phpMyAdmin (解决)
-------------------------------------分割线-----------------------------------------
发现CentOS7开关防火墙的命令service iptables save报错,使用原始命令开关:
systemctl stop firewalld
systemctl mask firewalld
Then, install the iptables-services package:
yum install iptables-services
Enable the service at boot-time:
systemctl enable iptables
Managing the service
systemctl [stop|start|restart] iptables
Saving your firewall rules can be done as follows:
service iptables save
or
/usr/libexec/iptables/iptables.init save
也可以安装的方式。
------------------------------------分割线----------------------------------------------------
use mysql
GRANT ALL PRIVILEGES ON *.* TO ''root''@''%'' IDENTIFIED BY ''mysql'' WITH GRANT OPTION;
flush privileges;
设置mysql远程登录,上面第二句是:设置root用户任何主机都可以登录并使用“mysql”的密码登录。
------------------------------------分割线----------------------------------------------------
MySQL 5.7 安装过程中遇到的坑
在安装的过程中遇到了几个坑,特地记录下来。
启动的时候会有有个错误:
大意为mysql退出且更新不了pid文件。
查看error.log,如图:
大意为ibdtata1文件不够,初始化的时候页数太大。初步判断为配置文件的配置参数问题。
将其改小或注释后解决。
初始化命令:
bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data # Before MySQL 5.6
bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/mydata/data # MySQL 5.7 and up
本次我采用的是:
mysqld --initialize --user=mysql --datadir=/opt/data --basedir=/opt/mysql --socket=/opt/data/mysqld.sock
将mysql.server做软链后,用service mysql start 启动
或者用另外一种命令格式启动:
/usr/local/mysql/bin/mysqld_safe --user=mysql --basedir=/usr/local/mysql --datadir=/data & 启动mysql服务
初始化后启动mysql服务进行登录,必须要先修改密码:
ALTER USER "root"@"localhost" IDENTIFIED BY "shsnc!@#";
flush privileges;
关于面试题中遇到的SQL题目和面试题中遇到的sql题目有哪些的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于3个面试中遇到的问题、Java 面试中遇到的坑、L(A/N)MP 中遇到的MySQL的坑、MySQL 5.7 安装过程中遇到的坑的相关知识,请在本站寻找。
本文标签: