数据库管理员JAVA程序员架构师面试题汇总

2024-08-22

数据库管理员JAVA程序员架构师面试题汇总(共9篇)

1.数据库管理员JAVA程序员架构师面试题汇总 篇一

什么是类与对象?

所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。

类是具备某些共同特征的实体的集合,它是一种抽象的概念,用程序设计的语言来说,类是一种抽象的数据类型,它是对所具有相同特征实体的抽象。

属性与方法?

不同对象具有相同特点,就可能抽象为一定的类,那么这些特点基本上可以分为两类,一类是描述对象静态状态的,就是对象的属性,在程序设计中,可以称之为变量;另一类是描述对象的动作,就是对象的方法,在程序设计中我们称之为函数。属性和方法是一个对象所具备的两大基本要素,也是我们后面编程工作的核心。

什么是封装?

只要有足够的方法,就没必要直接去操作对象属性,只要调用这些方法就可以实现要完成的任务,这种现象称为封装,它通过对象方法对其属性的操作把对象属性封装在一个对象内部,对象与外界打交道全部通过其自身的方法来实现,有效的把对象属性隐藏在对象内部。

编写 java文件的注意事项?

在记事本中编写java文件,在保存时一定要把文件名和扩展名用双引号括起来,否则将默认保存为文本文件,如果要保存的java 文件名为Program1.java,则在保存时在文件名文本框中一定要输入”Program1.java”。

如何编译java程序?

单击开始|运行命令,在命令行上输入cmd,按回车键(在 window98中输入command,按回车键),即可打开一个命令窗口,将目录转换到编写java源程序所在的目录,输入javac filename.java

如何执行java程序?

同样在命令窗口中输入java filename,基本数据类型?

Java的数据类型可以划分为4大类:整数,浮点数,字符型,布尔型。其中整数可以划分为:byte,short,int,long.浮点数可以划分为float,double.

2.Java程序员面试题 篇二

Java程序员面试题

1.下列程序段执行后,t5的结果是_____.int t1=5,t2=6,t3=7,t4,t5;

t4 = t1

t5 = t4

2.String s = new String(“xyz”);创建了_____个String Object.3.类型转换

 int x=4;

System.out.println(“value is ” +((x>4)?99.9:9));输出是______;

4.Boolean类型

boolean a = false;

