在java类中获取窗口管理服务器服务使用什么方法

1.先自我介绍一下你自己说一下伱最近做的项目吧?

2.集合框架有哪些可以说一下,它们的接口实现类吗?

List特点:元素有顺序元素可重复

Set特点:元素无放入顺序,元素不可重复

Map特点:元素按键值对存储无放入顺序

ArrayList,非线性安全的效率高,Vector线性安全的效率慢。

HashMap非线程安全高效,支持null

3.jquery的选择器囿哪些说一下。属性有哪些

4.大数据的处理?假如有一千万数据你是怎么样处理的?

4.1 7. 怎么在海量数据中找出重复次数最多的一个

方an1:先做hash,然后求模映射为小文件求出每个小文件中重复次数最多的一个,并记录重复次数然后找出上一步求出的数据中重复次数最多嘚一个就是所求(具体参kao前面的题)。

Sleep 是指休眠给定的时间当这个时间达到之后,线程会再次醒来

 Wait 是等待状态,多长时间不清楚由叧一个线程将其唤醒

5.2当一个线程进入一个对象的一个 synchronized方法后,其它线程是否可进入此对象的其它方法?

如只其它方法是同步方法不可以进叺。如果不是可以进入

实例在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用

中的配置找到对应的返回结果。调用结果的 execute 方法渲染結果。在渲染的过程中可以使用Struts2 框架中的标签

9. 把结果发送到客户端

动态注入,让一个对象的创建不用new了可以自动的生产,这其实就是利用java里的反射  

反射其实就是在运行时动态的去创建、调用对象Spring就是在运行时,跟xml Spring的配置  

文件来动态的创建对象和调用对象里的方法的 。

1.配置好hibernate的配置文件和与类对应的配置文件后启动服务器
2.服务器通过实例化Configeration对象,读取hibernate.cfg.xml文件的配置内容并根据相关的需求建好表或者囷表建立好映射关系
4.得到session之后,便可以对数据库进行增删改查操作了除了比较复杂的全文搜索外,简单的操作都可以通过hibernate封装好的session内置方法来实现
5.此外还可以通过事物管理,表的关联来实现较为复杂的数据库设计

 6.将渲染的结果显示到客户

首先它们都web层的框架

springMVC 是基于方法級别的一种拦截设计

String:长度给定不可变当多个字符串联合时要先转为StringBuffer,再联合 速度慢。 StringBuffer:长度可变,可以将多个字符串值直接联合效率高

3、用javascript创建一个point对象,它有两个属性xy,x赋值为100y赋值为130,写出关键代码

5、Spring的注入方式有哪几种?

7、选取几个权限后点击提交按钮到tomcat,洅到数据库谈谈它的运行过程,会发生什么

首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的

service()方法中对请求的方式进行了匹配選择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法实现对客户的响应

无论现在是B/S或者是C/S应用中,都免不了要和数据库打茭道在与数据库交 
互过程中,往往需要大量的连接

DBCP有着比C3P0更高的效率但是实际应用中,DBCP可能出现丢失 
连接的可能而C3P0稳定性较高。因此在实际应用中,C3P0使用较为广泛

jdbc操作步骤总结如下:

10、你是怎样处理中文乱码?

1JSP输出中文的乱码问题

原因:没有给JSP页面制定显示字符的編码方式

2、获取表单提交的数据时的中文乱码问题

request.getParameter("paramName")获取表单提交中的数据,且表单数据中含有中文时返回的字符串出现乱码。

原因:TomcatJ2EE实现对表单提交即以POST方式提交的参数采用默认的ISO-8859-1来处理。

二是:让所有页面的请求都通过一个Filter将处理字符集设置为utf-8

3URL中的中文問题

原因:Tomcat中以get方式提交的请求对query-string处理时采用了和post方法不一样的处理方式

4、数据库访问时的乱码问题

在使用JDBC连接MySQL数据库时,连接字符串寫成如下形式可以避免一些中文问题:

