java面试复习
‘壹’ 如何系统的学习java
玩Java多年的老司机带你上车全面系统学习Java,并且还能教你如何学习才能在今年拿到一份不错的offer。
说到系统全面,就是以目前绝大部分公司招聘要求的知识内容为基准,毕竟我们学习Java都是为了高薪工作,《史记》中说”天下熙熙皆为利来,天下攘攘皆为利往“,为了高薪工作而学习Java技术,这都是人之常情,也是大部分人奋斗的目标。
我们先看看市场上招聘Java程序员都需要哪些技术:

二、数据库篇
数据库是学习Java语言必学的一项内容,常见的数据库就是MySQL和Oracle这两种,作为初学者一般都是学习MySQL为主,一般情况下中小型企业都会选择MySQL数据库,比较大型的互联网公司会选择用Oracle,而学习Oracle相对于MySQL也要复杂一些,建议是主要学习MySQL数据库,Oracle作为了解即可。学习数据库较为简单,基本的操作就是增删改查。
三、Web开发
Web前端内容:HTML/CSS/JavaScript/(前端页面)
注意:Java后端开发可以不用过多关注HTML页面及CSS的处理,但是最起码要会用简单的HTML,JavaScript是必须要会的,因为Javaweb后端程序员毕竟要接触使用AJAX方式处理数据及显示。当然如果只关注服务器端实现而不考虑任何用户界面,则HTML、CSS、JavaScript都不用关注,但是完全脱离前端的开发现在虽然也不少,但是绝对不关心前端是不可能,尤其是JavaScript,但是前端却可以完全不关心服务器后台的任何实现。
推荐学习书籍:《JavaScriptDOM编程艺术》(第二版)
这本书作为被大家推荐的最多的前端入门书籍是有道理的。他能真正让大家了解dom脚本编程,或是说前端编程技术背后的思路和原则。对于初学者来说,这本书没有任何门槛,按部就班跟着书籍实例编写代码即可。我们会知晓如何对浏览器元素操作和掌控,会学会如何实现简单的页面效果。这种简单易得的成就感是一个编程语言入门时最难能可贵的体验。
JavaEE内容:Servlet/JSP
虽然现在网上在传JSP很少用了,可能是被一些模板或JSAJAX方式代替了一些,但是我认为还是应该接触一下,万一要用到不会怎么办,而且它是JavaEE的动态网页实现标准组件。学习JSP过程也能更好的帮助我们理解web会话的过程,掌握web会话都有哪些我们必需知道的。如果学习Javaweb、JSP都不接触那就相当于学习使用Springboot而一点不接触SpringFramework一样,岂不是稀里糊涂。包括开发Javaweb我们必需知道的概念诸如Web应用上下文,请求对象,响应对象,HttpSession,Cookie等都是在接触学习JSP和Servelt中体现的,还有一些比较少见的EJBJSFJMS以及JavaFelix等。
一些初学者不清楚这些难免会有误区,尤其是有些较成熟的工程师也这么说,我只能说他们很无知,只是代码机器而已,其实对于应用开发设计也就稀里糊涂,人云亦云罢了。
永远没有被淘汰的技术也没有永远流行万能的技术,要看在什么环境和场合应用,符合我需求的技术和工具就是好的,就是对的。
四、高级框架
1、Springframework核心IOC容器
2、Springboot在Spring基础上的更全面提升效率的Spring工具
3、ORM框架当今流行使用较多的是Mybatis和MP(Mybatis插件),Hibernate是可选性学习的
4、模板技术,比较成熟的Freemarker
5、SpringCloud微服务框架,SpringCloud提供的全套的分布式系统解决方案。
五、工具
maven是构建管理项目的工具,svn和git是团队协作开发的项目源代码及相关文档资料管理工具,需要学习者初步掌握其应用。
像Tomcat,jetty,resin,JBoss,GlassFish等都是部署运行Javaweb应用的服务器。
以上就是初学者大概学习的内容,我是尽量站在初学者的角度来说的,没有写得特别复杂,怕初学者看不懂,没有实质性的帮助。所以我尽量用白话把话说的简单一些,给大家罗列出主要学习的Java知识点。
知道了Java要学习的大概内容,下面就是怎么才能用最好的方式把Java学好,从而达到就业的水平,首选我们应该了解一下目前想要达到找到工作的水平,应该是怎样的。如果大家对于学习Java有任何的问题,关于如何提升学习Java以及学习方法、学习技巧、快速达到就业的技术水平,都可以随时来问我,这是我建立了5年的Java学习交流裙,前面三个是494,中间三个是801,后面三个是931。 有不懂的问题可以随时在里面问,需要Java各个阶段的学习资料也可以在里面进行下载。
Java学到什么程度才能达到就业的水平:对于大多数初学Java的同学而言,最关心的莫过于我学要学习哪些和学到什么程度才能找到相关的Java研发工作岗位。
不同的软件公司对研发人员的水平要求存在一定的差异,如果从大多数中小型企业来看能接受一个入职到本企业的IT技术人员通常需要具备以下能力。
1理解掌握Java核心面向对象的设计思想和代码构建,能以面向对象方式设计编写业务功能;
2熟练掌握至少两种数据库的开发,如Oracle,mySql,能熟练编写基本常用及高级的SQL语句;
3必需掌握并熟练应用SpringframeworkIOC容器,深入了解IOC及AOP概念并应用,使用MVC实现对web请求做出处理;
4熟练掌握Java处理数据库的ORM框架myBatis,JDBCTemplate,对Hibernate也应有所了解;
5熟练应用Spring增强工具集合Springboot;
6至少熟练使用Eclipse及IDEA集成开发工具构建应用程序;
7能够基本掌握MVNGITMaven在项目中的使用;
8前端开发必需掌握JavaScript和常用的JS框架
以上这些都是中小型软件企业的入职基本要求,如果你能够达到这个水平,找到一份Java工作应该是不难的。
推荐的学习方式:系统视频教程+书籍辅助+有人指导
视频教程:对于Java初学者来说,看视频学习也是最普通的方式,视频教程会把工作中常用的知识进行讲解,而且视频一般都是分章分节,每一个小节都只讲一个知识点,学习起来较为明确。但是视频教程尽量要完整,最好是一整套视频学习。
书籍辅助:书籍便于对理论知识的补充,以便更容易理解Java面向对象核心设计理念和代码实践功能。
PS:但是大部分人都没有耐心看不下去书,所以大部分人都是只看视频教程学习。如果自己能看的下去就看,看不下去就不看。
有人指导:大部分人都不可能全靠自己的能力把Java学的特别好,因为你不了解这个行业,也不知道怎么学,完全零基础自学Java想要找到工作,概率极低。所以建议如果真的想要做这行,尽量找人去带带你,有不懂的问题可以直接请教,少走弯路,提高效率。学习的质量决定以后工作的薪资以及起点,所以还是应该重视起来。
项目的重要性
很多Java初学者看完一些视频,学过一段时间就说自己“会了”。这里我需要给大家纠正一个问题,希望每个学习Java的知友都能明确学习编程的中心是什么。其实在我看来,学习编程从来都不存在会不会这样的说法。学习编程不同于初中学的数学、物理、化学,记住一些公式,做同样一种类型的习题,就证明类似的题型你会做了。编程只讲技术能力是什么水平、什么级别的,最能证明技术水平处在什么阶段的,就是在做项目的过程中,研发好的互联网产品,写代码的质量怎么样,排错能力怎么样,找BUG的能力怎么样,构思功能模块整体布局的能力怎么样等等。做作为初学者想要达到入门的水平,就是自己具备了一些简单项目的编码能力,初学者最重要的一点就是培养自己的编程思维,每一个程序都是不一样的,你不可能都背下来,学编程也不是靠死记硬背的,你只有能去独立编码写一些东西的时候,才有就业的机会。
所以做项目的能力才能去衡量一个学习的水平处在什么阶段,而往往那些嘴上说“会了”的人,往往没写过多少代码,也一个项目做不了出来,这就是纸上谈兵,完全曲解了学习编程到底在学什么,也不知道应该往哪里去。
所以一个Java初学者在学习的整体过程中,必须要有两个能拿得出手,能写在简历上的项目作为找工作的资本,并且要对于这两个项目的前前后后相当了解,才可能最后面试成功,一个初学者在学习完Java所有内容后,如若还达不到可以做简单项目的水平,那么他整个学习过程还是白费,没有达到最终的学习目的,就是学习质量不过关。所以项目的重要性希望大家都明确,因为有太多Java初学者不知道最后学习的目的是什么,最后白白的浪费时间。
学习心态:
学习编程一定不是一个简单的事情,换句话说它还是挺困难的,毕竟能出去找到工作,就是少则五六千,多则上万的工种。这些知识都不是随随便便就是任何一个人都能学会的。关于这个学习心态,希望提示大家要把重心放到“学习”这件事上,因为我发现有很多Java初学者都是像“完成任务”一样去学习,所谓完成任务就是“我把这些视频看完就能找到工作吗”“我把这些都学完就能找到工作吗”学完并不等于“学会”,这是两种不同的概念。
你到底理没理解?
你到底能不能应用起来?
你到底用没用心?
你自己应该是最清楚的,我发现那些把学习当做完成任务一样去对待的,这样的人没有一个是有耐心的,自己在心里欺骗自己“把这些视频看完我就能找到工作”,到了最后自己就逐渐明白,完全是自欺欺人,最后放弃说自己不适合学这个。其实揭开这些人的面具真相就一个:他们没有耐心学习,也不喜欢学习,这是以前经历造成的,是多年的习惯导致的。
所以正确的学习心态一定是把关注点放到学习这件事本身,你要学会这些知识,这些内容,这些技术,这是需要一天一天逐渐积累起来的,并不是短时间就可以达到什么结果。
PS:如果你对于学习没什么耐心,没什么兴趣,我劝你不要来学习编程,学习编程绝对是一个耐心的活,也是需要不断学习和充电的行业。或者说已经到了信息时代,不爱学习的人,很难有耐心去学习知识的人,在信息时代是混不下去的,任何行业都是如此,不学习不进步不紧贴时代的人就一定会被淘汰。
最终自学Java能就业的人基本具备以下几点:
1、有超强的学习耐心及进取心
2、手不懒,代码写的足够多,熟能生巧
3、有一定的学习能力,善于自学善于自己解决问题
4、可以独立写一些简单的项目
以上内容均由本人手写而成,完全站在Java初学者的角度来说,就是希望能用通俗易懂的语言让大家清晰的明白学习Java全面系统的学习内容,以及应该达到什么程度才能拿到一份Java工作的offer,希望可以给大家带来帮助。
‘贰’ 求java工程师面试题
1.介绍一下你自己吧 ——简单说说你的大学、专业、特长、志向
2.你了解我们公司的工作吗?有兴趣吗?——对你要做的工作给出理解同时用事实说明自己有兴趣
3.你经常到java论坛吗?最喜欢哪一个?——最好说CSDN和ITEYE,别人一听就知道你很有研究。
4.你会考研吗?你怎么看待加班和跳槽?——看你是不是能在公司待下去,一定要说自己不考研,专心在公司好好干,踏实干,如果你说“人总是往高处走的”别人就怀疑你干一年就跳槽!
5.剩下是我总结的经常出现的面试题,答案你可以在这里继续提问。
1. 写出你最常用的5个类和5个接口。
2. 写出你所知道的排序算法。并用Java实现一个快速排序。
3. 实现4个线程,其中2个每次加1,另外2个每次减1。
4. 写出你最常遇到的5个异常,并简单描述它们发生在什么情况下。
5. 用单例模式实现一个线程池。
6. 如何存储一个整数,这个整数的长度大于2的64次方。
7. 写一段代码,当用户输入a,在屏幕上显示b,在D:\test.txt中写入c。
8. Swing组件用的进程条是什么类?
9. JSP里面哪个内置对象可以提交客户的请求?
10. 什么是同步?实现线程同步的关键字是什么?如果已经出现死锁,你如何解决?
‘叁’ 达内java课程是怎样安排的,多长时间
【达内教育】Java培训课程大纲总共分为六个阶段:分别是:Java语言基础、JavaSE核心、WEB全栈及数据库、微服务及超高并发互联网架构、全栈进阶就业冲刺、增值课程。
【达内Java培训机构】课程分为:早自习、晚自习、知识串讲。
早自习:项目经理老师会利用早自习时间组织大家进行知识分享,一方面拓宽大家的知识面,另一方面提高学员的演说能力。
晚自习:工作日期间,每天校区为学员提供至少2个小时的晚自习时间,用来完成讲师布置的作业以及复习当天学习的知识点。
知识串讲:项目经理老师会在一周内利用1-2次晚自习的时间,解决学员的共性问题,让学员学会重难点的知识,并巩固之前阶段学习的内容。感兴趣的话点击此处,免费学习一下
想了解更多有关java的相关信息,推荐咨询【达内教育】。该机构是引领行业的职业教育公司,致力于面向IT互联网行业培养人才,达内大型T专场招聘会每年定期举行,为学员搭建快捷高效的双选绿色通道,在提升学员的面试能力、积累面试经验同时也帮助不同技术方向的达内学员快速就业。达内IT培训机构,试听名额限时抢购。
‘肆’ java面试题 很急 谢谢
2, 归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并。这种思想可以用递归方式很容易实现。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。
实现代码如下:
#include <stdio.h> 
#include "common.h"  
void merge(int data[], int p, int q, int r) 
{     
    int i, j, k, n1, n2;     
    n1 = q - p + 1;     
    n2 = r - q;     
    int L[n1];     
    int R[n2];      
    for(i = 0, k = p; i < n1; i++, k++)         
        L[i] = data[k];     
    for(i = 0, k = q + 1; i < n2; i++, k++)         
        R[i] = data[k];     
    for(k = p, i = 0, j = 0; i < n1 && j < n2; k++)     
    {         
        if(L[i] > R[j])         
        {             
            data[k] = L[i];             
            i++;         
        }         
        else         
        {             
            data[k] = R[j];             
            j++;         
        } 
    }
    if(i < n1)     
    {         
        for(j = i; j < n1; j++, k++)             
        data[k] = L[j];     
    }     
    if(j < n2)     
    {         
        for(i = j; i < n2; i++, k++)             
            data[k] = R[i];     
    }  
}
void merge_sort(int data[], int p, int r) 
{     
    if(p < r)     
    {         
        int q = (p + r) / 2;         
        merge_sort(data, p, q);         
        merge_sort(data, q + 1, r);         
        merge(data, p, q, r);     
    } 
} 
void test_merge_sort() 
{   
    int data[] = {44, 12, 145, -123, -1, 0, 121};     
    printf("-------------------------------merge sort----------------------------\n");    
    out_int_array(data, 7);     
    merge_sort(data, 0, 6);     
    out_int_array(data, 7); 
} 
int main() 
{    
    test_merge_sort();    
    return 0; 
}   
4.对于有n个结点的线性表(e0,e1,…,en-1),将结点中某些数据项的值按递增或递减的次序,重新排列线性表结点的过程,称为排序。排序时参照的数据项称为排序码,通常选择结点的键值作为排序码。   
    
  若线性表中排序码相等的结点经某种排序方法进行排序后,仍能保持它们在排序之前的相对次序,称这种排序方法是稳定的;否则,称这种排序方法是不稳定的。   
    
  在排序过程中,线性表的全部结点都在内存,并在内存中调整它们在线性表中的存储顺序,称为内排序。在排序过程中,线性表只有部分结点被调入内存,并借助内存调整结点在外存中的存放顺序的排序方法成为外排序。   
    
  下面通过一个表格简单介绍几种常见的内排序方法,以及比较一下它们之间的性能特点。   
