我把Java岗面试问烂了的题目总结了一下,终于找到一份实习工作
移动互联网时代,IT 系统变得愈加复杂,对我们程序员的要求也是越来越高,技术不断更新,我们还不能停止学习,停下来了就会被打上一个‘不合格的程序员’的标签,如何成为一位「不那么差」的程序员?「不那么差」的程序员又需要掌握一些什么知识呢?这篇文章就与大家聊一聊这个话题。
以下内容仅代表我从业以来所积累的相关经验,不对不全的地方还请大家海涵,下面我会从硬技能、软实力这些方面尽量阐述我所认为的 “不那么差的程序员” 应当做到哪些技能。
技术栈
作为一名码代码的程序员,怎么说干的还是技术活。既然是技术活那专业实力就得过硬,下面我会按照相关类别谈谈我们应该掌握哪些东西。
主要需要掌握网络与操作系统方面相关的知识(这些知识前期是比较枯燥的)但只要你还在做计算机相关的工作,这些都是绕不开的,当哪天这些知识不经意的帮助到你时你会庆幸当初正确的选择。
这块当初在大学时也是最不受待见的一门课程,也是我唯一挂过的科目。
记得当时每次上课老师就让大家用C语言练习书上的习题,看着一个个拆开都认识的字母组合在一起就六亲不认我果断选择了放弃。这也造成现在的我每隔一段时间就要看二叉树、红黑树、栈、队列等知识,加深印象。
这一块内容可能会在应届生校招时发挥较大作用,在工作中如果你的本职工作是Java Web 开发的话,这一块涉猎的几率还是比较低。不过一旦你接触到了模型设计、中间件、高效存储、查询等内容这些也是绕不过的坎。
Java基础则是走向Java高级的必经之路。
实际工作中高频次的东西有以下几点
基本容器
IO、NIO
常见的设计模式
Java多线程
良好的单测习惯
多线程并发内容
有了扎实的基础之后就要了解多线程、并发相关的内容了。
会用了之后也要考虑为啥多线程会出现的问题,这时就需要理解内存模型、可见性之类的知识点。同样的解决方式又有哪些?各自的优缺点也需要掌握。
想要深入Java ,JVM是不可或缺的。对于大部分工作1~3年的开发者来说直接接触这一些内容是比较少的,到了3~5 年这个阶段就必须得了解了。
JVM内存划分,知道哪块内存存放哪些内容;线程安全与否;内存不够怎么处理等
不同情况的内存溢出、栈溢出,以及定位解决方案
分代的垃圾回收策略。
线上问题定位及相关解决方案
一个类的加载、创建对象、垃圾回收、类卸载的整个过程
以上问题都是我们需要掌握的
做WEB应用开发的老哥肯定要和数据库打不少交道,而且通常来说一个系统最先出现瓶颈往往都是数据库,说数据库是压到系统的最后—根稻草—点也不为过。
所以对数据库的掌握也是非常重要。以MySQL数据库为例,这三点必须知道:
索引的数据结构及原理、哪些字段应当创建索引
针对于一个慢SQL的优化思路
数据库水平垂直拆分的方案,需要了解业界常用的MyCAT、sharding-sphere等中间件
随着互联网的发展,传统的单体应用越来越不适合现有场景。因此分布式技术出现了,这块涵盖的内容也很多很广,至少一些像CAP定理什么的这些基本理论还是要知道。
最后当然就是要懂一点架构了
相信程序员都有一个架构师的梦想。
要成为一个架构师,就上面列举的样样需要掌握,底层到操作系统、算法;上层到应用、框架都需要非常精通。(PPT架构师除外)
以上所说,仅供参考。
接下来给大家分享面试经验以来碰到过的高频面试题,希望对大家有所帮助(附答案,可分享)
1.并行和并发有什么区别?
2.线程和进程的区别?
3.守护线程是什么?
4.创建线程有哪几种方式?
5.说一下runnable 和callable有什么区别?
6.线程有哪些状态?
7.sleep() 和wait() 有什么区别?
8.notify()和notifyAll()有什么区别?
9.线程的 run() 和start() 有什么区别?
10.创建线程池有哪几种方式?
11.线程池中submit() 和execute() 方法有什么区别?
12.在Java程序中怎么保证多线程的运行安全?
13.多线程中synchronized锁升级的原理是什么?
1.什么是 Spring Boot?
2.Spring Boot 有哪些优点?
3.什么是 JavaConfig?
4.如何重新加载 Spring Boot 上的更改,而无需重新启动服务器?
5.Spring Boot 中的监视器是什么?
6.如何在 Spring Boot 中禁用 Actuator 端点安全性?
7.如何在自定义端口上运行 Spring Boot 应用程序?
8.什么是 YAML?
9.如何实现 Spring Boot 应用程序的安全性?
1.什么是Spring Cloud?
2.使用Spring Cloud有什么优势?
3.服务注册和发现是什么意思?Spring Cloud 如何实现?
4.负载平衡的意义什么?
5.什么是Hystrix?它如何实现容错?
6.什么是 Hystrix断路器?我们需要它吗?
7.什么是Netflix Feign?它的优点是什么?
1.什么是Zookeeper?
2.Zookeeper如何保证了分布式一致性特性?
3.Zookeeper文件系统
4.ZooKeeper提供了什么?
5.四种类型的数据节点Znode
6.Zookeeper Watcher机制 — 数据变更通知
7.Zookeeper下Server工作状态
8.zookeeper是如何保证事务的顺序一致性的?
1.什么是rabbitmq?
2.为什么要使用rabbitmq?
3.使用rabbitmq的场景?
4.如何确保消息正确地发送至 RabbitMQ? 如何确保消息接收方消费了消息?
5.如何避免消息重复投递或重复消费?
6.消息基于什么传输?
1.Kafka是什么?
2.partition的数据文件(offffset, MessageSize, data)
3.数据文件分段segment(顺序读写、分段命令、二分查找)
4.负载均衡(partition 会均衡分布到不同 broker 上)
5.批量发送
6.压缩(GZIP 或 Snappy)
7.消费者设计
8.Consumer Group
9.如何获取topic主题的列表?
10.生产者和消费者的命令行是什么?
1.为什么要用Dubbo?
2.Dubbo的整体架构设计有哪些分层?
3.默认使用的是什么通信框架,还有别的选择吗?
4.一般使用什么注册中心?还有别的选择吗?
5.默认使用什么序列化框架,你知道的还有哪些?
6.服务提供者能实现失效提出是什么原理?
7.服务上线怎么不影响旧版本?
8.Dubbo推荐用什么协议?
9.同一个服务多个注册的情况下可以直连某一个服务吗?
10.Dubbo集群容错有几种方案?
MySQL面试题
1、MySQL中有哪几种锁?
2、MySQL中有哪些不同的表格?
3、简述在MySQL数据库中MyISAM和InnoDB的区别
4、MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
5、CHAR和VARCHAR的区别?
6、LIKE声明中的%和_是什么意思?
答:%对应于0个或更多字符,_只是LIKE 语句中的一个字符。
7、MySQL支持事务吗?
答:在缺省模式下,MySQL是autocommit 模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL是不支持事务的。
但是如果你的MySQL表类型是使用InnoDB Tables 或 BDB tables 的话,你的MySQL就可以使用事务处理,使用SETAUTOCOMMIT=0 就可以使 MySQL允许在 autocommit 模式,在非autocommit 模式下,你必须使用COMMIT 来提交你的更改,或者用ROLLBACK来回滚你的更改。
1.RDB和AOF区别。
2.为什么RDB要fork子进程而不是线程。
3.redis基本数据类型。
4.zset的底层数据结构,跳表何时增加高度。
5.分布式redis,缓存和数据库读写不一致,答延迟双删。
6.面试官让随便讲讲Redis,所以还说了缓存穿透,击穿,雪崩以及处理方法。
7.Redis相比memcached有哪些优势?
8.Redis主要消耗什么物理资源?
9.Redis有哪几种数据淘汰策略?
10.Redis官方为什么不提供Windows版本?
1.SQL优化
2.简单说一说drop、delete与truncate的区别
3.什么是视图?
4.什么是内联接、左外联接、右外联接?
5.并发事务带来哪些问题?
6.事务隔离级别有哪些?MySQL的默认隔离级别是?
7.大表如何优化?
8.存储过程(特定功能的SQL语句集)
9.大表如何优化?
1.什么是Nginx?
2.请列举Nginx的一些特性
3.请列举Nginx和Apache 之间的不同点
4.请解释Nginx如何处理HTTP请求
5.在Nginx中,如何使用未定义的服务器名称来阻止处理请求?
1、Tomcat的缺省端口是多少,怎么修改?
2、tomcat 有哪几种Connector 运行模式(优化)?
3、Tomcat有几种部署方式?
4、tomcat容器是如何创建servlet类实例?用到了什么原理?
5.tomcat如何优化?
6.内存调优
7.垃圾回收策略调优
7.共享session处理
8.添加JMS远程监控
9.专业点的分析工具有
10.关于Tomcat的session数目
俗话说:种一棵树,最好的时间是十年前,其次是现在。如果你现在还不是技术大牛,就不应该停止学习,至少在这个技术不断更新的时代,不会让后浪拍的太惨,前段时间我在腾讯工作的老哥私下传我一份他们内部的程序员全栈知识点进阶笔记,里面的内容真的非常全面,市面上很少会见到这么全的笔记,差距不止一点点。
考虑篇幅,就着重挑了一些常见的重要的面试题展示出来了。所有的面试题目都不是一成不变的,上面的面试题只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。
全套的Java面试宝典手册,“性能调优+微服务架构+并发编程+开源框架+分布式”等七大面试专栏,包含Tomcat、JVM、MySQL、SpringCloud、SpringBoot、Dubbo、并发、Spring、SpringMVC、MyBatis、Zookeeper、Ngnix、Kafka、MQ、Redis、MongoDB、memcached等等。如果你对这个感兴趣,小编可免费分享。
资料获取方式:关注小编+转发文章+私信【面试题】获取上述资料~
重要的事情说三遍,转发+转发+转发,一定要记得转发哦!!!
贪吃蛇小游戏项目总结
经过了几天的思考和完善,我的贪吃蛇也是终于完成啦。属实是很开心的,当然完成这个项目的过程也是很曲折的。因此就要来一次全面的总结来对自己在这个过程中学到的新知识加以巩固。
这个项目不是完全以自己的知识范围所写出来的,我想到要开发贪吃蛇,第一个想到的问题就是怎么样让蛇显示到我想要它在的位置上呢。由于我之前并没有接触过SetConsoleCursorPosition()函数,因此这个问题就让我很困惑。因此我就开始看了慕课上的教程,于是知道了SetConsoleCursorPosition()函数可以解决我的这个问题。但是对这个函数比较陌生,因此我就在CSDN上查了这个函数加以学习。这个函数可以将你的光标移动到你想移动到的位置,这个函数是需要传入两个参数,但是参数并不是你想要移动的X,Y位置坐标,这里的参数是我之前没有接触到的。SetConsoleCursorPosition(hout,coord);coord是一个结构体,这个是由系统定义好的结构体,结构体中包括了两个成员,一个是x,一个是y,这就是你所想要移动到的坐标。那hout是什么呢?我查到的资料是说hout是一个句柄。我现在的知识量还不够特别深入详细地明白句柄的作用。但在使用这个函数的时候,只需要将coord中的X和Y两个元素赋值就可以进行操作啦。在项目中定义的gotoxy()函数中就用到了这个函数。而为了游戏的美观我又学习到了一个新的函数SetConsoleTextAttribute()函数,这个函数是API设置控制台窗口字体颜色和背景色的函数,可以改变字体颜色,让游戏更加美观。在实现键盘控制功能的时候又学习到了一个新的函数GetAsyncKeyState(VK_UP),这个函数是用来接收键盘的输入值,这里我们通过键盘的上下左右来操作蛇,直接就是UP,DOWN,RIGHT,LEFT来代表键盘的上下左右,这全都是由系统函数所规定的,直接调用即可。
除了上述三个新接触的函数,其它功能的实现都是在我已学知识范围内可以完成的或者是之前接触过的。本次我使用了刚学的链表完成了对蛇的创建。使用链表的好处就是在于实现蛇吃掉食物蛇身增加一节,以及蛇咬到自己,蛇撞墙这些功能时比较好理解,比较形象。相对于用数组来实现这些功能,个人觉得还是链表更简单一些。
新学到的知识总结完啦,下面就来总结一下自己在代码敲完之后,运行程序出现的问题,以及自己的解决方案。我在代码敲完之后,运行程序并进行测试,在多次运行程序之后,发现了这样的问题,那就是食物和蛇身重合的情况还是会出现。
一开始实现这个功能的代码如下:
/*
随机创建食物
*/
void createfood()
{
snake *food_1;
srand((unsigned)time(NULL)); //初始化随机数
food_1=(snake*)malloc(sizeof(snake)); //初始化food_1
while((food_1->x%2)!=0) //保证其为偶数,使得食物能与蛇头对齐,然后食物会出现在网格线上
{
food_1->x=rand()%52+2; //食物随机出现,食物的x坐标在2~52
}
food_1->y=rand()%24+1; //食物的y坐标在1~24
q=head;
while(q->next!=NULL)
{
if(q->x==food_1->x && q->y==food_1->y) //判断蛇身是否与食物重合
{
free(food_1); //如果蛇身和食物重合,那么释放食物指针
createfood(); //重新创建食物
}
q=q->next;
}
gotoxy(food_1->x,food_1->y);
food=food_1;
color(12);
printf(\”●\”); //输出食物
}
这是最开始的代码,这部分我要实现的功能是随机生成食物,并判断是否与蛇身重合,如果重合,就重新生成食物。但从运行效果来看,这部分的代码还是有问题的。于是我想着去把这部分代码给改善一下。思考了很多天,也和同学讨论了这部分的问题,我也在CSDN上问了一些大神博主,最终找出了这部分代码出错的原因。出错的原因有两个:1.while(q->next! =NULL)这个while循环的判断条件导致蛇尾没有进行判断就跳出了循环。2.在while循环中递归调用了这个函数本身,假若第一个节点是与食物重合的,那么会第二次调用这个函数本身,此时第一次调用这个函数中的food_1是被释放掉的。如果第二次调用中食物不在蛇身上产生了,第二次调用结束,那么这个函数回到第一次调用的时候gotoxy(food_1->x,food_1->y);这句话就是违法的。第一个错误很简单,但是即使把第一个错误改掉之后,我发现第二个错误没法改。因此我得出了创建食物和判断是否与蛇身重合不能写在一个函数中的结论。于是我想把这个函数拆成两个函数,但具体改的方案不是我自己完成的,是我和同学一起讨论,最终完成了修改。
修改完的这部分代码如下:
/*
随机出现食物
*/
void createfood()
{
snake *food_1;
srand((unsigned)time(NULL)); //初始化随机数
food_1=(snake*)malloc(sizeof(snake)); //初始化food_1
do
{
food_1->x=rand()%(52/2)*2+2; //食物随机出现,食物的x坐标在2~52
food_1->y=rand()%24+1; //食物的y坐标在1~24
}
while(intobody(food_1->x,food_1->y));
gotoxy(food_1->x,food_1->y);
food=food_1;
color(12);
printf(\”●\”); //输出食物
}
/*
判断食物是否与蛇身重合
*/
int intobody(int x,int y)
{
for(q=head;q!=NULL;q=q->next)
{
if(q->x==x&&q->y==y)
return 1;
}
return 0;
}
把原来的那个函数拆成了两个函数,一个用来创建食物,一个用来判断是否与蛇身重合,如果重合,第二个函数返回值为1,从而导致第一个函数继续循环,重新创建食物,直到不再和蛇身重合,第二个函数返回值为0,第一个函数跳出循环并且打印食物。这样修改十分具有可行性。在运行了很多次后都没有出现蛇身与食物重合的情况。自此,代码完善完成,贪吃蛇项目正式完工。
在这次的项目实践中我觉得自己独立思考问题的能力还有待提高,并且我觉得自己知识面太窄,需要想办法扩充自己的知识面。我的学习路径主要就是CSDN和百度,我认为CSDN上博主的讲解还是很好懂的,比较不错。后期我要试着开发其他一些小程序并且继续通过CSDN和百度不断学习,不断提高自己的编程能力,加油!!!
最后,想要源码的同学请点个赞并私聊我吧!
我是热爱剪辑与编程小刘同学!
简历案例:Java开发工程师
基本信息
姓名:锤子简历
学历:硕士
年龄:24岁
毕业院校:清华大学
专业:计算机科学与技术
联系电话:1345678910
电子邮箱:chuizijianli@100chui.com
求职意向:Java开发工程师
教育背景
本科:武汉大学,软件工程,2008年9月 2012年6月
硕士:清华大学,计算机科学与技术,2012年9月 2014年6月
工作经验
启航之星有限公司,Java开发工程师(2010年10月 2010年11月)
利用HTML、CSS、JavaScript等前端技术参与网站开发。
应用MVC架构、OOP原则、Spring框架和FreeMarker模板引擎进行项目开发。
北京维度技术有限公司,实习Java工程师(2011年11月 2012年3月)
迅速掌握Brew平台,参与《名侦探柯南》相关站点开发,服务于4000+注册用户。
全国挑战杯大赛,团队成员(2012年3月 2012年5月)
参与开发“好课件”分享平台,负责工作调度、需求分析和功能策划。
项目地址
[好课件平台](100chui·com)
兴趣爱好
篮球、技术博客、前沿技术研究
获奖经历
连续两年获得三等奖学金
2012年“挑战杯”大赛省金奖
个人技能
英语:CET-4(559分)、CET-6(520分)
编程语言:Java、PHP、JavaScript
学术成就:发表论文《基于WEB的多媒体素材管理库的开发与应用》
个人评价
拥有两年学生会副主席经验,具备出色的沟通和组织能力。
性格开朗,具有积极向上的团队合作精神,乐于接受新挑战。
熟悉MVC模式,掌握单例、适配器等设计模式。
经验总结:
量化成果:在工作经验中,尽可能量化您的成果,例如提升了多少用户满意度或系统性能。
技术关键词:在个人技能部分,使用行业内的关键词,这有助于通过自动简历筛选系统。
个人评价:简洁明了地描述您的个性和专业技能,避免过多的自我评价,更多展示实际成果和能力。
格式一致性:确保整个简历的格式一致,包括日期、公司名称和职位的表述方式。
校对:仔细校对以避免任何拼写或语法错误。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。