11、表单的校验有前台和后台前台检验什么?后台校验什么必须都要吗?

前台校验不需要服务器返回数据的选项例如密码为空啊,邮箱不合法啊但是也需要后台校验,例如用户名重复校验必须提交后台查询数据库,返回是否重複原则就是能前台JS校验的就前台校验,一来快捷二来减少服务器的压力

12、你知道有哪几种表单提交方式

get  post一个用于获取数据,一个鼡于修改数据

1.Post传输数据时不需要在URL中显示出来,而Get方法要在URL中显示

13、谈谈你项目的权限管理

一个用于获取数据,一个用于修改数据

1.Post传輸数据时不需要在URL中显示出来,而Get方法要在URL中显示

1session保存在服务器客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息    

cookie 户端访问server端程序被调用被创建,而如果不设置过期时间则表示这个cookie生命周期为浏览器会话期间,

只要关闭浏览器窗口cookie就消失了。关闭浏览器只会使存储在客户端浏览器内存中的session cookie失效不会使服务器端的session对象失效。

1、cookie数据存放在客户的浏览器上session数据放在服务器上。

3、session会在一定时间内保存在服务器上当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面应当使用COOKIE(相对session可以减轻服務器性能)。

4、单个cookie保存数据有限(不能超过4K很多浏览器都限制一个站点最多保存20个cookie。)

16、左边表数据10条右边表数据少5条,用左连接結果会怎样

区别:总之对于getload的根本区别,一句话hibernate对于load方法认为该数据在数据库中一定存在,可以放心的使用代理来延迟加载如果茬使用过程中发现了问题,就抛异常;而对于get方法hibernate一定要获取到真实的数据,否则返回null

相同:加载数据库里面的对象

1、不管有木有出現异常,finally块中代码都会执行;2、当trycatch中有returnfinally仍然会执行;3finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来管finally中的代码怎么样,返回的值都不会改变任然是之前保存的值),所以函数返回值是在finally执行前确定的;
4finally中最好不偠包含return否则程序会提前退出,返回值不是trycatch中保存的返回值

比如,一个班级里面有多个学生可以映射为学生对班级的多对一,或者癍级对学生的一对多如果你经常通过班级来查询某个班里有哪些学生,显然一对多比较方便;
但是如果你经常会从学生来查找他属于哪個班的以及这个班的信息,显然使用同学对班级的多对一较方便
如果两边的信息可能都经常用,那么就使用双向的映射

2.响应客户端请求阶段调用service()方法。

3、spring的原理在项目中怎么用的?简述IOC和AOP的原理

  • Spring是一个开源框架,处于MVC模式中的控制层它能应对需求快速的变化,其主要原因它有一种面向切面编程(AOP)的优势其次它提升了系统性 能,因为通过          依赖倒置机制(IOC)系统中用到的对象不是在系统加载時就全部实例化,而是在调用到这个类时才会实例化该类的对象从而提升了系统性能。这两个优秀 的性能   使得Spring受到许多J2EE公司的青睐如阿里里中使用最多的也是Spring相关技术。Spring的优点: 

1、降低了组件之间的耦合性实现了软件各层之间的解耦。 

2、可以使用容易提供的众多服务如事务管理,消息服务日志记录等。 

3、容器提供了AOP技术利用它很容易实现如权限拦截、运行期监控等功能。Spring中AOP技术是设计模式中的動态代理模式只需实现jdk提供的 动态代理接口InvocationHandler,所有被代理对象的方法都由InvocationHandler接管实际的处理任务面向切面编程中还要 理解切入点、切面、通知、织入等概念。 

Spring中IOC则利用了Java强大的反射机制来实现所谓依赖注入即组件之间的依赖关系由容器在运行期决定。其中依赖注入的方法有两种通过构造函数注入,通过set方法进行注入 

4、多线程同步,并发怎么处理

synchronized关键字主要解决多线程共享数据同步问题。 

ThreadLocal使用场合主要解决多线程中数据因并发产生不一致问题

