面试总结(2)

来源:互联网 发布:宇宙巨校闪级生软件 编辑:程序博客网 时间:2024/06/05 12:04

NO3: string.intern()的作用是什么?My god,这是什么方法呀,脑子中一点儿概念都没有,连intern这个单词是什么意思都不知道.回到家马上打开JDK.原来是"返回字符串对象的规范化表示形式"。唉,看来是功力尚浅啊!

NO4:分别解释SHA,SSL,HTTP,TCP

SHA :
1. MD5加密,常用于加密用户名密码,当用户验证时。没有解密的方法。
   1.  protected byte[] encrypt(byte[] obj) {
   2. try {
   3. MessageDigest md5 = MessageDigest.getInstance("MD5");
   4. md5.update(obj);
   5. return md5.digest();
   6. } catch (NoSuchAlgorithmException e) {
   7. e.printStackTrace();
   8. }
   9. }
2. SHA加密,与MD5相似的用法,只是两者的算法不同。
    1.  protected byte[] encrypt(byte[] obj) {
    2. try {
    3. MessageDigest sha = MessageDigest.getInstance("SHA");
    4. sha.update(obj);
    5. return sha.digest();
    6. } catch (NoSuchAlgorithmException e) {
    7. e.printStackTrace();
    8. }
    9. }
3. RSA加密,RAS加密允许解密。常用于文本内容的加密。
     1.  import java.security.KeyPair;
   2. import java.security.KeyPairGenerator;
   3. import java.security.interfaces.RSAPrivateKey;
   4. import java.security.interfaces.RSAPublicKey;
   5.
   6. import javax.crypto.Cipher;
   7.
   8. /**
   9. * RSAEncrypt
  10. *

  11. * @author maqujun
  12. * @see
  13. */
  14. public class RSAEncrypt {
  15.
  16. /**
  17. * Main method for RSAEncrypt.
  18. * @param args
  19. */
  20. public static void main(String[] args) {
  21. try {
  22. RSAEncrypt encrypt = new RSAEncrypt();
  23.
  24. String encryptText = "encryptText";
  25. KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA");
  26. keyPairGen.initialize(1024);
  27. KeyPair keyPair = keyPairGen.generateKeyPair();
  28. // Generate keys
  29. RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
  30. RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
  31.
  32. byte[] e = encrypt.encrypt(publicKey, encryptText.getBytes());
  33. byte[] de = encrypt.decrypt(privateKey,e);
  34. System.out.println(encrypt.bytesToString(e));
  35. System.out.println(encrypt.bytesToString(de));
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }
  39. }
  40.
  41. /**
  42. * Change byte array to String.
  43. * @return byte[]
  44. */
  45. protected String bytesToString(byte[] encrytpByte) {
  46. String result = "";
  47. for (Byte bytes : encrytpByte) {
  48. result += (char) bytes.intValue();
  49. }
  50. return result;
  51. }
  52.
  53. /**
  54. * Encrypt String.
  55. * @return byte[]
  56. */
  57. protected byte[] encrypt(RSAPublicKey publicKey, byte[] obj) {
  58. if (publicKey != null) {
  59. try {
  60. Cipher cipher = Cipher.getInstance("RSA");
  61. cipher.init(Cipher.ENCRYPT_MODE, publicKey);
  62. return cipher.doFinal(obj);
  63. } catch (Exception e) {
  64. e.printStackTrace();
  65. }
  66. }
  67. return null;
  68. }
  69.
  70. /**
  71. * Basic decrypt method
  72. * @return byte[]
  73. */
  74. protected byte[] decrypt(RSAPrivateKey privateKey, byte[] obj) {
  75. if (privateKey != null) {
  76. try {
  77. Cipher cipher = Cipher.getInstance("RSA");
  78. cipher.init(Cipher.DECRYPT_MODE, privateKey);
  79. return cipher.doFinal(obj);
  80. } catch (Exception e) {
  81. e.printStackTrace();
  82. }
  83. }
  84.
  85. return null;
  86. }
  87. }

SSL:SSL是Secure Socket Layer的缩写,即安全套接层协议。是由网景(Netscape)公司推出的一种安全通信协议,它能够对信用卡和个人信息提供较强的保护。 SSL是对计算机之间整个会话进行加密的协议。在SSL中,采用了公开密钥和私有密钥两种加密方法。SSL协议的优势在于它是应用层协议确立无关的。高层的应用协议如HTTP、FTP、Telnet等能透明地建立于 SSL协议之上。其在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的安全性。

1.对用户和服务器的合法性进行认证,以确保数据将被发送到正确的客户机和服务器上;
2.加密数据以隐藏被传送的数据,以确保数据传输过程中的机密性和数据的完整性;
3.保护数据完整性。

HTTP: HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。这就是你为什么在浏览器中看到的网页地址都是以“http://”开头的原因。

TCP:TCP协议主为了在主机间实现高可靠性的包交换传输协议。

NO5: cookie的使用

正常的cookie只能在一个应用中共享,即一个cookie只能由创建它的应用获得。
1.可在同一应用服务器内共享方法:设置cookie.setPath("/");
    本机tomcat/webapp下面有两个应用:cas和webapp_b,
    1)原来在cas下面设置的cookie,在webapp_b下面获取不到,path默认是产生cookie的应用的路径。
    2)若在cas下面设置cookie的时候,增加一条cookie.setPath("/");或者cookie.setPath("/webapp_b/");就可以在webapp_b下面获取到cas设置的cookie了。
    3)此处的参数,是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath ("/");之后,可以在webapp文件夹下的所有应用共享cookie,而cookie.setPath("/webapp_b/");是指cas应用设置的cookie只能在webapp_b应用下的获得,即便是产生这个cookie的cas应用也不可以。
    4)设置cookie.setPath("/webapp_b/jsp")或者cookie.setPath("/webapp_b/jsp/")的时候,只有在webapp_b/jsp下面可以获得cookie,在webapp_b下面但是在jsp文件夹外的都不能获得cookie。
    5)设置cookie.setPath("/webapp_b");,是指在webapp_b下面才可以使用cookie,这样就不可以在产生cookie的应用cas下面获取cookie了
    6)有多条cookie.setPath("XXX");语句的时候,起作用的以最后一条为准。
    6)设置多个path的方法???

2.跨域共享cookie的方法:设置cookie.setDomain(".jszx.com");
    A机所在的域:home.langchao.com,A有应用cas
    B机所在的域:jszx.com,B有应用webapp_b
    1)在cas下面设置cookie的时候,增加cookie.setDomain(".jszx.com");,这样在webapp_b下面就可以取到cookie。
    2)这个参数必须以“.”开始。
    3)输入url访问webapp_b的时候,必须输入域名才能解析。比如说在A机器输入:http://lc-bsp.jszx.com:8080/webapp_b,可以获取cas在客户端设置的cookie,而B机器访问本机的应用,输入:

http://localhost:8080/webapp_b则不可以获得cookie。
    4)设置了cookie.setDomain(".jszx.com");,还可以在默认的home.langchao.com下面共享。
    5)设置多个域的方法???
最近的工作经常用到cookie,看了一些资料,虽然原来依赖cookie比较多的方案已经改成现在这个了,但是当时看得一些东西还是最好记下来,免得过些天就一干二净了,怪可惜的。老梁说过这样的文字最好不要是纯文本的,说得是。本来就已经很抽象了,最好弄点图表,就算用123列出来也好