排序方法   
    简介   
    平均时间   
    最坏情况   
    辅助存储   
    是否稳定   
      
  简单排序   
    选择排序   
    反复从还未排好序的那部分线性表中选出键值最小的结点,并按从线性表中选出的顺序排列结点,重新组成线性表。直至未排序的那部分为空,则重新形成的线性表是一个有序的线性表。   
    O(   )   
    O(   )   
    O(1)   
    不稳定   
      
  直接插入排序   
    假设线性表的前面I个结点序列e0,e1,…,en-1是已排序的。对结点在这有序结点ei序列中找插入位置,并将ei插入,而使i+1个结点序列e0,e1,…,ei也变成排序的。依次对i=1,2,…,n-1分别执行这样的插入步骤,最终实现线性表的排序。   
    O(   )   
    O(   )   
    O(1)   
    稳定   
      
  冒泡排序   
    对当前还未排好序的范围内的全部结点,自上而下对相邻的两个结点依次进行比较和调整,让键值大的结点往下沉,键值小的结点往上冒。即,每当两相邻比较后发现它们的排列顺序与排序要求相反时,就将它们互换。   
    O(   )   
    O(   )   
    O(1)   
    稳定   
      
  希尔排序   
    对直接插入排序一种改进,又称“缩小增量排序”。先将整个待排序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序。   
    kn   ln   n   
    O(   )   
    O(logn)   
    不稳定   
      
  快速排序   
    对冒泡排序的一种本质的改进。通过一趟扫视后,使待排序序列的长度能大幅度的减少。在一趟扫视后,使某个结点移到中间的正确位置,并使在它左边序列的结点的键值都比它的小,而它右边序列的结点的键值都不比它的小。称这样一次扫视为“划分”。每次划分使一个长序列变成两个新的较小子序列,对这两个小的子序列分别作同样的划分,直至新的子序列的长度为1使才不再划分。当所有子序列长度都为1时,序列已是排好序的了。   
    O(nlogn)   
    O(   )   
    O(logn)   
    不稳定   
      
  堆排序   
    一种树形选择排序,是对直接选择排序的有效改进。一个堆是这样一棵顺序存储的二叉树,它的所有父结点(e[i])的键值均不小于它的左子结点(e[2*i+1])和右子结点(e[2*i+2])的键值。初始时,若把待排序序列的n个结点看作是一棵顺序存储的二叉树,调整它们的存储顺序,使之成为一个堆,这时堆的根结点键值是最大者。然后将根结点与堆的最后一个结点交换,并对少了一个结点后的n-1结点重新作调整,使之再次成为堆。这样,在根结点得到结点序列键值次最大值。依次类推,直到只有两个结点的堆,并对它们作交换,最后得到有序的n个结点序列。   
    O(nlogn)   
    O(nlogn)   
    O(1)   
    不稳定   
      
  归并排序   
    将两个或两个以上的有序子表合并成一个新的有序表。对于两个有序子表合并一个有序表的两路合并排序来说,初始时,把含n个结点的待排序序列看作有n个长度都为1的有序子表所组成,将它们依次两两合并得到长度为2的若干有序子表,再对它们作两两合并……直到得到长度为n的有序表,排序即告完成。   
    O(nlogn)   
    O(nlogn)   
    O(n)   
    稳定   