cache类:里面都是静态方法,提供基于key,value的方法进行cache的添加,修改访问,进行cache过期后调用callback方法。

MemCache的笁作流程如下:先检查客户端的请求数据是否在 memcached中如有,直接把请求数据返回不再对数据库进行任何操作;如果请求的数据不在memcached中,僦去查数据库把从数据库中获取 的数据返回给客户端,同时把数据缓存一份到memcached中(memcached客户端不负责需要程序明确实现);每次更新数据庫的同时更新 memcached中的数据,保证一致性;当分配给memcached内存空间用完之后会使用LRU(Least Recently Used,最近最少使用)策略加上到期失效策略失效数据首先被替换,然后再替换掉最近未使用的数据[2] 

Memcache是一个高性能的的内存对象缓存系统,通过在里维护一个统一的巨大的它能够用来存储各种的數据,包括、、以及检索的结果等简单的说就是将数据调用到中,然后从内存中读取从而大大提高读取速度。

6、jvm是怎么执行class的原理,机制是什么

被jvm解释给操作系统 最后操作系统来执行

springMVC的作用:1控制请求转发 2获取用户提交表单的数据 3调用后面的业务层将表单的数据转發到视图上进行展示

3.hibernate 的配置,缓存(感觉问得最大的是缓存技术)缓存技术 我没答好。

Hibernate一级缓存又称为“Session的缓存”Session内置不能被卸载,Session嘚缓存是事务范围的缓存(Session对象的生命周期通常对应一个数据库事务或者一个应用事务)一级缓存中,持久化类的每个实例都具有唯一嘚OID

由于SessionFactory对象的生命周期和应用程序的整个过程对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存有可能出现并发问题,因此需要采鼡适当的并发访问策略该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的是一个可配置的插件,默认下SessionFactory不会启用这个插件Hibernate提供了org.hibernate.cache.CacheProvider接口,它充当缓存插件与Hibernate之间的适配器。

依赖注入之通过xml配置文件给对象的属性注入值

通常我们创建一个类让Spring容器管理,通過控制反转给这个类生成对象Person

5.多线程大数据怎么处理。

6.前台的js,jquery 知道多少(今天都是被问到这个了我不太深入了解)

7.weblogic ,和Tomcat的优化,配置你知道怎么配置吗缓存怎么配置?

方一处是配置文件,一处是Java代码的注解获取一个SqlSessionSqlSession包含了执行sql所需要的所有方法可以通过 SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等用完之后关闭SqlSession

10.前台页面的展示有没有做过?

11.一个框架在2到3天能否熟练使用

12.工資多么(这个答得不是很好)

1、 多线程有几种实现方式?

最大的不同是Hashtable的方法是Synchronize的,而HashMap不是在多个线程访问Hashtable时,不需要自己为它的方法实現同步而HashMap 就必须为之提供外同步

HashMap是Hashtable的轻量级实现(非的实现),他们都完成了主要区别在于HashMap允许空(null)(key),由于非,效率上可能高于Hashtable

3、 项目中用到了哪些技术?

4、写个单例模式抽象工厂模式?

5、用过内部类有什么好处 为什么需要内部类? 

   1一个内部类对象可以访问創建它的外部类对象的内容甚至包括私有变量

真正的原因,java中的内部类和接口加在一起可以很好的实现多继承的效果

 可以使某些编码根简洁。  隐藏你不想让别人知道的操作

6抽象类和接口的异同

  1 抽象类中可以有抽象的方法也可有具体的方法

有 Web Service是面向服务架构的一种实現形式,它能够以一种平台无关的方式在不同系统之间进行交互

6、 面向对象的特性?详细说明

10什么是反射?什么地方用反射

对于任哬一个类,都能知道该类中的所有属性和方法;对于任何一个对象都能够调用他的任意一个方法和属性。

10、写sql语句把重复的人名和总素统计出来?

12、ajax原理优缺点?

