




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java该这么学1、火星文翻译器2、为什么要有Jar(别人不用重新编译、防止泄露源代码、复用)3、开发自己的JianFan4J,打包成Jar供别人用(自己动手写开源项目,自己动手写类库,用工具的人变成造工具的人)。Static方法和普通方法的区别,jar文件的导出,。Java工程导出Jar包的方式:工程上右键,选择“Export”,选择“JavaJarFile” 4、课下作业:开发Huoxingwen4J的开源组件5、Pinyin4j的使用和原理分析6、课下作业:自己动手写Pinyin4j(文件处理、字符处理、HashMap,嵌入资源(可以先读取绝对路径的文件)7、集合:HashSet 集合的特征:数据不重复HashSet(挑选出重复的人员)用Set实现从98中选中缺的2个数字这个算法;实现统计字符串中出现的所有字符的算法;面试、笔试的时候能用最优化算法当然最好,如果想不到最优化算法,就是HashSet、HashMap、List等数据结构来实现,分数也不会很低。想不到好算法仍然拿高分的秘籍!1、 利用HashMap简化阶乘运算(缓存、缓存命中率),BigInteger的使用2、 统计一篇文章中每个字的出现次数(HashMap的应用)3、 自己动手写模板引擎(文件处理、架构、Map、占位符、字符串处理、LoadFromFile、LoadFromStream)Java应该这么学第一节相当一部分时间不会讲太多Web方面的东西,只是把它当成一个展示界面而已。为什么不用AWT、Swing, Eclipse下没有合适的可视化设计工具。咱们把主要精力放到后端更有差异性的逻辑上,比如JDBC数据库访问、XML解析、Java中反射/面向对象/设计模式等高级特性、Java流、文件处理、网络编程、多线程、数据结构(链表、散列、树、堆栈)算法、编译原理等上,而不是界面上。将要安排的项目:自己动手写在线Eclipse、自己动手写SQL查询分析器、自己动手写论坛、自己动手写Struts。为什么不直接上来就学Struts?为了尽可能的不变成代码工人。我在培训机构兼职,遇到很多学生上来Servlet没学过、JSP没学过,上来就学Struts,JDBC没学过、SQL没学过,上来就学Hibernate,只会用Struts、Hibernate这些工具模仿着实现一些固定的功能,一旦涉及到深层次的问题,就一脸茫然。咱们如鹏是避免大家成为代码工人,所以会把很多精力放到这些基础的东西上,可能人家学Struts一天就能做出来很酷的东西,也许你学这些基础的东西一个月也达不到他的效果,但是记住越是容易得到的越不值钱,等到他把Struts玩儿的很熟的时候你已经能自己动手写Struts了,谁能够进入更高档次的高位、拿更多的工资就不言而喻了。第一个Web程序: 搭建第一个Web工程1、创建一个Java工程,工程下创建一个文件夹lib2、将jettylib1.zip解压到lib目录下,回到Eclipse刷新一下lib目录3、在工程MyfirstWeb1上点击右键,选择Property,在打开的对话框中选择JavaBuildPath,切换到Libraries页,点击【Add Jars】,选择所有刚才解压的jar文件。4、以后给大家提供一些jar包,大家模仿上面的步骤添加就可以。以前没学过加第三方jar。(第三方提供的扩展Java类库的类库,简化开发)5、在src下新建【package】名字是“com.rupeng”6、在“com.rupeng”上创建Class“StartServer”7、添加入口类:1. package com.rupeng;2. import org.mortbay.http.SocketListener;3. import org.mortbay.jetty.Server;4. import org.mortbay.jetty.servlet.ServletHttpContext;5.6. public class StartServer7. 8. public static void main(String args)9. 10. Server server = new Server();11. try12. 13. SocketListener listener = new SocketListener();14. listener.setPort(80);15. server.addListener(listener);16. ServletHttpContext context = (ServletHttpContext)server.addContext(/);17. server.start();18. 19. catch (Exception e)20. 21. e.printStackTrace();22. 23. 24. 所有的Servlet都从HttpServlet继承。添加从HttpServlet继承的Servlet 实现doGet方法将Servlet添加到Context中context.addServlet(/test/*, com.rupeng.TestServlet);表示用户请求test这个地址的时候由TestServlet来处理,而TestServlet则是doGet方法来处理。doGet方法中req表示请求、resp表示回应启动,养成以Debug方式启动的好习惯。Debug As方式启动的好处:可以设置断点;可以实现代码热替换(每次改完代码以后立即生效,不用重启程序!)Servlet是什么?提供Web显示服务的类。StartServer是一个包工头,遇到任务的时候会把任务分发给合适的Servlet,所以Servlet就是干活的。遇到test请求的时候由TestServlet来处理。 处理请求的还是方法,doGet方法来处理Request:接受任务; Response:把任务完成返回System.out.println(); 是向控制台输出resp.getOutputStream().println(你好); 是向浏览器输出可能遇到的错误:Address already in use: JVM_Bind 端口被占用再添加一个长工“HelloServlet”,为什么不重启不行?热替换的前提条件之一是:代码被执行以后才会热替换,只有干活的时候 热替换才起作用。StartServer中main的代码只会执行一次,所以必须重启。打开::8080/testJSP和Servlet的关系是什么。JSP会被编译成Servlet。JSP是C语言、Servlet是汇编语言。Struts是不用写代码的自动生成C语言代码的代码生成器。又学到了一通百通的东西了。上档次了!弄明白底层,工资非常高!人家不都是开发JavaWeb程序用Tomcat吗?咱们怎么没用?Tomcat只是JavaWeb服务器的一种,JavaWeb服务器就是一个放置Servlet的服务器,Servlet只是一个普通类,用户来了由JavaWeb服务器来调用Servlet,所以JavaWeb服务器是包工头,StartServer就是一个小型的Tomcat。用Tomcat的话会花在很多时间在环境配置上,也许配置一个礼拜了都运行不起来,很打击自信心,所以我的指导原则是5分钟之内就要能跑起来,所以我采用Jetty来代替Tomcat,具体原理大家现在不用关心,等时机成熟的时候我会像教大家怎样用10分钟从C-Free一通百通到VC一样用10分钟教大家从Jetty一通百通到Tomcat。下一节课讲表单提交数据到Servlet,对HTML不熟悉的同学请看如鹏网的自己动手写网站的视频教程。必须达到手写HTML的水平自己动手写网站。Java应该这么学第二节1、带一个参数的SayHelloServlet/test?name=kider ? 参数名=参数值getParameter:Parameter(参数)编辑代码的时候快速保存的快捷键: Ctrl+S为什么是字符串类型?Http协议本质论。很多直接用Struts的人根本不知道背后发生了什么,发生了很多笑话。2、带多个参数的AddServletAlt+/:自动代码提示传递多个参数,在各个参数组之间用“&”分割/love?boy=tom&girl=lily3、通过HTML页面向Servlet提交数据(不放入工程,直接点击运行)HTML有头Head、有身体Body表单:form。Please fill the form。 注册、登录都是一种申请,都需要Fill the form。文本框提交按钮action=/love表示表单要提交给谁处理。否则大街上随便有人给你表单,你填了 都不知道给谁乱码问题,后面的课程4、Get与Post,如果做到GetPost统一?service。如果信息太多的话,GET方式URL太长了,浏览器能够处理的URL长度是有限的。传递文件内容等的时候GET是不可以的。method=PostGET、POST区别之一:能不能在URL里边看到参数的值。很多公司面试求职的常考题。Post和get的区别。长度限制、提交的内容。信息隐藏。学习Web开发就要有手写HTML的能力。Form的action什么意思,input、type。代码重复了!DRY。Dont Repeat YourSelf。以后写Servlet统一都使用service方法,不用doGet、 doPost了。5、如何将HTML融入工程?addWebApplication(/, WebContent)6、实现登录页面(不连接数据库)7、Add一切都是字符串,转换成数字需要程序员自己处理课下作业:1、容错处理:字段为空、非法数字 2、在线算命Java应该这么学第三节1、容错处理:字段为空、非法数字NumberFormatExceptionN1变量的作用域问题。一个变量的作用域是:大括号。变量的初始化。为什么Eclipse报错是“may not been initialized”。为啥是“可能未初始化”。Null和空字符串”是不一样的2、在线算命3、如何实现提交页面和展示页面类似?两个页面Http的特性:无状态!服务器不记得上次浏览器提交的内容和返回给浏览器的内容。非常健忘。判断是直接显示form内容还是提交的处理自己提交给自己,但是由于Http无状态,笨到自己都不认识自己:通过这个理解Http的工作机制。代码是运行在服务端的,客户端只负责显示。把Submit用起来自己实现PostBack机制,很少有人明白,到了A中的IsPostBack。咱们已经很NB了!下节课安排: (和Web没有直接关系,是Java的基本知识和数据结构的基本应用)提前复习数据结构中关于散列表和散列算法的内容用两个数组实现简繁转换。散列表的应用与散列算法简繁体翻译功能。Java应该这么学第四节1、把字典定义为“键-值对”(Key-Value Pair)的集合。在英汉字典中,英文单词是名字,此单词的中文解释条目是值;在电话簿中,人名是名字,此人名对应的电话号码是值。从字典中查找“键-值对”的最简单方法就是使用数组存储2、1. class KeyValue2. 3. public key;4. public value;5. 6.7. KeyValue kvArray;8. String eng = new Stringbook,computer,money;9. String chn = new String书,电脑,钱;10. String s = 北京欢迎你;11.12. for(int i=0;is.length();i+)13. 14. System.out.println(s.charAt(i);15. 16.17. for(int i=0;itext.length();i+)18. 19. char ch = text.charAt(i);20. int pos = charSC.indexOf(ch);21. char tcCH;22. if (pos = -1)23. 24. tcCH = ch;25. 26. else27. 28. tcCH = charTC.charAt(pos);29. 30. System.out.print(tcCH);31. O(n*n)344毫秒3、使用数组方式实现简繁转换。字典文件:jianfan.txta) 性能测试:翻译一篇100字的文章。算法计时 的方法4、哈希表与散列算法复习哈希方法在“键-值对”的存储位置与它的键之间建立一个确定的对应函数关系hash(),就是key向value的换算关系;使得每一个键与结构中的一个唯一的存储位置相对应:存储位置=hash(键)Value的位置=hash(key)有一组“键值对”:、,我们按照如下哈希函数对键进行计算:hash(x)=x%17+3,得出如下结果:hash(5)=8、hash(8)=11、hash(12)=15、hash(17)=3、hash(20)=6。我们把、分别放到地址为8、11、15、3、6的位置上。当要检索17对应的值的时候,只要首先计算17的哈希值为3,然后到地址为3的地方去取数据就可以找到17对应的数据是“Lily”了。算法复杂度(查询)。O(1)。大大加快数据的查询速度。还有看不明白的回去看数据结构的教材。5、将数据采用哈希算法进行保存的数据结构就是哈希表,常见操作put、get、remove。6、先不管范型7、Java中的HashMap使用(Java内置的哈希表数据结构)HashMap的主要方法int size():得到Map中“键-值对”的数量boolean isEmpty():Map是否是空的,也就是是否不含有任何“键-值对”boolean containsKey(Object key):Map中是否含有以key为键的“键-值对”boolean containsValue(Object value):Map中是否含有以value为值的“键-值对”Object get(Object key):从Map中得到以key为键的值,如果Map中不含有以key为键的“键-值对”则返回nullObject put(Object key, Object value):向Map中存储以key为键、value为值的“键-值对”Object remove(Object key):从Map中移除以key为键的“键-值对”void clear():清除所有“键-值对”Set keySet():得到所有的键Collection values():得到所有的值Set entrySet():得到所有的“键-值对”,Set中的类型是Map.Entry8、工号查询;枚举工号;9、使用HashMap改造简繁转换并进行性能测试/为什么算法复杂度由O(n*n)变成O(n),但是实际执行时间没有明显的变化/print,数据在CPU、内存中运算都非常快,一旦与外设(打印机、网络(网卡)、显示设备(显卡)交换数据,速度就会慢很多。操作系统、计算机组成原理里边讲的。更多内容参考杨中科的J2EE开发全程实录第二章。课下作业:简繁转换web版 词库我会放到板书附件里火星文翻译器(web版)下节课安排: 开发自己的JianFan4J(自己动手写开源项目,自己动手写类库,用工具的人变成造工具的人)打包成jar供别人使用简繁词典下载: jianfan.rar (9.85 KB) 刚看视频,发现一处错误:String eng = new Stringbook,computer,money;String chn = new String书,电脑,钱;应该去掉new String呵呵,继续看,然后作业.Java应该这么学第五节1、火星文翻译器 / 2、为什么要有Jar(别人不用重新编译、防止泄露源代码、复用)3、开发自己的JianFan4J,打包成Jar供别人用(自己动手写开源项目,自己动手写类库,用工具的人变成造工具的人)。Static方法和普通方法的区别,jar文件的导出。Java工程导出Jar包的方式:工程上右键,选择“Export”,选择“JavaJarFile”4、课下作业:开发Huoxingwen4J的开源组件5、Pinyin4j的使用和原理分析6、课下作业:自己动手写Pinyin4j(文件处理、字符处理、HashMap,嵌入资源(可以先读取绝对路径的文件)7、集合:HashSet集合的特征:数据不重复HashSet(挑选出重复的人员)用Set实现从98中选中缺的2个数字这个算法;实现统计字符串中出现的所有字符的算法;面试、笔试的时候能用最优化算法当然最好,如果想不到最优化算法,就是HashSet、HashMap、List等数据结构来实现,分数也不会很低。想不到好算法仍然拿高分的秘籍!下节课内容:1、利用HashMap简化阶乘运算(缓存、缓存命中率),BigInteger的使用2、统计一篇文章中每个字的出现次数(HashMap的应用)3、自己动手写模板引擎(文件处理、架构、Map、占位符、字符串处理、LoadFromFile、LoadFromStream)pinyin4j下载: pinyin4j.rar (98.27 KB)Java应该这么学第六节课程源码下载: TestRuPengPY4j.rar (96.63 KB) TestHashMap.rar (3.94 KB) 下载次数: 8092009-4-6 09:34下载次数: 3592009-4-6 09:341、上节课作业 自己动手写PinYin4j Winrar打开jar文件为什么不提供直接读取文本文件到String字符串中的方法:防止大文件读取占用内存,所以使用“流”的概念,用一行读一行。a)java中读取jar包内的资源文件 getResourceAsStreamb)读取文本文件流,搜索关键字:“InputStream 文本文件” 1. BufferedReader reader = new BufferedReader(new InputStreamReader(inStream);2. line = reader.readLine();3. while (line != null)4. 5. line = reader.readLine(); / 读取下一行6. 7. reader.close();复制代码a)得到char的十六进制Unicode编码的方法(什么是Unicode编码)。Integer.toHexString。搜索关键字“java Char Unicode”1、HashMap应用:100!已经远远超出了int的表示范围 1. BigInteger i1 = new BigInteger(100);2. BigInteger i2 = new BigInteger(888);3. BigInteger i3 = i1.add(i2);4. BigInteger i4 = i1.multiply(i2);5. System.out.println(i3);6. System.out.println(i4);7.8. public static BigInteger jiecheng(int n)9. 10. if(n=0)11. 12. return new BigInteger(1);13. 14. else15. 16. String s = Integer.toString(n);17. /计算n-1的阶乘的时候先到map里查询有没有n-1的阶乘了,如果有则直接到map中取18. if(map.containsKey(n-1)19. 20. return (BigInteger) map.get(n-1);21. 22. else/计算n-1的阶乘,然后放到map中23. 24. BigInteger n_1jiecheng = jiecheng(n-1);25. map.put(n-1, n_1jiecheng);26. return n_1jiecheng.multiply(new BigInteger(s);27. 28. 29. 复制代码课下试验,生成几百个、几千个数字,验证一下是不是比传统的递归
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 教育科技数字化转型案例研究报告
- AI智能行业应用策划
- 纳米级表面形貌测量技术-洞察及研究
- 劳务公司临时用工合同范本4篇
- 防偷拍专业知识培训总结课件
- 超疏水材料开发-洞察及研究
- 云南省昭通市昭阳区联考2024-2025学年八年级下学期3月月考生物试题(含答案)
- 数据隐私保护方案-第3篇-洞察及研究
- 部门聚餐食品安全培训课件
- 赤魟病害防控-洞察及研究
- 2025年秋人教版(2024)初中数学八年级第一学期教学计划及教学进度表
- 纺织企业安全生产知识培训
- 小区物业合伙管理协议书
- 2025年全国小学生“学宪法、讲宪法”活动知识竞赛题库及答案
- 小学心理健康教育四级预警汇报流程
- 软件行业基础知识培训课件
- 教案2025秋形势与政策纪念抗战胜利坚定民族信念抗战胜利80周年
- 传染病医院质量控制检查标准表
- 卷烟零售户培训课件
- 2025年学法减分试题及答案
- 《智能建造概论》高职完整全套教学课件
评论
0/150
提交评论