后面根据各种排序算法,给出了C语言的实现,大家在复习的时候可以做下参考。   
    
  u               选择排序   
    
  void   ss_sort(int   e[],   int   n)   
    
  {           int   i,   j,   k,   t;   
    
                for(i=0;   i<   n-1;   i++)   {   
    
                              for(k=i,   j=i+1;   j<n;   j++)   
    
                                            if(e[k]>e[j])   k=j;   
    
                              if(k!=i)   {   
    
                                            t=e[i];   e[i]=e[k];   e[k]=t;   
    
                              }   
    
                }   
    
  }   
    
  u               直接插入排序   
    
  void   si_sort(int   e[],   int   n)   
    
  {           int   i,   j,   t;   
    
                for(i=0;   i<   n;   i++)   {   
    
                              for(t=e[i],   j=i-1;   j>=0&&t<e[j];   j--)   
    
                                            e[j+1]=e[j];   
    
                              e[j+1]=t;   
    
                }   
    
  }   
    
  u               冒泡排序   
    
  void   sb_sort(int   e[],   int   n)   
    
  {           int   j,   p,   h,   t;   
    
                for(h=n-1;   h>0;   h=p)   {   
    
                              for(p=j=0;   j<h;   j++)   
    
                                            if(e[j]>e[j+1])   {   
    
                                                          t=e[j];   e[j]=e[j+1];   e[j+1]=t;   
    
                                                          p=j;   
    
                              }   
    
                }   
    
  }   
    
  u               希尔排序   
    
  void   shell(int   e[],   int   n)   
    
  {           int   j,   k,   h,   y;   
    
                for(h=n/2;   h>0;   h=h/2)     
    
                              for(j=h;   j<n;   j++)   {   
    
                                            y=e[j];   
    
                                            for(k=j-h;   k>0&&y<e[k];   k-=h)   
    
                                                          e[k+h]=e[k];   
    
                                            e[k+h]=y;   
    
                }   
    
  }   
    
  u               堆排序   
    
  void   sift(e,   n,   s)   
    
  int   e[];   
    
  int   n;   
    
  int   s;   
    
  {           int   t,   k,   j;   
    
                t=e[s];   
    
                                            k=s;   j=2*k+1;   
    
                                            while(j<n)   {   
    
                                                          if(j<n-1&&e[j]<e[j+1])   
    
                                                                        j++;   
    
                                                          if(t<e[j])   {   
    
                                                                        e[k]=e[j];   
    
                                                                        k=j;   
    
                                                                        j=2*k+1;   
    
                                                          }else   break;   
    
                                            }   
    
                                            e[k]=t;   
    
                              }   