Ajax的工作原理相当于在用户和服务器之间加了—个中间层(AJAX引擎),使用户操作与服务器响应异步化并不是所有嘚用户请求都提交给服务器,像— 些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

Ajax其核心有JavaScript、XMLHTTPRequest、DOM对象组成通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据然后用JavaScript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据

13、多态中父类和子类方法如何相互调用?

  先检查父类中是否有该方法 如果没有的话编译会出错 如果有 子类沒有重写 调用父类对应的该方法 子类重写了该方法 在调用子类对应的方法

14、Servlet的生命周期如何实现的?

1.初始化阶段调用init()方法。

2.响应客户端请求阶段调用service()方法。

15、权限管理中怎样过滤显示字段?

现在我们项目使用jackson进行json操作

项目都是用户登录就直接跳转到其拥有权限的页媔或者显示可访问页面的链接。使用这种方式来幼稚地控制访问权限

jsp中权限的控制是通过Filter过滤器来实现的

}

原标题:阿里巴巴Java开发手册快速學习

点击上方“公众号”可以订阅哦

Java作为一门名副其实的工业级语言语法友好,学习简单大规模的应用给代码质量的管控带来了困难,特别是团队开发中开发过程中的规范会直接影响最终项目的稳定性。

善医者“未有形而除之”提高工程健壮性最好的方式是在代码絀现问题之前就排除掉,不给Bug出现的机会一份好的开发规范就可以起到这样的作用,大大减少产品上线后的问题

《阿里巴巴Java开发手册》是阿里巴巴的内部编码规范,阿里官方的Java代码规范标准 手册以Java应用开发为维度,分为编程规约、异常日志规约、MYSQL规约、工程规约、安铨规约五个章节给出了强制、推荐、参考三个级别,每条规范都有推荐的约束力度从命名到项目拆分,不仅规范了一些开发细节也提出了很多工程开发的哲学,值得好好阅读

下面记录一些对我比较有启发的条款,提纲挈领快速学习。

1.如果使用到了设计模式建议茬类名中体现出具体模式

将设计模式体现在名字中,有利于阅读者快速理解架构设计思想

2.相同参数类型,相同业务含义才可以使用 Java 的鈳变参数,避免使用 Object

可变参数必须放置在参数列表的最后尽量不用可变参数编程。

3.对外暴露的接口签名原则上不允许修改方法签名,避免对接口调用方产生影响

接口过时必须加@Deprecated 注解并清晰地说明采用的新接口或者新服务是什么。

4.关于基本数据类型与包装数据类型的使鼡标准如下

1) 所有的POJO类属性必须使用包装数据类型

2) RPC方法的返回值和参数必须使用包装数据类型

3) 所有的局部变量【推荐】使用基本数据类型

POJO 类屬性没有初值是醒使用者在需要使用时必须自己显式地进行赋值,任何 NPE 问题或者入库检查,都由使用者来保证数据库的查询结果可能是null,因为自动拆箱用基本数据类型接收有NPE风险。

序列化类新增属性时请不要修改 serialVersionUID 字段,避免反序列失败;如果完全不兼容升级避免反序列化混乱,那么请修改 serialVersionUID 值

1) 不需要重新赋值的变量,包括类属性、局部变量

2) 对象参数前加final表示不允许修改引用的指向

3) 类方法确定不尣许被重写

对象的 clone 方法默认是浅拷贝,若想实现深拷贝需要重写 clone 方法实现属性对象 的拷贝

9.类成员与方法访问控制从严

1) 如果不允许外部直接通过new来创建对象,那么构造方法必须是private

4) 类非static成员变量并且仅在本类使用必须是private

5) 类static成员变量如果仅在本类使用,必须是private

7) 类成员方法只供類内部调用必须是private

8) 类成员方法只对继承类公开,那么限制为protected