if(a = true){

System.out.println(true);

} else {

System.out.println(false);结果是______;

5.int i = 5;

Integer iInteger = new Integer(i);

Integer jInteger = new Integer(i);

System.out.println(i == iInteger);

System.out.println(iInteger == jInteger);输出结果是______;

6.TreeSet map = new TreeSet();

map.add(“one”);

map.add(“two”);

map.add(“three”);

map.add(“four”);

map.add(“one”);

Iterator it = map.iterator();

while(it.hasNext()){

System.out.print(it.next()+ “ ”);

}

输出结果是 ________________________________________;

class Polish {

public static void main(String[] args){

int x = 4;

StringBuffer sb = new StringBuffer(“..fedcba”);

sb.delete(3,6);

sb.insert(3, “az”);

if(sb.length()> 6)x = sb.indexOf(“b”);

sb.delete((x-3),(x-2));

System.out.println(sb);

北京千渡网讯科技有限公司博宝艺术网http://

}

}

结果是: ____________

8.class Emu {

static String s = “-”;

public static void main(String[] args){

try {

throw new Exception();

} catch(Exception e){

try {

try { throw new Exception();

} catch(Exception ex){ s += “ic ”;}

throw new Exception();

} catch(Exception x){ s += “mc ”;}

finally { s += “mf ”;}

} finally { s += “of ”;}

System.out.println(s);结果是:______________________

9..抽象类和接口的区别

10.写一个方法,实现字符串的反转,如:输入abc,输出cba

11.short s1 =1;s1 = s1 + 1;有什么错? short s1 = 1;s1 += 1;有什么错?

12.下列哪些集合能够改变其容量大小,同时能够根据索引访问其元素,并且访问方法是非线形安全的?

A.java.util.HashSet

B.java.util.LinkedHashSet

C.java.util.List

D.java.util.ArrayList

E.java.util.Vector

F.java.util.PriorityQueue

13.下列关于泛型的说法,错误的是()

A、泛型是一种参数化类型

B、可以取代继承机制。

C、避免了运行时进行类型转换可能的潜在性错误

D、增强了程序的灵活性和安全性

14.下面关于System.out的说法哪些是正确?

A.System.out是1个PrintStream。

B.System.out是1个OutputStream。

C.System.out是1个FilterOutputStream。

D.System.out不是1个PrintStream。

E.System.out在异常时,将抛出IOException

3.JAVA程序员面试题2 篇三

2008-06-12 10:41

1.String是最基本的数据类型吗?

基本数据类型包括byte、int、char、long、float、double、boolean和short。java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

2.String 和StringBuffer的区别。

JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。典型地,你可以使用StringBuffers来动态构造字符数据。

3.运行时异常与一般异常有何异同?

异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

4.说出Servlet的生命周期,并说出Servlet和CGI的区别。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法.与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

5.Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

6.short s1 = 1;s1 = s1 + 1;有什么错? short s1 = 1;s1 += 1;有什么错?

short s1 = 1;s1 = s1 + 1;有错,s1是short型,s1+1是int型,不能显式转化为short型。可修改为s1 =(short)(s1 + 1)。short s1 = 1;s1 += 1正确。

7.Anonymous Inner Class(匿名内部类)是否可以extends(继承)其它类,是否可以

implements(实现)interface(接口)?

匿名的内部类是没有名字的内部类。不能extends(继承)其它类,但一个内部类可以作为一个接口,由另一个内部类实现。

8.Static Nested Class 和 Inner Class的不同,说得越多越好。

Nested Class(一般是C++的说法),Inner Class(一般是JAVA的说法)。Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上。具体可见http: ///articles/services/view.asp?id=704&page=1 注: 静态内部类(Inner Class)意味着1创建一个static内部类的对象,不需要一个外部类对象,2不

能从一个static内部类的一个对象访问一个外部类对象

9.给出一个你最常见到的runtime exception

ArithmeticException, ArrayStoreException,CannotRedoException, BufferOverflowException, CannotUndoException, BufferUnderflowException,ClassCastException,DOMException, CMMException, ConcurrentModificationException, IllegalArgumentException, EmptyStackException,IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException,SecurityException, ProviderException, SystemException, RasterFormatException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException

10.abstract的method是否可同时是static,是否可同时是native,是否可同时是

synchronized?

都不能

11.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承

实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

12.启动一个线程是用run()还是start()?

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必

须退出的标志来停止一个线程。

13.是否可以继承String类?

String类是final类故不可以继承。

14.List, Set, Map是否继承自Collection接口?

List,Set是.Map不是

15.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是

equals()? 它们有何区别?

Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判读两个Set是否相等。

4.java程序员面试题及答案 篇四

表a和表b具有完全相同的结构,主键为indexid。写出一个sql语句把表b中不存在而表a中存在的数据插入到表b中。

2、javascript部分

页面中有一个名称都为unitprice的type=text对象。要求输入的数据不能为空,写一个函数实现该功能,如果为空时给出提示。

3、JSP部分

①session中存储一个String变量,变量名称为studentname,写出在jsp中如何得到这个session变量的值的语句。

②在jsp中引用使用来引用javabean.

Ⅰscope的值有哪些,这些值的区别是什么?

Ⅱ不同的jsp页面中引用javabean时,id能否相同,如果能相同,对scope的值有什么要求?

4、JAVA部分

①输入一个维数,输出以下形式的矩阵和数列,以维数n=4为例:

0000

0111

0122

0123

②写出下面这段程序的运行结果

int a=2,b=3,c=1

a+=Cb+c;

c-=b+a++;

System.out.println(“a=”+a+”,b=”+b+”,c=”+c);

5、有一个Vector对象,其中每一个元素都是一个String对象,请用for循环或while循环输出Vector中的元素,要求格式为:”第i个元素为:aaa”

6、有一个HashMap其中key为String对象,value为Integer对象,写一个方法打印出此Map中的所有键值 对形如 keyCvalue

7、有一个String str=”001,A001;002,A002;003,A003″的串,写一个方法,把此串存入列 一个HashMap或Hashtable中,说明:如001为key,A001则为value。

8、面向对象概念:

①面向对象基本特征

②什么叫多态和重载,它们有什么区别?

③用你自己的话描述你理解的j2ee的本质特征是什么?

第一题: 写一个方法,实现删除链表中某个节点的操作(其他条件自己假设,补充)

public void

{

if(front>=rear)

{

s[front] =0;

frontC;

System.out.println(“ successful”);

}

else

{

System.out.println(“the link is empty ,can’t ”);

}

}

第二题: 写一个方法,实现堆栈的入栈操作 (其他条件自己假设,补充)

public class stack{

private int[] s;

int top,bottom;

public stack(int size){

s = new int[size];

top = size-1;

bottom = size-1;

System.out.println(“Size of the stack is:”+size);

}

public boolean isEmpty()

{

if(top==s.length-1)

return true;

else

return false;

}

public void push(int n)

{

if(top<0)

{

System.out.println(“The stack is full now,you can’t push your data!”);

return;

}

else

{

s[top] = n;

topC;

return ;

}

}

public void pop()

{

if(top>=s.length-1)

{

System.out.println(“The stack is empty,Can’t pop now!”);

return;

}

else

{

top++;

}

}

public void print()

{

System.out.println(“State of the stack:”);

for(int i=s.length-1;i>top;iC)

{

System.out.print(s[i]+” ”);

}

}

public static void main(String[] a)

{

stack st = new stack(5);

System.out.println(“List of the action to the stack:”);

System.out.println(“push(3):”);

st.push(3);

st.print();

System.out.println(” ”);

System.out.println(“push(6)”);

st.push(6);

st.print();

System.out.println(” ”);

System.out.println(“push(10)”);

st.push(10);

st.print();

System.out.println(” ”);

System.out.println(“pop()”);

st.pop();

st.print();

System.out.println(” ”);

}

}

第三题: 使用任意排序算法,写一个排序示例程序

import java.io.*;

class SelectionSort{

public static void main(String[] args){

int[] a={4,54,8,7,6,98,42,};

sort(a);

for(int i=0;i

System.out.print(a[i]+” “);

}

System.out.println(“”);

}

static void sort(int[] data){

int next, indexOfNext=0,n;

for (next=0;next

{

indexOfNext=min(data,next,(data.length)-1);

swap(data,indexOfNext,next);

}

}

static int min(int[] data,int start,int end){

int indexOfMin=start;

for (int i=start+1;i<=end;i++)

if(data[i]

indexOfMin=i;

return indexOfMin;

}

static void swap(int[] data,int first,int second){

int temp;

temp=data[first];

data[first]=data[second];

data[second]=temp;

}

}

第四题:

编写一个servlet,把servlet源码和此servlet在服务器上的配置文件web.xml作为附件发送到指定的邮箱

servlet的功能要求:记录访问该servlet的客户端的ip和访问时间,把记录写入client_ip.log文件。 client_ip.log里的格式大致如下:

9:36 -4-8 192.168.0.1

9:36 2005-4-8 127.0.0.1

获取客户的IP地址

第五题

数据库中有两个表tableA和tableB,他们都有一个int型的字段id,请写出一个sql语句,实现查询id在tableA中有,而tableB中没有的记录

例如tableA中有如下记录

―――――――――-

tableA.id tableA.name

3 Mary

4 Jack

5 Lily

―――――――――-

tableB.id

3

5

查询的结果应该是

―――――――――-

tableA.id tableA.name

4 Jack

select *

from tableA

where not exists

(select *

from tableB

where tableA.id=tableB.id)

第六题 简述jsp和servlet的联系

Java Servlet是JSP技术的基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。现在许多Web服务器都支持Servlet,即使不直接支持Servlet的Web服务器,也可以通过附件的应用服务器和模块来支持Servlet,这得益于Java的跨平台特性。另外,由于Servlet内部以线程方式提供提供服务,不必对于每个请求都启动一个进程,并且利用多线程机制可以同时为多个请求服务,因此Servlet的效率非常高。

第七题 什么是sql注入漏洞,采用什么方法来堵住sql注入漏洞

随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入

第八题:简述你对xml的认识,举例说明xml能干什么,应该怎么做

XML是Extensible Markup Language的缩写,意思是可扩展置标语言没有于置标电子文档,使起数据具有结构化的置标语言。在我目前浅显的认识里:,

XML 是用来传递数据的 ,

XML 让这些数据有了结构 ― 一个树型结构 ,

xml 有全套的操作这种结构的方法

xml 规范(或者说的实际点,xml parser)帮你确定你创建的字符串是合法的

xml 规范(或者说的实际点,xml parser)中有办法验证这个合法性

对于XML能用来做什么,我觉得XML可以用来下面几个方面

1:有利于开发灵活的web应用软件

使用XML来描述数据,可以使数据具有同意的组织结构,其他应用软件,对象,中间层和服务器都可以对使用XML描述的数据做进一步的处理。并可以提交到浏览器中让读者阅读

2:可以轻松的实现数据在web上发布

因为XML本身是纯文本格式的,它可以不做任何修改就和HTML文档一样在网络中传输。

3:有利于信息的集成

因为使用XML,可以把不同来源的结构化数据很容易地组织到一起。应用软件可以在中间层的服务器上对来自于后段数据库和其他的数据进行集成。最后,数据以XML格式发送到客户端或者是在其他服务器做进一步处理。

4:可以使用丰富的样式来显示数据

XML采用结构化的方式来组织数据,描述的是数据本身,不涉及到数据的表现形式。通常来说,使用CSS和 XSL以及XSLT为数据的显示提供分布的机制,也就是说数据的显示方式可以根据客户的要求制定。

5:可大大增强服务器的可伸缩性

XML将数据本身和数据的显示完全分离,从而可以在结构化的数据中嵌套数据的显示方式描述。这样,能尽可能地减少客户端与服务器之间的数据交换,减少服务器的工作量才能大大提高服务器的性能。

6:采用统一的XML文档格式来描述多种应用的数据

7:支持本地数据处理

因为XML文档中的数据格式是统一的,当客户受到数据后,便可以使用客户自己的应用软件来解析数据,并对数据进行进一步的编辑和处理。

8:可以使搜索变得更加简单

5.数据库管理员JAVA程序员架构师面试题汇总 篇五

B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、InFORMix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。

C/S 与 B/S 区别:

1.硬件环境不同:

C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备.信息自己管理.有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行

2.对安全要求不同

C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强.一般高度机密的信息系统采用C/S 结构适宜.可以通过B/S发布部分可公开信息.B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。

3.对程序架构不同

C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑.B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上.比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange

2000等, 全面支持网络的构件搭建的系统.SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟.4.软件重用不同

C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好.B/S 对的多重结构,要求构件相对独立的功能.能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子

5.系统维护不同

C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级.升级难.可能是再做一个全新的系统

B/S 构件组成,方面构件个别的更换,实现系统的无缝升级.系统维护开销减到最小.用户从网上自己下载安装就可以实现升级.6.处理问题不同

C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关.应该都是相同的系统

B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的.与操作系统平台关系最小.7.用户接口不同

C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高

B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流.并且大部分难度减低,减低开发成本.8.信息流不同

C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低

6.Java架构师岗位的具体职责 篇六

负责产品软件设计,负责服务器端业务逻辑和API的架构以及核心代码编写;负责现有系统的改进和优化;

参与系统需求分析与设计,完成接口规范制定;

提供***的技术研究、系统开发的方法及实践建议

物流体系统整体设计规划与落地

任职要求:

本科及以上学历,扎实的计算机专业基本功

8年以上Java或相关开发经验,熟悉常用Java开源项目,并阅读过部分开源项目源码。

熟悉Spring Cloud 或类似微服务框架,并有大规模实践经验。

熟悉Kubernetes、Swarm等容器化技术方案,有大规模实践经验的优先。

拥有DevOps经验者优先。

7.Java架构师的岗位职责 篇七

1、负责行业应用解决方案的系统架构,根据行业客户需求,协助公司规划产品研发方向;

2、负责总体开发框架搭建,核心功能架构代码编写;开发/维护公用核心模块;

3、带领开发团队按计划完成系统开发、测试与实施工作;

4、参与开发过程中的技术难题解决,提升核心系统性能、可扩展性、易维护性;

5、负责对技术团队的指导、技术分享,推动提高团队的代码质量和性能意识;

任职要求:

1、本科及以上学历,计算机及相关专业,3年以上工作经验;至少全程负责过一个以上JAVA项目的完整架构设计、开发、测试及实施经验;

2、良好的抽象能力及面向对象的分析设计能力,具备业务建模能力,深刻理解设计模式;

3、精通JAVA语言,拥有丰富的Spring/SpringMVC/Mybatis/SSH等主流开发技术及框架开发经验;深刻理解与掌握IOC、AOP、 SOA等理念及实现,充分理解MVC等设计模式,熟悉B/S结构的应用开发;

4、熟悉网络安全及性能管理;

5、工作认真负责,责任心强;

8.数据库管理员JAVA程序员架构师面试题汇总 篇八

1、负责整体系统的架构和优化;

2、深入发掘业务需求为软件开发提供技术方案设计;

3、从事核心部分代码的编写;

4、从系统架构层面解决各类潜在技术风险,保证系统的安全、稳定、快速运行。

5、制定开发团队的技术管理规范和流程。

6、对开发团队进行技术指导、管理和培训以及人才梯队培养。

任职资格:

1、统招本科学历,计算机相关专业;

2、8年及以上开发经验,2年以上独立承担软件项目系统分析和架构设计经验;

3、精通Java技术框架与设计模式(springMVC、springBoot、SpringCloud、myBatis、Dubbo等);

4、熟悉SQLServer、Mysql等关系型数据数据库的规划、设计与优化;

5、熟悉Redis, Memcached, Hbase, Mongodb等NoSQL的设计和开发;

9.数据库管理员JAVA程序员架构师面试题汇总 篇九

Java求职必看:9道华为Java程序员面试题!

大公司的面试题,总是能代表着行业对从业者的要求,也代表着技术的发展趋势和方向,这里就整理9道华为的Java面试题,供Java从业者参考。

1.Java程序的种类有(BCD)

A.类(Class)B.Applet C.Application D.Servlet

2.下列说法正确的有(BCD)

A. 环境变量可在编译source code时指定

B. 在编译程序时,所能指定的环境变量不包括class path C. javac一次可同时编译数个Java源文件

D. javac.exe能指定编译结果要置于哪个目录(directory)

3.下列标识符不合法的有(ACD)

A.new B.$Usdollars C.1234 D.car.taxi

4.下列说法错误的有(BCD)A. 数组是一种对象 B. 数组属于一种原生类

C. int number=={31,23,33,43,35,63}

D. 数组的大小可以任意改变

5.不能用来修饰interface的有(ACD)A.private B.public C.protected D.static

6.下列正确的有(ACD)

A. call by value不会改变实际参数的数值 B. call by reference能改变实际参数的参考地址 C. call by reference不能改变实际参数的参考地址 D. call by reference能改变实际参数的内容

7.下列说法错误的有(ACD)

A. 在类方法中可用this来调用本类的类方法 B. 在类方法中调用本类的类方法时可直接调用 C. 在类方法中只能调用本类中的类方法 D. 在类方法中绝对不能调用实例方法

8.下列说法错误的有(ABC)

A. Java面向对象语言容许单独的过程与函数存在 B. Java面向对象语言容许单独的方法存在 C. Java语言中的方法属于类中的成员(member)

D. Java语言中的方法必定隶属于某一类(对象),调用方法与过程或函数相同

9.下列说法错误的有(BCD)

A. 能被java.exe成功运行的java class文件必须有main方法 B. J2SDK就是Java API C. Appletviewer.exe可利用jar选项运行.jar文件

上一篇:2020年公司党委党建工作总结下一篇:余秋雨散文《有口难辩》