void   heapsorp   (int   e[],   int   n)   
    
                              {           int   i,   k,   t;   
    
                                            for(i=n/2-1;   i>=0;   i--)   
    
                                                          sift(e,   n,   i);   
    
                                            for(k=n-1;   k>=1;   k--)   {   
    
                                                          t=e[0];   e[0]=e[k];   e[k]=t;   
    
                                                          sift(e,   k,   0);   
    
                                            }   
    
                              }   
    
  u               快速排序   
    
  void   r_quick(int   e[],   int   low,   int   high)   
    
                {           int   i,   j,   t;   
    
                              if(low<high)   {   
    
                                            i=low;   j=high;   t=e[low];   
    
                                            while(i<j)   {   
    
                                                          while   (i<j&&e[j]>t)   j--;   
    
                                                          if(i<j)   e[I++]=e[j];   
    
                                                          while   (i<j&&e[i]<=t)   i++;   
    
                                                          if(I<j)   e[j--]=e[i];   
    
                                            }   
    
                              e[i]=t;   
    
                              r_quick(e,low,i-1);   
    
                              r_quick(w,i+1,high);   
    
                              }   
    
                }   
    
  另外,外排序是对大型文件的排序,待排序的记录存储在外存中,在排序过程中,内存只存储文件的一部分记录,整个排序过程需进行多次的内外存间的交换。   