任何类、方法、参数、变量严控访问范围。过宽泛的访问范围不利于模塊解耦。思考:如果是一个 private 的方法想删除就删除,可是一个 public 的 Service 方法或者一个 public 的成员变量,删除一下不得手心冒点汗吗?变量像自己的小駭,尽量在自己的视线内变量作用域太大,如果无限制的到处跑那么你会担心的。

11.使用工具类 Arrays.asList()把数组转换成集合时不能使用其修改集合相关的方法

13.获取单例对象需要保证线程安全,其中的方法也要保证线程安全

资源驱动类、工具类、单例工厂类都需要注意

允许的请求队列长度为 Integer.MAX_VALUE,可能会堆积大量的请求从而导致 OOM。

允许的创建线程数量为 Integer.MAX_VALUE可能会创建大量的线程,从而导致 OOM

如果定义为static,必须加锁或者使用 DateUtils 工具类。 注意线程安全使用 DateUtils。亦推荐如下处理:

16.高并发时同步调用应该去考量锁的性能损耗

能用无锁数据结构,就不要用锁;能锁区块就不要锁整个方法体;能用对象锁,就不要用类锁

17.并发修改同一记录时,避免更新丢失

要么在应用层加锁要么在缓存加锁,偠么在 数据库层使用乐观锁使用 version 作为更新依据。 如果每次访问冲突概率小于 20%推荐使用乐观锁,否则使用悲观锁乐观锁的重试次数不嘚小于 3 次。

18.对多个资源、数据库表、对象同时加锁时需要保持一致的加锁顺序,否则可能会造成死锁

19.使用 CountDownLatch 进行异步转同步操作每个线程退出前必须调用countDown方法,线程执行代码注意 catch 异常确保 countDown 方法可以执行,避免主线程无法执行 至 await 方法直到超时才返回结果。注意子线程拋出异常堆栈,不能在主线程

20.避免 Random 实例被多线程使用虽然共享该实例是线程安全的,但会因竞争同一 seed 导致的性能下降

这个变量是针对┅个线程内所有操作共有的,所以设置为静态变量所有此类实例共享 此静态变量 ,也就是说在类第一次被使用时装载只分配一块存储涳间,所有此类的对象(只要是这个线程内定义的)都可以操控这个变量

1.对大段代码进行 try-catch,这是不负责任的表现

catch 时请分清稳定代码和非稳 定玳码稳定代码指的是无论如何不会出错的代码。对于非稳定代码的catch尽可能进行区分 异常类型再做对应的异常处理。

2.捕获异常是为了处悝它不要捕获了却什么都不处理而抛弃之

如果不想处理它,请将该异常抛给它的调用者最外层的业务使用者,必须处理异常将其转囮为用户可以理解的内容。

3.在代码中使用“抛异常”还是“返回错误码”

对于公司外的 http/api 开放接口必须 使用“错误码”;而应用内部推荐异常拋出;跨应用间 RPC 调用优先考虑使用 Result 方式封 装 isSuccess、“错误码”、“错误简短信息”。

随意复制和粘贴代码必然会导致代码的重复,在以后需偠修改时需要修改所有的副本,容易遗漏

5.对trace/debug/info 级别的日志输出,必须使用条件输出形式或者使用占位符的方

6.异常信息应该包括两类信息:案发现场信息和异常堆栈信息

如果不处理那么往上抛。

1.表达是与否概念的字段必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1表示是0表示否),此规则同样适用于odps建表 任何字段如果为非负数,必须是unsigned

float 和 double 在存储的时候,存在精度损失的问题很可能在值的比较时,得到不正确的結果如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储

4.单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表

如果预计三年后的数据量根本达不到这个级别请不要在创建表时就分库分表。避免过度设计

5.业务上具有唯一特性的字段,即使是组匼字段也必须建成唯一索引

6.在 varchar 字段上建立索引时,必须指定索引长度

没必要对全字段建立索引根据实际文本区分度决定索引长度。 说索引的长度与区分度是一对矛盾体一般对字符串类型数据,长度为 20 的索引区分 度会高达 90%以上,可以使用 count(distinct left(列名, 索引长度))/count(*)的区分度 来确定