***     查找   
查找就是在按某种数据结构形式存储的数据集合中,找出满足指定条件的结点。   
    
  按查找的条件分类,有按结点的关键码查找、关键码以外的其他数据项查找或其他数据项的组合查找等。按查找数据在内存或外存,分内存查找和外存查找。按查找目的,查找如果只是为了确定指定条件的结点存在与否,成为静态查找;查找是为确定结点的插入位置或为了删除找到的结点,称为动态查找。   
    
  这里简单介绍几种常见的查找方法。   
    
  u               顺序存储线性表的查找   
    
  这是最常见的查找方式。结点集合按线性表组织,采用顺序存储方式,结点只含关键码,并且是整数。如果线性表无序,则采用顺序查找,即从线性表的一端开始逐一查找。而如果线性表有序,则可以使用顺序查找、二分法查找或插值查找。   
    
  u               分块查找   
    
  分块查找的过程分两步,先用二分法在索引表中查索引项,确定要查的结点在哪一块。然后,再在相应块内顺序查找。   
    
  u               链接存储线性表的查找   
    
  对于链接存储线性表的查找只能从链表的首结点开始顺序查找。同样对于无序的链表和有序的链表查找方法不同。   
    
  u               散列表的查找   
    
  散列表又称杂凑表,是一种非常实用的查找技术。它的原理是在结点的存储位置和它的关键码间建立一个确定的关系,从而让查找码直接利用这个关系确定结点的位置。其技术的关键在于解决两个问题。   
    
  I.                     找一个好的散列函数