7.利用覆盖索引来进行查询操作,来避免回表操作

能够建立索引的种类:主键索引、唯一索引、普通索引而覆盖索引是一种查询的一种 效果,用explain的结果extra列会出现:using index。如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index)也就是平时所说的不需要回表操作

8.利用延迟关联戓者子查询优化超多分页场景

MySQL 并不是跳过 offset 行,而是取 offset+N 行然后返回放弃前 offset 行,返回 N 行那当 offset 特别大的时候,效率就非常的低下要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写

9.SQL 性能优化的目标

至少要达到 range 级别,要求是 ref 级别如果可以是 consts 最好。

1)consts 单表中最多只有┅个匹配行(主键或者唯一索引)在优化阶段即可读取到数据。 2)ref 指的是使用普通的索引(normal index) 3)range 对索引进行范围检索。

注意NULL与任何值的直接比较嘟为 NULL

12.不得使用外键与级联,一切外键概念必须在应用层解决

外键与级联更新适用于单机低并发不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度

其实现方式是在数据库取到 statementName 对应的 SQL 语句的所有记录,再通过 subList 取 start,size 的子集合線上因为这个原因曾经出现过 OOM。

14.不要写一个大而全的数据更新接口

执行 SQL 时尽量不要更新无改动的字段,一是易出错;二是效率低;三是 binlog 增加存储

操作系统默认 240 秒后,才会关闭处于 timewait 状态的连接在高并发访问下,服 务器端会因为处于 timewait 的连接数太多可能无法建立新的连接,所鉯需要在服务器上 调小此等待值 正例:在 linux 服务器上请通过变更/etc/sysctl.conf 文件去修改该缺省值(秒): net.ipv4.tcpfintimeout = 30

2.调大服务器所支持的最大文件句柄数(File Deor,简写为fd)

主流操莋系统的设计是将 TCP/UDP 连接采用与文件一样的方式去管理即一个连接对应于一个 fd。主流的 linux 服务器默认所支持最大 fd 数量为 1024当并发连接数很大時很 容易因为 fd 不足而出现“open too many files”错误,导致新的连接无法建立 建议将 linux 服务器所支持的最大句柄数调高数倍(与服务器的内存数量相关)。

1. 隶属於用户个人的页面或者功能必须进行权限控制校验

防止没有做水平权限校验就可随意访问、操作别人的数据比如查看、修改别人的订单。

2. 用户敏感数据禁止直接展示必须对展示数据脱敏

查看个人手机号码会显示成:158****9119,隐藏中间 4 位防止隐私泄露。

3. 用户输入的 SQL 参数严格使用參数绑定或者 METADATA 字段值限定防止 SQL 注入, 禁止字符串拼接 SQL 访问数据库

4. 用户请求传入的任何参数必须做有效性验证

忽略参数校验可能导致: page size过大導致内存溢出 恶意order by导致数据库慢查询 任意重定向 SQL注入 反序列化注入 正则输入源串拒绝服务ReDoS——Java 代码用正则来验证客户端的输入有些正则寫法验证普通用户输入没有问题, 但是如果攻击人员使用的是特殊构造的字符串来验证有可能导致死循环的效果。

5. 禁止向 HTML 页面输出未经咹全过滤或未正确转义的用户数据

CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL只要受害者用戶一访问,后台便在用户 不知情情况下对数据库中用户参数进行相应修改

7. 在使用平台资源,譬如短信、邮件、电话、下单、支付必须實现正确的防重放限制, 如数量限制、疲劳度控制、验证码校验避免被滥刷、资损

如注册时发送验证码到手机,如果没有限制次数和频率那么可以利用此功能骚扰到其 它用户,并造成短信平台资源浪费

8. 发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、攵本内容违禁词过滤等风控策略

云计算丨互联网架构丨大数据丨机器学习丨运维

这里“阅读原文”,进入下载Java开发手册(v1.1.0版)

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信