‘伍’ 绯荤粺鏋舵瀯璁捐″笀瑙嗛戞暀绋
銆婃灦鏋勫笀蹇呯湅镄勭簿鍝佽嗛戙嬬栌搴︾绣鐩樿祫婧愬厤璐逛笅杞
阈炬帴:https://pan..com/s/1U_kS4ZlO9ima57J-vMgAYg
鏋舵瀯甯埚繀鐪嬬殑绮惧搧瑙嗛愦鍜曟场瀛﹂櫌 - Java璁捐℃ā寮弢鍜曟场瀛﹂櫌 - Java 9 鏂扮壒镐т箣镙稿绩搴搢闱掑北_20181213_Redis缂揿瓨绌块忓师鐞嗕笌瑙e喅鏂规.mp4|闱掑北_20181209_濡备綍蹇阃熸惌寤轰竴涓寰链嶅姟鏋舵瀯.mp4|闱掑北_20181205_鍒嗗竷寮忔灦鏋勬牳蹇幂粍浠朵箣娑堟伅阒熷垪.mp4|鍜曟场瀛﹂櫌 - 寰链嶅姟瀹炶返涔嬭矾.mp4|鍜曟场瀛﹂櫌 - 娣卞叆娴呭嚭 Spring Boot 镞ュ织.mp4|鍜曟场瀛﹂櫌 - 娣卞叆娴呭嚭 Spring Boot 绠℃带.mp4|鍜曟场瀛﹂櫌 - Reactor Streams 骞跺彂缂栫▼涔 Reactor.mp4|鍜曟场瀛﹂櫌 - Java 9 寮傛ュ苟鍙戠紪绋.mp4|Tom_20181213_濡备綍璁捐′嚎绾у苟鍙戠殑鍒嗗竷寮忕郴缁.mp4|Tom_20181204_鍗冧竾绾у苟鍙戝垎甯冨纺鏋舵瀯浠0鍒1.mp4|Tom_20180730_涓嶅嶅埗銆佷笉绮樿创锛屼竴鍙f皵鎾稿畬Spring镙稿绩浠g爜.mp4|Tom_20180710_宸х敤ELK蹇阃熷疄鐜扮绣绔欐祦閲忕洃鎺у彲瑙嗗寲.mp4
‘陆’ 用C++设计一个发工资程序
按照题目要求编写的C++程序如下
(见图,代码麻烦你自己打一下)

