毕业设计就看结果,哪个管你的具体过程哦。能跑起来运行就可以了,至于你的论文,肯定是按需求文档写呗
目 录一、概要设计……………………………………………………………3二、程序整体设计说明…………………………………………….…..4三、程序部分源代码及注释…………………………………………….9四、测试结果………………………………………………………….24五、设计心得…………………………………………………………25六、致 谢…………………………………………………………25七、参考文献…………………………………………………………25【摘 要】该程序是一个图形界面的java文档编辑器,其界面主要采用了awt包, 程序实现了文本编辑器的基本功能有:新建文件、打开文件、文件保存、文件另存为、剪切、复制、粘贴、删除、查找/替换、改变字体大小,另外还利用Time类的schedule方法实现了文件的定时自动更新功能,并创建备份文件,由于该编辑器是用的awt包,所以在技术上没有实现将Java的关键字以不同颜色显示功能。【关键字】java 编辑器一、概要设计Java程序编辑器是:图形界面、线程、流与文件等技术的综合应用。图形界面的实现:考虑到简单、实用、高效等特点,就选择了AWT来完成实现,在选择组件上,文本编辑区就选用了TaxtArea作为主要的部件。线程实现文件自动保存:在相关的参考书上查阅到在Time类中有一个schedule方法可以在后台自动完成一定的功能,而且调用起来相当简单,于是就用了Time类中的schedule方法来实现文件自动保存及备份功能。文件操作的实现:利用了字符文件流FileReader和FileWriter类来实现。由于Java的特性,可能用任何一个编辑器来编辑,于是就将Windows中的记事本作为模仿对象,根据实现情况删减了其中的一些功能,如自动换行,设置字体,打印等功能。在设计类的时候,考虑到简单明了,就用了两个类,一个主类和一个默认属性类作为程序的整体框架,所有的对象和方法都是在默认属性类中创建和实现的,以及为各组件注册事件监听程序也是在默认属性类中实现的。主类完成对象的实例化及显示。这们设计的优点是:条理清晰,容易理解,容易修改。这样设计的缺点是:不利于共享类中的方法。二、程序整体设计说明2.1、程序框架图2.2、程序中所用类说明(1)用户自定义类类名:EditInstantiation作用:实例化对象继承的父类:WindowAdapter主要成员变量:Frame myFrm // 定义主窗体TextArea myText // 定义文本编辑区Dialog myDlgFind,myDlgFindont //查找及设置字体对话框TextField TFfind, TFreplace, TffontSize//查找对话框和字体窗体中的文本行Button BfontOK, Bfind, Breplace, Bnext, Bcancel //定义和创建各按钮Label Lf, Lr, Ls //定义和创建各标签MenuBar Mbbar //定义和创建主菜单Menu Mfile,Medit,Mformation,Mhelp //定义和创建主菜单中的选项Toolkit toolKitClipboard myCB //剪切板对象FileDialog myFDlg //定义文件对话框Choice ChfontName //定义和创建字体选择框private int VIindex = 1; //构成文件名后缀变量private String VSsubFixStr=".java"; //构成文件名扩展名变量private String VSmyFileName = "Document1",VSmyBFileName;//文件名及备份文件名变量private File VFmyFile=new File(VSmyFileName+VIindex+".java");//文件名变量private int VIsearchPosition=0; //查找位置指针private Timer VTtime; //实例化一个Time类private int VImin=1; // schedule方法中的一个时间参数private int VItype=JOptionPane.INFORMATION_MESSAGE;//提示对话框类型private String VStitle; //提示对话框标题private String VSmessage; //提示对话框信息private boolean VBchanged = true; //改变字体的一个标识private int VIfontSizeMin = 8, VIfontSizeMax = 40, VIfontSizeChangedStep = 2; //设置字体大小及步长主要成员方法:public void init() //初始化各部件菜单的定义和事件的监听public void displayEdit ()//显示窗体及调用Time中的schedule方法public void windowClosing () //关闭窗体public void save //保存文件方法a.内部类类名:KeyEvents作用:实现菜单的事件的响应功能继承的父类:KeyAdapter主要成员变量:无成员方法:actionPerformed()、keyPressed()b.内部类类名:FindKeyEvent作用:实现查找中各部件事件的响应功能继承的父类:无主要成员变量:无成员方法:actionPerformed ()c.内部类类名:fontEvent作用:实现字体中各部件事件的响应功能继承的父类:无主要成员变量:无成员方法:ItemListener(),ActionListener()(2)用户自定义类与Java类的继承关系图如下:自定义类 Java 类线程使用说明2.3、实现接口方法本程序用到的方法有:schedule其方法描述如下:schedule(事件,启动时间,间隔时间);2.4、线程应用本程序为文本编辑器,为实现自动更新,应用到了线程,每隔1分钟对文件进行自动更新2.5、异常处理说明(1)打开文件时的异常处理需要处理的异常:IOException处理方法:捕获异常后,显示捕获的异常(2)保存文件时的异常处理需要处理的异常:IOException处理方法:捕获异常后,显示捕获的异常2.6、程序运行效果及存在的问题(1)程序运行主要界面如下:a、主界面b、打开文件对话框c、保存文件对话框d、另存为文件对话框e、查找/替换对话框f.字体对话框2.7.程序尚还存在的问题我花费了近一个多星期的时间,查阅了许多相关的资料,终于把这个Java编辑器,程序基本实现了该课程设计的基本要求。但由于自己水平有限,使得程序还有不是很完善,首先,最重要的一点是该设计的最重要的功能自动改变java关键字的颜色没有实现。三、程序部分源代码及注释//****************************************************// class name :Edit// implements :none// extends :none// attribute :public// founction :entrance of the class//*****************************************************public class Edit{ //主类public static void main(String args[]){EditInstantiation myEdit= new EditInstantiation();myEdit.init(); //初始化myEdit.displayEdit(); //显示窗体}//****************************************************// class name :EditInstantiation// implements :none// extends :WindowAdapter// attribute :default// founction :EditInstantiation of the main class//*****************************************************class EditInstantiation extends WindowAdapter{ //默认属性类//define sources 定义各部件Frame myFrm=new Frame("我的编辑器"); //定义窗体TextArea myText=new TextArea(); //定义窗体Dialog myDlgFind=new Dialog(myFrm,"查找",true); //定义查找对话框Dialog myDlgFindont=new Dialog(myFrm,"字体",true); //定义字体对话框TextField TFfind=new TextField(30);//定义查找对话中的查找输入框TextField TFreplace=new TextField(30); //定义查找对话中的替换输入框TextField TFfontSize,TFfontDemo;//定义字体大小文本框和示例框Choice CHfontName;//定义字体大小选择框List LTfontSize; //定义字体大小标签Button BfontOK,BfontCancel; //定义字体大小对话中的确定及取消按钮Button Bfind=new Button("查找");//定义查找对话中的查找按钮Button Breplace=new Button("替换");//定义查找对话中的替换及取消按钮Button Bnext=new Button("下一个");//定义查找对话中的下一个及取消按钮Button Bcancel=new Button("取消");//定义查找对话中的确定及取消按钮Label Lf=new Label("查找内容:");Label Lr=new Label("替换为: ");Label Ls=new Label("字体大小:");FileDialog myFDlg;Clipboard myCB=Toolkit.getDefaultToolkit().getSystemClipboard(); //剪切板对象Menu Mfile,Medit,Mformation,Mhelp;MenuBar MBbar;//define varities //定义各变量private int VIindex = 1;private String VSsubFixStr=".java";private String VSmyFileName = "Document1",VSmyBFileName;private File VFmyFile=new File(VSmyFileName+VIindex+".java");private int VIsearchPosition=0;private Timer VTtime;private int VImin=1; // parameter in time schedulprivate int VItype=JOptionPane.INFORMATION_MESSAGE;private String VStitle;private String VSmessage;// flag of the changeingprivate boolean VBchanged = true;// the scope of the fontprivate int VIfontSizeMin = 8, VIfontSizeMax = 40, VIfontSizeChangedStep = 2;//************************************************//founction name:init()//parameter :none//attribute :public//founction :initia all compont//************************************************public void init(){ //初始化各部件//------------------ set menu ------------------MBbar=new MenuBar();myFrm.setMenuBar(MBbar);Mfile=new Menu("文件");Medit=new Menu("编辑");Mformation=new Menu("格式");Mhelp=new Menu("帮助");MBbar.add(Mfile);MBbar.add(Medit);MBbar.add(Mformation);MBbar.add(Mhelp);//文件菜单 add File menuMfile.add(new MenuItem("新建",new MenuShortcut(KeyEvent.VK_N)));Mfile.add(new MenuItem("打开",new MenuShortcut(KeyEvent.VK_O)));Mfile.add(new MenuItem("保存",new MenuShortcut(KeyEvent.VK_S)));Mfile.add(new MenuItem("另存为"));Mfile.addSeparator();//分隔线Mfile.add(new MenuItem("退出",new MenuShortcut(KeyEvent.VK_E)));//编辑菜单 add Edit menuMedit.add(new MenuItem("剪切"));//,new MenuShortcut(KeyEvent.VK_X)));Medit.add(new MenuItem("复制"));//new MenuShortcut(KeyEvent.VK_C)));Medit.add(new MenuItem("粘贴"));//new MenuShortcut(KeyEvent.VK_V)));Medit.add(new MenuItem("删除"));//new MenuShortcut(KeyEvent.VK_D)));Medit.addSeparator();//分隔线Medit.add(new MenuItem("查找/替换",new MenuShortcut(KeyEvent.VK_F)));Medit.addSeparator();//分隔线Medit.add(new MenuItem("全选",new MenuShortcut(KeyEvent.VK_A)));//格式菜单 add Formation menuMformation.add(new MenuItem("字体",new MenuShortcut(KeyEvent.VK_U)));//帮助菜单 add Formation menuMhelp.add(new MenuItem("关于作者"));//----------------- menu add end -------------------------//add Menu Action ListenerMfile.addActionListener(new KeyEvents());Medit.addActionListener(new KeyEvents());Mformation.addActionListener(new KeyEvents());Mhelp.addActionListener(new FindKeyEvent());//--------------------------- Find dialog-----------------myDlgFind.setSize(350,115);myDlgFind.setLocation(250,150);myDlgFind.setLayout(new FlowLayout(FlowLayout.CENTER));myDlgFind.setBackground(Color.LIGHT_GRAY);Bfind.setEnabled(false);Breplace.setEnabled(false);Bnext.setEnabled(false);myDlgFind.add(Lf);myDlgFind.add(TFfind);myDlgFind.add(Lr);myDlgFind.add(TFreplace);myDlgFind.add(Bfind);myDlgFind.add(Breplace);myDlgFind.add(Bnext);myDlgFind.add(Bcancel);myDlgFind.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){myDlgFind.setVisible(false);}});//为查找对话框窗体注册事件监听TFfind.addKeyListener(new KeyEvents());//注册事件监听Bfind.addActionListener(new FindKeyEvent());Breplace.addActionListener(new FindKeyEvent());Bcancel.addActionListener(new FindKeyEvent());Bnext.addActionListener(new FindKeyEvent());//--------------- end add action listener ------------//================set font dialog ==============//font size text fieldTFfontSize = new TextField("8",14);TFfontSize.selectAll();//font size list fieldLTfontSize = new java.awt.List(5, false);LTfontSize.addItemListener(new fontEvent());for(int i = VIfontSizeMin; i <= VIfontSizeMax; i = i + VIfontSizeChangedStep)LTfontSize.add(i + "");//添加字体大小LTfontSize.select(0);//two Button Ok CancelBfontOK = new Button("确定");BfontOK.addActionListener(new fontEvent());BfontCancel = new Button("取消");BfontCancel.addActionListener(new fontEvent());//a TextField for demo the fontTFfontDemo = new TextField("Java awt",37);TFfontDemo.setEditable(false);// my font dialog设置字体对话框myDlgFindont.setLayout(new FlowLayout(FlowLayout.LEFT));myDlgFindont.setBackground(Color.LIGHT_GRAY);myDlgFindont.add(Ls);myDlgFindont.add(TFfontSize);myDlgFindont.add(BfontOK);myDlgFindont.add(BfontCancel);myDlgFindont.add(LTfontSize);myDlgFindont.add(TFfontDemo);myDlgFindont.setSize(300,200);myDlgFindont.setLocation(300,200);myDlgFindont.setResizable(false);myDlgFindont.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {myDlgFindont.show(false);}}); //为字体对话框窗体注册事件监听//=============end set font dialog// =======set Edit frame设置编辑器窗休myFrm.add(myText,BorderLayout.CENTER);myFrm.setSize(500,400);myFrm.setBackground(Color.lightGray);myFrm.addWindowListener(this);myFrm.setSize(500,400);myFrm.setLocation(200,100);myFrm.setTitle("Java编辑器");}//************************************************//founction name:displayEdit()//parameter :none//attribute :public//founction :initial and display the frame//************************************************public void displayEdit(){ //显示窗体myFrm.setVisible(true);//---------------------- auto save ---------------------VTtime = new Timer(true);VTtime.schedule(new java.util.TimerTask(){public void run(){if(VSmyFileName!=null){save(VSmyFileName+".java");VSmyBFileName=VSmyFileName+".bak";} //添加自动保存功能save(VSmyBFileName);}}, VImin*60*1000,VImin*60*1000);//parament 1 the task//parament 2 when to start the task//parament 3 set the interval time }//****************************************************// class name :KeyEvents// implements :ActionListener// extends :KeyAdapter// attribute :default// founction :implement the mouse and key action//*****************************************************class KeyEvents extends KeyAdapter implements ActionListener{//********************************************************//founction name:actionPerformed()//parameter :none//attribute :public//return :void//founction :realize the key action in the menu//*********************************************************public void actionPerformed(ActionEvent e){//完成菜单事件的功能// File Menuif (e.getActionCommand()=="新建"){//remind youJFrame aFrame=new JFrame();aFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JOptionPane optionPane=new JOptionPane();String choices[]={"是","否","取消"};int n=optionPane.showOptionDialog(aFrame,"文件正文已更改,是否保存更改","文本编辑器",JOptionPane.YES_NO_CANCEL_OPTION,JOptionPane.WARNING_MESSAGE,null,choices,choices[0]);//保存文件后新建if(n==0){//若文件存在,保存在原文件中,再新建文件try{if(VFmyFile.exists()){save(VSmyFileName); // call the save founctionmyText.setText("");VIindex++;}else{//若文件不存在,则保存后再新建myFDlg=new FileDialog(myFrm,"保存文件",FileDialog.SAVE);myFDlg.setFile(VSmyFileName);myFDlg.show();VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();save(VSmyFileName);myText.setText("");VIindex++;}}catch(Exception ne){}}//不保存文件新建if(n==1){myText.setText("");VIindex++;}//取消新建if(n==0){return;}}//打开菜单 Open Menuif (e.getActionCommand()=="打开") {myFDlg=new FileDialog(myFrm,"打开",FileDialog.LOAD);myFDlg.show();if (myFDlg.getFile()!="") {VFmyFile=new File(myFDlg.getDirectory()+myFDlg.getFile());VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();if( VFmyFile.exists()){try{FileReader fr=new FileReader(VFmyFile);BufferedReader br=new BufferedReader(fr);String text;myText.setText("");while ((text=br.readLine())!=null)myText.append(text+"\r\n");br.close();fr.close();}catch(IOException ioe){VStitle="提示";VSmessage="打开文件出错";JOptionPane.showMessageDialog(myFrm,VSmessage,VStitle,VItype);}}}}//保存菜单 Save Menuif (e.getActionCommand()=="保存"){myFDlg=new FileDialog(myFrm,"保存文件",FileDialog.SAVE);myFDlg.setFile(VSmyFileName);myFDlg.show();VSmyFileName=myFDlg.getFile();if(VSmyFileName!=null){VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();save(VSmyFileName);}}//另存为菜单 SaveAs Menuif (e.getActionCommand()=="另存为"){myFDlg=new FileDialog(myFrm,"文件另存为",1);myFDlg.setFile(VSmyFileName);myFDlg.show();VSmyFileName=myFDlg.getFile();if(VSmyFileName!=null){VSmyFileName=myFDlg.getDirectory()+myFDlg.getFile();save(VSmyFileName);}}//退出菜单 exit Menuif (e.getActionCommand()=="退出")System.exit(0);//编辑 Edit Menuif (e.getActionCommand()=="剪切"){//CutString text =myText.getSelectedText();StringSelection selection = new StringSelection(text);myCB.setContents(selection, null);myText.replaceRange("",myText.getSelectionStart(),myText.getSelectionEnd());}if (e.getActionCommand()=="复制"){//copyString text=myText.getSelectedText();if(text!=null){StringSelection selection=new StringSelect
java程序站专门收集整理了《Java工程师成神之路(1)》问题和答案整理成册,分成系列文章分享给大家。基础篇01面向对象→ 什么是面向对象、面向过程?面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向对象的三大基本特征和五大基本原则?一、三大基本特征:封装、继承、多态1、封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏2、继承:所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展3、多态:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用二、五大基本原则1、单一职责原则(SRP)是指一个类的功能要单一,不能包罗万象2、开放封闭原则(OCP)一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的3、里氏替换原则(LSP)子类应当可以替换父类并出现在父类能够出现的任何地方。继承的体现4、依赖倒置原则(DIP)具体依赖抽象,上层依赖下层。5、接口隔离原则(ISP)模块间要通过抽象接口隔离开,不通过具体的类关联,降低耦合度→ 平台无关性什么是平台无关性,Java是如何做到平台无关的?平台无关(跨平台): 一种语言在计算机上的运行不受平台的约束,一次编译到处运行。Java经过编译之后生成的.class 的字节码文件,运行平台上只要有JVM就能运行,不需要进行再次编译JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)→ 值传递值传递、引用传递java中只存在值传递,只存在值传递!!! 然而我们经常看到对于对象(数组,类,接口)的传递似乎有点像引用传递,可以改变对象中某个属性的值。但是不要被这个假象所蒙蔽,实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是按值传递。为什么说 Java 中只有值传递?Java 语言的参数传递只有「按值传递」。当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 是永远不会改变的。按值传递的精髓是:传递的是存储单元中的内容,而不是存储单元的引用!→ 封装、继承、多态继承多态方法重载与方法重写修饰符代码块final关键字代码块的执行顺序:静态代码块优先于构造代码块,构造代码块优先于构造方法。02 Java 基础知识→ 基本数据类型7 种基本数据类型:整型、浮点型、布尔型、字符型以及取值范围?什么是浮点型?什么是单精度和双精度?单精度浮点数(float)与双精度浮点数(double)的区别如下:(1)在内存中占有的字节数不同单精度浮点数在机内占4个字节双精度浮点数在机内占8个字节(2)有效数字位数不同单精度浮点数有效数字8位双精度浮点数有效数字16位(3)所能表示数的范围不同单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308(4)在程序中处理速度不同一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快为什么不能用浮点型表示金额?金额计算不能用doube!必须用BigDecimal1.出现科学计数法2.计算金额不准确,丢失精度→ 自动拆装箱什么是包装类型、什么是基本类型?1、为什么存在基本类型:在Java中正常应该设置对象,然后通过new一个对象存储在堆中,再通过栈的引用来使用对象,但对于简单的小的变量,用new显的繁琐麻烦,所以产生了基本类型2、有了基本类型,为什么还会产生包装类型:(1)什么是包装类:包装类型相当于将基本类型包装起来,使其具有对象的性质,并且可以添加属性和方法,丰富了基本类型的操作。(2)包装类型具有哪些好处:符合Java面向对象编程特征使用集合Collection就一定要用包装类型需要往ArrayList,HashMap放东西,int和double是放不进去的3、二者相互转换(1)int转换integerint i=0ineger ii=new integer(i)(2)integer转intinteger ii=new interger(0)int i=ii.intValue();4、二者的区别(1)基本类型直接声明而包装类型需使用new关键字来在堆中分配内存空间(2)基本类型存储在栈中而包装类型存储在堆中通过引用(3)基本类型初始值,int为0,boolean为false。包装类型初始值为null(4)基本类型直接赋值使用就好,包装类型需要在集合如Collection、map时会使用什么是自动拆装箱?自动装箱: 就是将基本数据类型自动转换成对应的包装类。自动拆箱:就是将包装类自动转换成对应的基本数据类型。自动装箱都是通过包装类的valueOf()方法来实现的.自动拆箱都是通过包装类对象的xxxValue()来实现的。Integer 的缓存机制?当使用自动装箱的时候,也就是将基本数据类型传递给对象类的时候触发自动装箱。这个时候java虚拟机会创建一系列的整数并且缓存到一个数组中以便直接使用,这就是缓存策略→ String字符串的不可变性JDK 6 和 JDK 7 中 substring 的原理及区别?JDK6中,String是通过字符数组实现的,String类包含三个成员变量:char value[], int offset,int count。他们分别用来存储真正的字符数组,数组的第一个位置索引以及字符串中包含的字符个数。JDK6中的substring导致的问题如果字符串很长,但是只需substring切割很短的一段。这可能导致性能问题,因为只需要的是一小段字符序列,却引用了整个字符串(因为这个很长的字符数组一直被引用,而无法被回收,就可能导致内存泄露)。在JDK 6中,一般用以下方式来解决该问题,原理其实就是生成一个新的字符串并引用他。x = x.substring(x, y) + ""JDK 7 中的substring上述问题,在JDK7中得到解决。在jdk 7 中,substring方法会在堆内存中创建一个新的数组。//JDK 7public String(char value[], int offset, int count) {//check boundarythis.value = Arrays.copyOfRange(value, offset, offset + count);}public String substring(int beginIndex, int endIndex) {//check boundaryint subLen = endIndex - beginIndex;return new String(value, beginIndex, subLen);}replaceFirst、replaceAll、replace 区别?· replace(CharSequence target, CharSequence replacement) ,用replacement替换所有的target,两个参数都是字符串。· replaceAll(String regex, String replacement) ,用replacement替换所有的regex匹配项,regex很明显是个正则表达式,replacement是字符串。· replaceFirst(String regex, String replacement) ,基本和replaceAll相同,区别是只替换第一个匹配项。String s = "my.test.txt";System.out.println(s.replace(".", "#")); // replace将字符串中的. 都替换为 #System.out.println(s.replaceAll(".", "#")); // replaceAll 用到了正则表达式,其中. 是任意字符的意思,所以结果是字符串全部替换为#System.out.println(s.replaceFirst(".", "#")); // replaceFirst 用到了正则表达式, 其中. 是任意字符的意思,所以第一个字符被#号代替System.out.println(s.replaceFirst("\\.", "#")); // 正则表达式中双杠是原生字符串的意思,所以结果是字符串中第一个. 被#代替得到String 对“+”的重载?String 类底层是一个 final 修饰的 char 类型数组,意味着 String 类的对象是不可变的,所以 String 对象可以共享。String 类中的每一个看起来会修改 String 值的方法,实际上都是创建了一个全新的 String 对象,用来包含修改后的字符串内容,这也可以说明 String 对象具有只读的属性。String fruit = "Apple," + "Pear," + "Orange";编译器会创建一个 StringBuilder 对象,用来构造最终要生成的 String,并为每一个字符串调用一次 StringBuilder 中的 append() 方法,因此代码一共执行了三次 append() 方法。最后调用 toString 生成最终的结果,并保存为 fruit。字符串拼接的几种方式和区别?1.无论如何直接用“+”号连接字符串都是最慢的2.在拼接少数字符串(不超过4个)的时候,concat效率是最高的3.多个字符串拼接的时候,StringBuilder/StringBuffer的效率是碾压的4.在不需要考虑线程安全问题的时候,使用StringBuilder的效率比StringBuffer更高String.valueOf 和 Integer.toString 的区别?String.valueOf()可以应用到任何数据类型,且不会有异常报出。Integer.toString()表示先讲int转换成Integer型,然后再将Integer转换成String型。总的来说 String.valueOf()用的比较多(应用的数据类型无限制),但是基本上每个JAVA对象都会有一个toString方法。2个方法的运行结果还是一样的,只是原理(运行过程)不一样.switch 对 String 的支持?java中switch支持String,是利用String的hash值,本质上是switch-int结构。并且利用到了equals方法来防止hash冲突的问题。最后利用switch-byte结构,精确匹配。字符串池、常量池(运行时常量池、Class 常量池)、intern?1.全局常量池在每个VM中只有一份,存放的是字符串常量的引用值。2.class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量的符号引用。3.运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。→ 熟悉 Java 中各种关键字transient、instanceof、final、static、volatile、synchronized、const 原理及用法transient:修饰变量,在实现Serializable接口的类中,可以避免持久化,但是如果实现的是Externalizable接口,那么手动序列化会无视 transient。instanceof:对象 instanceof 类,检查对象是否是这个类或者这个类的子类的对象,返回布尔值。volatile:轻量级的线程安全的实现,但是要注意用法,某些场合不适合用volatile,保证可见性,有序性synchronized:线程安全的修饰符,锁住对象的访问权限。final:final修饰类:该类不可继承final修饰方法:该方法不能被子类覆盖(但它不能修饰构造函数)final修饰字段属性:属性值第一次初始化后不能被修改使用final可以提高程序执行的效率,将一个方法设成final后编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。static:static修饰成员函数则该函数不能使用this对象static不能修饰构造函数、函数参数、局部成员变量static修饰成员字段则当类被虚拟机加载时按照声明先后顺序对static成员字段进行初始化。static修饰语句块:当类被虚拟机加载时按照声明先后顺序初始化static成员字段和static语句块static所修饰的方法和字段只属于类,所有对象共享,java不能直接定义全局变量,是通过static来实现的。java中没有const,不能直接定义常量,是通过static final组合来实现的。专注java职场经验,技术分享,欢迎关注公众号:程序秘籍
你在大学里学的是知识吗?你学的是思维方式!今天知识很廉价,b站里各种授课,各种网课。大学里的教材都很陈旧,都是好多年前的东西了。当你踏上社会,用人单位用的是好多年前的旧知识?书本上有的才会要求你做?全都不是,全都是你没接触过,没学过的东西。你在大学里面学的唯一有用的就是你对于你的专业的思维方式。运用你的编程思维方式,去解决工作上的一个又一个项目。程序员的思维方式是什么?面相对象+数据结构+算法。你告诉我,你用面相过程来先毕业论文?你弄个文凭是用来干嘛的?你4年大学学的是啥?我是面试官,我问你毕业设计写的是啥,你就给我这个?
TAGS: 毕业论文 计算机 基于 远程 对象 RMI 方法 实现 调用 哪位老兄有计算机毕业设计论文啊?是基于java的,小弟急用,谢谢!用RMI开发基于Java的企业分布式应用我站还提供更多的免费计算机论文,但免费论文仅供参考,建议广大网友下载后不要轻易采用。摘要由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了行之有效的解决方案。关键词 Java RMI 企业分布式应用 1 概述随着电力企业信息化建设的不断深入和发展,企业内部和企业与企业之间对信息、对数据的交换量大大增加,这些信息与数据越来越需要在不同的计算机网络间传送和交流。同时,由于各单位、各部门之间的现存的计算机网络硬件设备与操作系统千差万别,应用水平也参差不齐,因此,开发出跨平台、可移植、高效安全的网络分布式应用来服务于电力企业,就显得尤为重要。在当今的编程术语里,分布式计算已经成为很常见的词,它将企业的业务数据和程序分布在网络的不同物理位置上,通过调动网络上多台计算机的处理能力,发挥远程调用数据的功能。远程方法调用(Remote Method Invocation ,RMI),可以在不同的Java虚拟机(JVM)之间实现对象与对象的通信。JVM可以位于相同或不同计算机上,在多个JVM中,一个JVM可以调用存储在其它JVM的对象的方法。本文主要介绍RMI的特点,分析应用RMI进行企业分布式计算的原理,以及利用RMI实现基于Java的企业分布式应用的具体步骤。2 远程方法调用(RMI)的特点2.1 TCP编程的缺点由于Java编程语言设计之初就是面向对象和支持网络的,因此,基于对象的RMI机制已经内置在Java平台中。我们经常会在网络开发中使用TCP/IP编程,这样,自然而然地就会涉及到Socket(套接字)编程。但是,使用Socket编程需要大量重复编码,在复杂分布式操作时显得非常麻烦,而且易于出错。因此,如何快速、高效、安全、可扩展地进行网络分布式计算,是开发者们一贯追求和倡导的主题。直到RMI的出现,这种繁杂、低效的开发情况才有很大改观。2.2 RMI编程的特点当我们利用对象序列化在网络上分配对象时,RMI提供了非Java平台无法匹敌的独特而强电子商务资料库)*!%267'$#7'455大的分布式计算模型,RMI主要有以下特点:? 客户机可以向本地方法一样调用远程服务器上的方法;? 可以根据接口指定客户机/服务器编程合约;? 可以从服务器对象缺省二进制类文件,自动生成调动/反调动代码;? 将Java编程模型扩展到机器边界(和Java虚拟机(JVM)边界之外),不需要任何特殊语法;? 还可以和一个远程方法调用中的数据同时传输行为(代码)。尽管RMI不是唯一的企业级远程对象访问方案,但它却是最容易实现的。2.3 RMI与CORBA作为分布式应用程序框架的规范,COBRA首当其冲,它是由对象管理组织(OMG)开发的。与CORBA不同的是,CORBA能够利用不同编程语言(例如C/C++、Basic等)开发实现分布式应用,而RMI是一种纯Java解决方案。在RMI中,程序的所有部分都由Java语言编写,这样,开发出来的程序完全符合Java规范,便于实现跨平台访问、扩展和移植。按照笔者所在西北电力建设集团公司的情况看,服务器操作系统主要有Linux和Windows2000 Server,分别存在于公司和部门当中,它们是不同的系统平台;同时,公司下属各个工程项目部又距离很远,近的几十公里,远则达到上千公里甚至位于国外,因此跨平台和远程访问这两大功能在开发企业应用系统时就必须考虑,而RMI恰恰能够用它的自身特点来满足编程需要。3 RMI基本体系结构简介RMI通过TCP/IP在内部使用Socket,象其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。RMI的目的是让位于不同JVM中的对象,在外观及行为上都像是本地的对象。通常,我们把调用这种远程对象的JVM,称为客户机;而把包括这种远程对象的JVM,称为服务器。尽管对一个远程对象的引用和获得对本地对象的引用有所不同,但我们可以把远程对象像本地对象一样使用。应用程序并不知道一个对象是远程的还是本地的。实际上,远程对象上被调用的方法与本地对象上调用的方法,具有相同的语法结构。作为RMI的底层(会包含复杂的Socket操作),它会自动截获方法调用,找到远程对象,然后处理远程请求。笔者认为,RMI设计的重要之处,就在于不但在设计上实现了远程访问功能,而且实现了设计的透明性。RMI的基本体系结构,概括起来说,由三个抽象层组成:3.1 存根/框架层(Stubs/Skeletons Layer)
java程序站专门收集整理了《Java工程师成神之路(1)》问题和答案整理成册,分成系列文章分享给大家。基础篇01面向对象→ 什么是面向对象、面向过程?面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。面向对象的三大基本特征和五大基本原则?一、三大基本特征:封装、继承、多态1、封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏2、继承:所谓继承是指可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展3、多态:所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用二、五大基本原则1、单一职责原则(SRP)是指一个类的功能要单一,不能包罗万象2、开放封闭原则(OCP)一个模块在扩展性方面应该是开放的而在更改性方面应该是封闭的3、里氏替换原则(LSP)子类应当可以替换父类并出现在父类能够出现的任何地方。继承的体现4、依赖倒置原则(DIP)具体依赖抽象,上层依赖下层。5、接口隔离原则(ISP)模块间要通过抽象接口隔离开,不通过具体的类关联,降低耦合度→ 平台无关性什么是平台无关性,Java是如何做到平台无关的?平台无关(跨平台): 一种语言在计算机上的运行不受平台的约束,一次编译到处运行。Java经过编译之后生成的.class 的字节码文件,运行平台上只要有JVM就能运行,不需要进行再次编译JVM 还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)→ 值传递值传递、引用传递java中只存在值传递,只存在值传递!!! 然而我们经常看到对于对象(数组,类,接口)的传递似乎有点像引用传递,可以改变对象中某个属性的值。但是不要被这个假象所蒙蔽,实际上这个传入函数的值是对象引用的拷贝,即传递的是引用的地址值,所以还是按值传递。为什么说 Java 中只有值传递?Java 语言的参数传递只有「按值传递」。当一个实例对象作为参数被传递到方法中时,参数的值就是该对象的引用的一个副本。指向同一个对象,对象的内容可以在被调用的方法内改变,但对象的引用(不是引用的副本) 是永远不会改变的。按值传递的精髓是:传递的是存储单元中的内容,而不是存储单元的引用!→ 封装、继承、多态继承多态方法重载与方法重写修饰符代码块final关键字代码块的执行顺序:静态代码块优先于构造代码块,构造代码块优先于构造方法。02 Java 基础知识→ 基本数据类型7 种基本数据类型:整型、浮点型、布尔型、字符型以及取值范围?什么是浮点型?什么是单精度和双精度?单精度浮点数(float)与双精度浮点数(double)的区别如下:(1)在内存中占有的字节数不同单精度浮点数在机内占4个字节双精度浮点数在机内占8个字节(2)有效数字位数不同单精度浮点数有效数字8位双精度浮点数有效数字16位(3)所能表示数的范围不同单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308(4)在程序中处理速度不同一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快为什么不能用浮点型表示金额?金额计算不能用doube!必须用BigDecimal1.出现科学计数法2.计算金额不准确,丢失精度→ 自动拆装箱什么是包装类型、什么是基本类型?1、为什么存在基本类型:在Java中正常应该设置对象,然后通过new一个对象存储在堆中,再通过栈的引用来使用对象,但对于简单的小的变量,用new显的繁琐麻烦,所以产生了基本类型2、有了基本类型,为什么还会产生包装类型:(1)什么是包装类:包装类型相当于将基本类型包装起来,使其具有对象的性质,并且可以添加属性和方法,丰富了基本类型的操作。(2)包装类型具有哪些好处:符合Java面向对象编程特征使用集合Collection就一定要用包装类型需要往ArrayList,HashMap放东西,int和double是放不进去的3、二者相互转换(1)int转换integerint i=0ineger ii=new integer(i)(2)integer转intinteger ii=new interger(0)int i=ii.intValue();4、二者的区别(1)基本类型直接声明而包装类型需使用new关键字来在堆中分配内存空间(2)基本类型存储在栈中而包装类型存储在堆中通过引用(3)基本类型初始值,int为0,boolean为false。包装类型初始值为null(4)基本类型直接赋值使用就好,包装类型需要在集合如Collection、map时会使用什么是自动拆装箱?自动装箱: 就是将基本数据类型自动转换成对应的包装类。自动拆箱:就是将包装类自动转换成对应的基本数据类型。自动装箱都是通过包装类的valueOf()方法来实现的.自动拆箱都是通过包装类对象的xxxValue()来实现的。Integer 的缓存机制?当使用自动装箱的时候,也就是将基本数据类型传递给对象类的时候触发自动装箱。这个时候java虚拟机会创建一系列的整数并且缓存到一个数组中以便直接使用,这就是缓存策略→ String字符串的不可变性JDK 6 和 JDK 7 中 substring 的原理及区别?JDK6中,String是通过字符数组实现的,String类包含三个成员变量:char value[], int offset,int count。他们分别用来存储真正的字符数组,数组的第一个位置索引以及字符串中包含的字符个数。JDK6中的substring导致的问题如果字符串很长,但是只需substring切割很短的一段。这可能导致性能问题,因为只需要的是一小段字符序列,却引用了整个字符串(因为这个很长的字符数组一直被引用,而无法被回收,就可能导致内存泄露)。在JDK 6中,一般用以下方式来解决该问题,原理其实就是生成一个新的字符串并引用他。x = x.substring(x, y) + ""JDK 7 中的substring上述问题,在JDK7中得到解决。在jdk 7 中,substring方法会在堆内存中创建一个新的数组。//JDK 7public String(char value[], int offset, int count) {//check boundarythis.value = Arrays.copyOfRange(value, offset, offset + count);}public String substring(int beginIndex, int endIndex) {//check boundaryint subLen = endIndex - beginIndex;return new String(value, beginIndex, subLen);}replaceFirst、replaceAll、replace 区别?· replace(CharSequence target, CharSequence replacement) ,用replacement替换所有的target,两个参数都是字符串。· replaceAll(String regex, String replacement) ,用replacement替换所有的regex匹配项,regex很明显是个正则表达式,replacement是字符串。· replaceFirst(String regex, String replacement) ,基本和replaceAll相同,区别是只替换第一个匹配项。String s = "my.test.txt";System.out.println(s.replace(".", "#")); // replace将字符串中的. 都替换为 #System.out.println(s.replaceAll(".", "#")); // replaceAll 用到了正则表达式,其中. 是任意字符的意思,所以结果是字符串全部替换为#System.out.println(s.replaceFirst(".", "#")); // replaceFirst 用到了正则表达式, 其中. 是任意字符的意思,所以第一个字符被#号代替System.out.println(s.replaceFirst("\\.", "#")); // 正则表达式中双杠是原生字符串的意思,所以结果是字符串中第一个. 被#代替得到String 对“+”的重载?String 类底层是一个 final 修饰的 char 类型数组,意味着 String 类的对象是不可变的,所以 String 对象可以共享。String 类中的每一个看起来会修改 String 值的方法,实际上都是创建了一个全新的 String 对象,用来包含修改后的字符串内容,这也可以说明 String 对象具有只读的属性。String fruit = "Apple," + "Pear," + "Orange";编译器会创建一个 StringBuilder 对象,用来构造最终要生成的 String,并为每一个字符串调用一次 StringBuilder 中的 append() 方法,因此代码一共执行了三次 append() 方法。最后调用 toString 生成最终的结果,并保存为 fruit。字符串拼接的几种方式和区别?1.无论如何直接用“+”号连接字符串都是最慢的2.在拼接少数字符串(不超过4个)的时候,concat效率是最高的3.多个字符串拼接的时候,StringBuilder/StringBuffer的效率是碾压的4.在不需要考虑线程安全问题的时候,使用StringBuilder的效率比StringBuffer更高String.valueOf 和 Integer.toString 的区别?String.valueOf()可以应用到任何数据类型,且不会有异常报出。Integer.toString()表示先讲int转换成Integer型,然后再将Integer转换成String型。总的来说 String.valueOf()用的比较多(应用的数据类型无限制),但是基本上每个JAVA对象都会有一个toString方法。2个方法的运行结果还是一样的,只是原理(运行过程)不一样.switch 对 String 的支持?java中switch支持String,是利用String的hash值,本质上是switch-int结构。并且利用到了equals方法来防止hash冲突的问题。最后利用switch-byte结构,精确匹配。字符串池、常量池(运行时常量池、Class 常量池)、intern?1.全局常量池在每个VM中只有一份,存放的是字符串常量的引用值。2.class常量池是在编译的时候每个class都有的,在编译阶段,存放的是常量的符号引用。3.运行时常量池是在类加载完成之后,将每个class常量池中的符号引用值转存到运行时常量池中,也就是说,每个class都有一个运行时常量池,类在解析之后,将符号引用替换成直接引用,与全局常量池中的引用值保持一致。→ 熟悉 Java 中各种关键字transient、instanceof、final、static、volatile、synchronized、const 原理及用法transient:修饰变量,在实现Serializable接口的类中,可以避免持久化,但是如果实现的是Externalizable接口,那么手动序列化会无视 transient。instanceof:对象 instanceof 类,检查对象是否是这个类或者这个类的子类的对象,返回布尔值。volatile:轻量级的线程安全的实现,但是要注意用法,某些场合不适合用volatile,保证可见性,有序性synchronized:线程安全的修饰符,锁住对象的访问权限。final:final修饰类:该类不可继承final修饰方法:该方法不能被子类覆盖(但它不能修饰构造函数)final修饰字段属性:属性值第一次初始化后不能被修改使用final可以提高程序执行的效率,将一个方法设成final后编译器就可以把对那个方法的所有调用都置入“嵌入”调用里。static:static修饰成员函数则该函数不能使用this对象static不能修饰构造函数、函数参数、局部成员变量static修饰成员字段则当类被虚拟机加载时按照声明先后顺序对static成员字段进行初始化。static修饰语句块:当类被虚拟机加载时按照声明先后顺序初始化static成员字段和static语句块static所修饰的方法和字段只属于类,所有对象共享,java不能直接定义全局变量,是通过static来实现的。java中没有const,不能直接定义常量,是通过static final组合来实现的。专注java职场经验,技术分享,欢迎关注公众号:程序秘籍
你在大学里学的是知识吗?你学的是思维方式!今天知识很廉价,b站里各种授课,各种网课。大学里的教材都很陈旧,都是好多年前的东西了。当你踏上社会,用人单位用的是好多年前的旧知识?书本上有的才会要求你做?全都不是,全都是你没接触过,没学过的东西。你在大学里面学的唯一有用的就是你对于你的专业的思维方式。运用你的编程思维方式,去解决工作上的一个又一个项目。程序员的思维方式是什么?面相对象+数据结构+算法。你告诉我,你用面相过程来先毕业论文?你弄个文凭是用来干嘛的?你4年大学学的是啥?我是面试官,我问你毕业设计写的是啥,你就给我这个?
毕业设计就看结果,哪个管你的具体过程哦。能跑起来运行就可以了,至于你的论文,肯定是按需求文档写呗
package homework.day15;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.InputEvent;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.swing.JButton;import javax.swing.JDialog;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JMenu;import javax.swing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import javax.swing.JScrollPane;import javax.swing.JTextArea;import javax.swing.JTextField;import javax.swing.KeyStroke;import javax.swing.undo.UndoManager;/*** Autho : showncx* time : Oct 14, 2008 8:31:00 AM* insert here....*/public class NoteBook extends JFrame implements ActionListener{private static final long serialVersionUID = 1L;private JFileChooser fileDialog;private JTextArea content;private JDialog dialog;private JPopupMenu jpm;private JTextField rep_word1,rep_word2;private String rep_director,rep_newword;private JLabel rep_mes1,rep_mes2;// private boolean isUndo = false;private String fileInfo = null;private String[] menus = new String[]{"File","Edit","Format","View","Help"};private String[][] menuItems = new String[][]{{"new","open","save","anotherSave","","setter","print","exit"},{"undo","","cut","copy","paste","delete","","forward/replace","goto","","allselect","time/date"},{"auto_change","font"},{"status"},{"help"}};private String[] popItems = new String[]{"undo","","cut","copy","paste","delete","selectall","","a_it's so short want it longger..."};// private LinkedList
论文写作日志
日志是日记的一种,是一种记录了我们的生活和情感的写作模式,以下是我J.L为大家分享的关于论文写作日志范文。
2013年11月28日,终于结束了为期三个月的教育实习,实习的结束,意味着毕业论文写作的开始,毕业论文的开始同样意味着大学生活的结束。想想这四年的时光过得可真快。
2013年12月
学院里公布要开始选导师了,并且自己要初步拟定论文的选择,一下子觉得毕业在即。选题是个比较困难的事,因为当初自己也没有一个明确的目标,到底要选择一个什么样的题目,但在选择导师的时候,我忽然想到大三有一门课程是《现代远程教育》,我对远程教育这方面的知识挺感兴趣的,所以我确定了论文的指导老师是马红亮老师,相应的论文选题在自己心里也有了大概。但是,马老师当时正在英国留学,所以只能等到来年3月份才能与到时见面,再做进一步的指导。
20xx年2月17日~2月28日
这段时间,刚过完年回到学校不久,身边的大多数同学都已经与导师见面,并且进一步的确定了论文题目,而我的导师还远在大洋彼岸留学,三月份才能回来,所以我就先自己搜集了一些资料,不过这些资料都是与远程教育有关的,没有导师的指导,我就像盲人一样瞎摸索,不知道重点,不也知道研究的关键,只是下载了一堆杂乱无章的资料。
20xx年3月
这是三月的第一个周末,晚点名的时候,我听身边的同学说马红亮老师出国回来了,于是我准备第二天就和导师联系,想尽快把论文的题目确定下来。
星期一的中午,我去找导师,一年多没见,老师看着比原来更帅、更有学问了。导师问我,自己有没有想做的课题,我说我想写与远程教育有关的论文,当老师问我具体是关于那个方面的,我自己却又答不上来,老师说这个范围太广了,我写不出来有价值的东西。不过老师说的确实也是实情,本科期间,专业知识我只是学了一点皮毛,甚至连了解都称不上,还想写那么有深度的文章,这不是难为自己么。于是,关于论文选题,不得不重新思考,正当我和导师思考的时候,马老师带的研究生学姐给了一个建议说:“现在手机微信很火,而且这个软件是新发展起来的,你可以想一下要是把这个软件引用到移动学习中怎么样?”学姐的一句话提醒了我和导师,所以论文的选题就这样定下来了,写微信在移动学习中的应用。
20xx年4月
3月,写完了开题报告,紧接着便是收集整理资料,之前手机的那些资料一点儿都用不上,现在又得重新开始,这一过程是漫长而枯燥的, 翻阅各种文献
资料,查找与自己论文有关的信息,渐渐地,与微信有关的资料我都熟悉了,对于自己的论文我也有了一个大概的提纲,并初步完成了开题报告,经过马红亮老师的知道、修改、签字,最终完成了毕业论文的开题报告。4月,主要完成了论文的初稿,在马老师的指导下,通过参考相关的书籍和文献资料,根据论文的写作提纲,经过一个月左右的时间,初步完成了论文的初稿,完成以后,我和导师联系,我把初稿拿给老师看,里面有很多问题,而且一些理论阐述得也不是很完善,于是我又重新对论文进行修改,第二次、第三次去找导师,虽然论文还有一些不足之处,但相比于第一次已经好了很多。
20xx年5月
在导师的指导下,我反复对论文进行了修改了,最终按照导师和学院的要求,完成了毕业论文的写作。5月16-18号按照论文答辩的要求准备毕业论文答辩前的材料,包括一篇英文文献的翻译,论文写作日志,填写并提交毕业论文答辩申请表。
在论文写作及修改过程中锻炼了自己的耐力,培养了自己的耐心,同时进一步受到马老师严谨、一丝不苟的工作态度的影响。他在论文写作上对我的启蒙和教诲将使我受益终生。
20xx年12月14日
今天学校举行了毕业论文动员大会,听到这个消息时,我才意识到毕业就要来临了,一丝紧迫感油然而生。
大会主要给我们每个人分配了论文小组,还为我们指派了论文的指导老师。然后,大会向我们公布了,论文写作的主要日程,从二月开始,到六月中旬止。时间上还算宽裕,从下一年二月就要开始选题了,我要充分利用这几个时间,先去了解一下往届的论文写作经验,然后去学习一下学长们的选题技巧,争取选择一个适合自己的题目,为写好论文做好准备。
说道毕业论文,对我们来说,如此重要的任务还是第一次,虽然毕业论文没有笔试,但是它比单纯的应试更难,因为毕业论文是对我们综合能力的一个全方位考量,我们要去认真的应对它。
20xx年2月12日
大学毕业终要来临,在珍贵的大四下半学期,我们迎来了四年中最后的时刻,就是完成我们的毕业论文。
下个星期就要开始毕业论文的选题了,我个人认为题目的选择是自己论文书写过程成功的开始,最终选择的题目要符合我心中以下的几个要求;
首先,是自己感兴趣的,要让自己在课外也能不由自主的去了解其内在的题目。
其次,是自己所擅长的,如果自己在这个题目上没有一点基础那还不如不选,因为那样不仅写不出优秀的论文更像是在黑暗中没有头绪的摸索。
最后,是主流的研究课题,因为如果选择了一个主流的研究的课题,在写作的过程中会有很多国际与国内的先进研究经验供我研究,使我写出优秀的毕业论文。
论文是我们大学中最重要的事情之一,我们要在认真、求是与创新的基础上书写我们大学生活最后的篇章。
20xx年2月17日
本周我们专业完成了毕业论文的选题,看到那么多的题目好多人都不知道选择什么好了,因为看到的都是陌生的,不过换个角度讲,如果毕业论文的题目都是平常见过的,那么我们也不需要毕业论文了。
同样的,我也在很多的论文题目中看花了眼,不知所措,感觉大部分都是略知一二,但是直观上却是模糊的,但还好我有自己制定的选题三原则,针对这三条原则,我在还没有被选走的题目中一个个筛选,最终在几个心仪的题目中选择了《会计电算化对现代审计工作的影响及对策》。
题目选好了,接下来的一周就应该进行中外论文材料的搜集,由于要求至少一篇外文文献,这应该是写作过程中最大的问题了,虽然觉得外文文献没什么用,但转念一想也是我们与时俱进的表现。
20xx年2月25日
一个星期又过去了,在这一个星期里我完成了外文文献的查找并将其翻译成中文,说到外文文献的查找,离不开学校图书馆为我们购买的各种数据库,里面应有尽有,可以查找各种中外文期刊,为我校师生写作论文提供了一个快捷、高效与低成本的写作平台。
本次我查找的外文文献自EBSCO数据库,在这个数据库里有一万余种外文期刊包含了各种学科,在上面搜索外文期刊相当的省时省力。
找好了外文期刊就要开始翻译了,在翻译的过程中也遇到了不少的麻烦。首先我的英文不是很好;其次有大量的专业词汇,普通英文字典无法查找,英英翻译也晦涩难懂,尽管有很多困难,但怀着“世上无难事,只怕有心人”的信念,一点点的坚持了下来,翻译了出来。现在就剩下下星期的开题答辩了,这也是毕业论文路上重要的一步,必须好好对待。
20xx年2月26日
这个星期五就要进行论文的开题答辩了,要做的事还很多,先要把论文开题报告按照给定的格式给做好送给老师检查,然后开始准备论文开题答辩的材料。
本次论文开题答辩将于三月二日开始,负责我们答辩的有杨家
新、吴伟荣和刘慧敏三位老师,而猜测老师在答辩过程中可能问及的问题也是我首先要做的,从我本次所研究课题的周边开始做起准备,但考虑到是开题答辩,问题应该不会太难,所以准备材料不必那么庞杂。
我的开题报告主要由以下几个部分构成;课题研究的目的和意义、课题研究的主要内容和研究方法。我猜测老师问的问题也应该和这几个有关,但是也不能把材料集中到这几个问题上,还应该从各位答辩老师的专业背景入手,猜测可能问及的问题。
闲话少说,开始准备。
20xx年3月2日
今天进行了开题报告的答辩,在十一栋二零八教室开题答辩组长杨家新以及组员吴伟荣和刘xx主持了开题报告的答辩。同学们都比较兴奋,因为从未经历过这种场面。
上午十点左右我和同学们一起相约来到举行答辩的教室,先把自己的开题报告交上去,然后按照老师念到名字的顺序依次上去把自己开题报告的内容向答辩组汇报,然后答辩老师会问你两个问题,问到后记下来写到事前发的一张纸上。
问我的两个问题幸好在我事前准备的范围之内,在我回答完毕之后,老师说我合格,并告诉我,今天问的问题,也是我今后论文的写作方向。
20xx年3月9日
今天把英文文献翻译交给了老师。
英文文献的中文翻译在英语不好的我看来是比较难的一个关卡,里面包含了大量的专业词汇,并有很多复杂的长难句,令我心生退意,但是想想今后的论文写作,这才是万里长征的第一步,一点点的也就翻译了过来。
交给老师后,老师在比较高的英文背景支持下,为我们一一挑出了英文的语法错误,并给我们提出了改正意见,把翻译不好的句子用红线标出,把用错的词给我们改正,很钦佩老师这种严谨治学的态度。
在老师的指导下,我终于完成了我的外文文献翻译,成功进入到了论文正文写作的阶段。
20xx年3月12日
终于进入到论文正文的写作过程,大学最重要的事情终于来临,心情不自觉的激动起来,如何写好论文这个疑问反复在我脑海里浮现。
写好论文的第一步是有一个好的结构,于是结构的分布便是我写作论文首先要解决的问题,在经过一个下午的苦思冥想,我决定把论文分为三个结构,这样做可以使得论文结构简单明朗,内容易于编排,同时给人一种简洁有力的感觉,所以初定位这种三结构写作模式。
三种结构,相辅相成,互相联系,给人一种代入感。在第一结构主要讲述研究课题的背景与相关基础知识,在中间的结构详细阐述研究课题的'重点研究问题,最后掌握课题发展方向与未来前景。
20xx年3月28日
论文的初稿完成了一半了,进度不算快但也不算很慢,一切都在有条不紊的进行,主要工作还是资料的搜集与整理。
由于研究的课题,对于所学专业知识而言还是略显深奥,所以在查找的同时我也在学习相关知识,同时结合自己的一些想法对论文进行一些构思。
论文的前半部分主要是介绍我所研究课题在中国的发展情况,这一部分相对来说比较好写,问题是之后的重点研究问题,希望我能从这些天研究材料中获取些宝贵的经验,为随后的难点打下知识的基础。
20xx年4月13日
论文的初稿终于基本完成,在这大半个月的时间内,耗费了大量的精力与时间,不可谓不辛苦,但是苦尽甘来,终于到了收获的时候。
本次论文初稿的写作,查阅了大量的资料,阅读了大量相关专业书籍,在国内外优秀科研结果的基础上加以吸收,并柔和自己独特见解,一点点的写了出来。
这次论文,多亏了学校的数据库,我主要在学校图书馆主页中的万方和维普期刊中寻找我需要的东西,收获还是蛮大的,现在论文已经交了上去就等着下个星期老师帮我们挑错和修改,如果没什么问题那我的论文便可以定稿,但这毕竟是我的一个心愿,论文的写作过程不可能一帆风顺的。
20xx年4月20日
今天是老师帮我们修改初稿的日子,事情果然没有设想中顺利,还是出现了一大堆错误,虽是预料之外,但也是情理之中。
老师事先通知从上午九点开始,所以一大早就来到了老师办公室,老师还是那般认真的给我作了修改,在修改的时候老师也和我们讨论论文的写作思路,以及和我们讨论相关论点的正确性。在修改后我的论文主要出现了如下问题。
首先是摘要的关键词书写顺序出现了问题;其次是有一些论点和课题无关;最后是一些结构上的微调等。但这并不是全部,老师说总的问题没有,但细节上有一堆问题,所以今后的论文修改要集中在细节上,感谢老师的认真修改。
20xx年5月4日
今天是五四青年节,祝各位奋斗在论文写作中的兄弟姐妹五四青年节快乐。
今天我的论文终于定稿了,这是一件大事,意味着我本科学士论文的写作过程基本完成了,我很兴奋也很高兴,但也有些许失落,因为大学即将离我而去,同学即将各奔东西。
在吸取初稿的错误教训后,好好地整改了一番,这次老师在修改的时候,对我的论文连连称赞,表扬了我认真积极的态度,说我可以定稿了,看着老师欣慰的笑容,我内心澎湃不已,感谢老师,我对你的教诲永世难忘。
20xx年5月7日
即将进行毕业答辩,这一周的工作主要就是进行答辩前的资格审查,也就是论文等材料的准备,其中包括现在正在写的论文日志。
查答辩前还有什么准备不充分的,看来老师又有的忙了,真的很感谢老师,虽然论文是我们写的,但是老师操的心一点不比我们少,做的工作也一点都不比我们少。
我的论文虽然已经定稿,但是还需打印到专门的纸上,如果不是我们老师的提醒我可能忘了还有这么一个步骤。
20xx年5月18日
所有材料都准备妥当,下一步就是熟悉材料准备毕业论文的答辩了。
老师这几天和我们交代了很多东西,有很多都是以前没有接触过的,比如论文的答辩技巧等,同时告诉我们不要紧张就像和平常一样,但是一定要做好准备工作不能一副不在乎的态度,答辩虽然不是笔试,但却是对一个即将毕业的大学生的一个综合考量,所以最忌讳轻敌。
听完老师说的我瞬间紧张了起来,突然发现自己还有好多都没有做好的,看看时间距离答辩还有一个多星期的时间,我要静下心来,好好地准备材料去迎接毕业论文答辩,争取取得优异成绩。
20xx年5月25日
明天就是毕业论文答辩的日子,今天晚上要晚点睡了,还要最后熟悉一下论文的内容以及我准备的材料。
这过去的一个星期里,我把考官将要问的问题详细的在依托论文的基础上分析了一下,在三个结构的背景下,我准备了一些材料,现在我需要再把它们记得牢固一些,论文已经看了好多遍了,结构与内容都记得差不多了,明天答辩时需要注意的有以下几点。
首先要给考官一个良好地印象,要把自己所了解的尽量的告诉考官;其次语气要缓慢,要让考官清楚自己说的什么;最后语言要简练,不说废话,引领考官深入的了解论文的精华。
20xx年5月26日
今天答辩的现场气氛给我们一种严肃与肃穆的感觉,这种场合使我们虽有些紧张,但更能让我们的大脑全神贯注,我排在靠前的位置答辩,虽然之前一直告诉自己平常心对待,但到了这个时候,说不紧张是人的。
答辩开始,我依照事前准备的材料详述了论文所阐述的问题以及本篇论文存在的意义等。这一部分平稳顺利的度过,考官接着问了我很多问题,但都是和论文相关的,也是我事先准备的,虽然都不是有直接关系,但意思都差不多,经过我的二次加工便回答了考官。答辩完了,虽然成绩没出来,但从考官还算满意的表情看来,我还是通过了毕业论文答辩。
四年的大学生涯就要说再见了,我想在这里说,再见,我亲爱的武昌分校。
毕业设计也就是对在校大学生最后一次知识的全面检验,就是对学生基本知识、基本理论和基本技能掌握与提高程度的一次总测试。下面我整理的毕业设计日志范文, 欢迎来参考!
201x年5月30日上午,我们的毕业论文答辩圆满结束了。当刘老师给我们送上人生的祝语时,一种即将离别的难舍之情油然而生,我开始眷恋培养我大学四年的母校,看着一张张熟悉的面孔,过去的欢乐和不快都烟消云散了,我所走过的每条小道,每间教室都就是那么的让人难以释怀,甚至,一草一木此刻都有了分别时难以割舍的眼泪。大学啊,当初充满憧憬的人间天堂;放飞梦想的游乐场;充满爱和善意的伊甸园,将与我永别了。人生但就是一过客而已,驻脚不能永久,起航才就是真正的目的。毕业了,青春散场了,而人生又踏上了另一个更加完美的征程。
毕业论文的完成给我大学四年的读书生涯划上了一个圆满的句号,也预示着我的人生开始了新的里程。然而,毕业论文从最初的选题到最后的顺利完成,虽说就是经历了一个长期的、复杂的、充满艰辛的过程,但它就是丰满的、充实的,让人引以自豪的。
201x年1月初,我们开始了论文题目和导师的选取,我选取贺老师就是因为她治学严谨,学术功底深厚,待人和蔼。随后,贺老师给我们进行了论题的解题和寒假任务的布置,较之别的组我们就是第一个开始着手论文写作准备的,这与贺老师的治学严谨就是分不开的。起初,在对解题上我和贺老师的理解和认识有些出入,经过反复的探讨之后,结论就是:我的论文重点就是个人学习环境设计,即就就是如何围绕博客来构建自我的个人学习环境。贺老师还给我带给了一些国内外对个人学习环境研究的比较好的专家和学者的网站,指导我如何利用校园网中的数据库的数字资源和收集Google、教育中文翻译、小桥流水等网站中的相关资料以及图书馆资源等等。我对贺老师所带给的这些丰富的资料在寒假期间进行了整理、分类、研读,并根据论文题目进行了分析,写出了具体的提纲和撰写开题报告。
201x年3月,我因找工作的缘故,没能和贺老师碰面,寒假期间的读书笔记、论文提纲、开题报告和文献综述都就是透过电子邮件上交的,而此刻和贺老师的交流与沟通主要依靠E-mail了。贺老师对我的论文提纲、开题报告和文献综述给予了必须的修改,比如论文提纲写的太简单,不够具体,重点不突出;开题报告中的任务要求和可行性分析部分不够严密科学以及文献综述中思维逻辑有些混乱等问题。我对论文提纲、开题报告和文献综述进行了进一步完善和修改,最后完成论文提纲、开题报告和文献综述的撰写。
3月对我来说就是一个十分关键又十分艰难的一个月,真就是身心疲惫,心力憔悴,由于一边要为找工作而奔波,一边要为写论文而忙碌,工作关系到毕业后的去向,而论文关系到能否顺利毕业的问题,二者对我来说都就是至关重要的。此刻就是论文的初写阶段,也就是至关重要的阶段,如果论文提纲没写好直接关系到论文的写作,于就是我就努力克服困难与痛苦。为了能摆脱因找工作所带来的无奈与苦闷,我就使自我尽力的往论文里钻,以此来打发我那空闷、疲倦、伤痕累累的心灵,真就是黄天不负有心人,在3月中旬也就是在我最无助的时候我找到了一份工作,给了我极大的慰藉,也给了我充足的时间去更好的完成论文的撰写,在接下来的时间里,我边工作边撰写论文。
201x年4月,我透过与贺老师的不断交流和沟通之后,在5月1日时我提交了论文初稿。从贺老师所回复的邮件中,对我的论文初稿给予了必须的肯定,另外,也指出了一些不足之处,比如论文的大部分就是陈述行的资料,真正融入个人的理解很少;论文结构有些松散,部分与部分之间衔接不够,未能很好的理解博客文化与个人学习环境之间的逻辑关系;格式不严格;参考文献也未标注。我反复的研读了贺老师给我所提出的宝贵推荐,重新审读论文的题目并与贺老师及时的沟通,于201x年5月20日,我以最快的速度提交了论文二稿,贺老师给予了我很高的评价和肯定,较之一稿有了很大的突破,不足之处就就是细节上的'问题太多,另外,对我所设计的基于博客文化的个人学习环境设计框架图提出了一些建设性的意见,比如个人学习环境设计的构成要素、理论依据及技术性、实用性等方面的支持。贺老师对我的工作和生活给予了必须的帮忙和关怀。
201x年5月25日,我上交了论文三稿。贺老师对我的这次修改很满意,说注意一下格式方面的修改就基本能够定稿了。当我从电子邮件上看到这些文字时,我顿时很欣慰,也感觉到整个人简单了许多,一种成就感油然而生,尤其就是看到自我所设计的有关个人学习环境的框架图时,很自豪,很满足。
5月27日最后定稿了。28日早上我匆忙的赶回学校,准备论文答辩,时间很紧迫。我反复熟悉和研读了我的论文资料,做了答辩时所务必的PPT文稿,同时也猜测了一下评委老师会问到的问题。答辩时虽有些紧张,但基本还算满意。
这就就是我大学四年毕业论文的整个过程,很艰辛,但也很幸福和自豪。
在那里我要感谢我的老师、同学在我最困难最无助的时候所给予的帮忙和鼓励。尤其就是我的导师贺平老师对我无微不至的关怀和细心的指导。
随着毕业日子的到来,毕业设计也接近了尾声。经过几周的奋战我的毕业设计最后完成了。在没有做毕业设计以前觉得毕业设计只就是对这几年来所学知识的单纯总结,但就是透过这次做毕业设计发现自我的看法有点太片面。毕业设计不仅仅就是对前面所学知识的一种检验,而且也就是对自我潜力的一种提高。透过这次毕业设计使我明白了自我原先知识还比较欠缺。自我要学习的东西还太多,以前老就是觉得自我什么东西都会,什么东西都懂,有点眼高手低。透过这次毕业设计,我才明白学习就是一个长期积累的过程,在以后的工作、生活中都就应不断的学习,努力提高自我知识和综合素质。
在这次毕业设计中也使我们的同学关系更进一步了,同学之间互相帮忙,有什么不懂的大家在一齐商量,听听不一样的看法对我们更好的理解知识,所以在那里十分感谢帮忙我的同学。
我的心得也就这么多了,总之,不管学会的还就是学不会的的确觉得困难比较多,真就是万事开头难,不明白如何入手。最后最后做完了有种如释重负的感觉。此外,还得出一个结论:知识务必透过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现就是两回事,所以我认为只有到真正会用的时候才就是真的学会了。
在此要感谢我的指导老师**对我悉心的指导,感谢老师给我的帮忙。在设计过程中,我透过查阅超多有关资料,与同学交流经验和自学,并向老师请教等方式,使自我学到了不少知识,也经历了不少艰辛,但收获同样巨大。在整个设计中我懂得了许多东西,也培养了我独立工作的潜力,树立了对自我工作潜力的信心,相信会对今后的学习工作生活有十分重要的影响。而且大大提高了动手的潜力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但就是在设计过程中所学到的东西就是这次毕业设计的最大收获和财富,使我终身受益。
Java可以按照面向过程来实施项目,但是它本身是一门面向对象的语言,如果你是毕业论文的话,建议还是按照面向对象的方式来写,期间添加一些uml的图表体现,这样更容易拿到高分。
你好, 计算机专业的毕设一般分为这两部分: 源码+论文
首先说选题, 毕设课题以javaweb居多, 框架可以选用ssm, ssh, 或者springboot, 可以选做一些管理系统, 下面是一些常见的命题
等等, 这些课题可以按照你自己的实力做, 如果技术好的化, 或者有一些成品, 可以做的复杂一些, 比如前端可以layui优化一下, 权限系统采用shiro来做等等
论文方面比较简单但是比较麻烦, 各种文库都有很多javaweb的论文,但是直接拷贝的化会过不了查重系统, 需要你自己认真的重构调整一下
要看你用什么做,Java SE 做一些桌面应用, 一般只供自娱自乐。Java EE 可以做一个购物网站、员工管理系统、进销管理系统、班级管理系统 。这些系统都可以投入使用 。需求分析,可以在网上找一些例子 。
最近几年javaweb技术发展的特快, 许多很多年前的技术都已经不用了, 因为使用和学习太过繁琐, 而且都大四了, 如果以后想要在it业发展的话, 也需要学一些具体工作中用到的技术, 把这些技术用于毕设对自己有很好的帮助
摘 要网络中的资源非常丰富,但是如何有效的搜索信息却是一件困难的事情。建立搜索引擎就是解决这个问题的最好方法。本论文首先详细介绍了基于英特网的搜索引擎的系统结构,然后从网络机器人、索引引擎、Web服务器三个方面进行详细的说明。为了更加深刻的理解这种技术,本人还亲自实现了一个自己的Java搜索引擎——新闻搜索引擎。新闻搜索引擎是从指定的Web页面中按照超连接进行解析、搜索,并把搜索到的每条新闻进行索引后加入数据库。然后通过Web服务器接受客户端请求后从索引数据库中搜索出所匹配的新闻。本人在介绍搜索引擎的章节中除了详细的阐述技术核心外还结合了新闻搜索引擎的实现代码来说明,图文并茂、易于理解。 关键字:搜索引擎,网络机器人,Lucene,中文分词,JavaCC AbstractThe resources in the internet are abundant, but it is a difficult job to search some useful information. So a search engine is the best method to solve this problem. This article fist introduces the system structure of search engine based on the internet in detail, and then gives a minute explanation form Spider search, engine and web server. In order to understand the technology more deeply, I have programmed a news search engine by myself in Java.The news search engine is explained and searched according to hyperlink from a appointed web page, then indexes every searched information and adds it to the index database. Then after receiving the customers' requests from the web server, it soon searches the right news form the index engine,In the chapter of introducing search engine, it is not only elaborating the core technology, but also combine with the modern code, pictures included, easy to understand. Key Words:Search Engine, Spider, Lucene, Phrase Query, JavaCC 目 录第1章 引言··· 11.1 选题背景:··· 11.2 现实意义··· 1第2章 搜索引擎的结构··· 32.1 系统概述··· 32.2 搜索引擎的构成··· 32.2.1 网络机器人··· 32.2.2 索引与搜索··· 32.2.3 Web服务器··· 32.3 搜索引擎的主要指标及分析··· 42.4 小节··· 4第3章 网络机器人··· 53.1 什么是网络机器人··· 53.2 网络机器人的结构分析··· 53.2.1 如何解析HTML· 53.2.2 该类几种重要的方法。··· 63.2.3 Spider程序结构··· 63.2.4 如何构造Spider程序··· 73.2.5 如何提高程序性能··· 83.2.6 网络机器人的代码分析··· 93.3 小节··· 10第4章 基于Lucene的索引与搜索··· 114.1 什么是全文检索与全文检索系统?··· 114.2 什么是Lucene全文检索··· 124.3 Lucene的系统结构分析··· 134.3.1 系统结构组织··· 134.3.2 数据流分析··· 144.4 Lucene索引构建逻辑模块分析··· 154.4.1 绪论··· 154.4.2 对象体系与UML图··· 164.4.3 Lucene的包结构··· 204.4.4 Lucene的主要逻辑图··· 214.4.5 对Lucene包的小结··· 224.5 Lucene查询逻辑··· 224.5.1 查询者输入查询条件··· 224.5.2 查询条件被传达到查询分析器中··· 224.5.3 查询遍历树··· 234.5.4 返回结果··· 234.6 Lucene 检索原理··· 234.7 Lucene和Nucth的中文分析模块··· 254.7.1 Nutch分析··· 254.7.2 Nutch中文搜索3.1 中文分词··· 264.7.3 利用JavaCC构造中文分析模块··· 274.7.4 分词小结··· 284.8 Lucene与Spider的结合··· 284.8.1 Index类的实现··· 284.8.2 HTML解析类··· 294.9 Lucene 小结··· 31第5章 基于Lucene的搜索引擎实现··· 325.1 基于Tomcat的Web服务器··· 325.1.1 什么是基于Tomcat的Web服务器··· 325.2 用户接口设计··· 325.2.1 客户端设计··· 325.2.2 服务端设计··· 335.3 在Tomcat上部署项目··· 355.4 小节··· 35第6章 搜索引擎策略··· 366.1 简介··· 366.2 面向主题的搜索策略··· 366.2.1 导向词··· 366.2.2 网页评级··· 366.2.3 权威网页和中心网页··· 376.3 小节··· 38结束语··· 39参考文献··· 40致 谢··· 41外文资料原文··· 42外文原文翻译··· 48 第1章 引言1.1 选题背景:面对浩瀚的网络资源,搜索引擎为所有网上冲浪的用户提供了一个入口,毫不夸张的说,所有的用户都可以从搜索出发到达自己想去的网上任何一个地方。因此它也成为除了电子邮件以外最多人使用的网上服务。搜索引擎技术伴随着WWW的发展是引人注目的。搜索引擎大约经历了三代的更新发展:第一代搜索引擎出现于1994年。这类搜索引擎一般都索引少于1,000,000个网页,极少重新搜集网页并去刷新索引。而且其检索速度非常慢,一般都要等待10秒甚至更长的时间。在实现技术上也基本沿用较为成熟的IR(Information Retrieval)、网络、数据库等技术,相当于利用一些已有技术实现的一个WWW上的应用。在1994年3月到4月,网络爬虫World Web Worm (WWWW)平均每天承受大约1500次查询。大约在1996年出现的第二代搜索引擎系统大多采用分布式方案(多个微型计算机协同工作)来提高数据规模、响应速度和用户数量,它们一般都保持一个大约50,000,000网页的索引数据库,每天能够响应10,000,000次用户检索请求。1997年11月,当时最先进的几个搜索引擎号称能建立从2,000,000到100,000,000的网页索引。Altavista搜索引擎声称他们每天大概要承受20,000,000次查询。结束语本课题对基于因特网的Java搜索引擎结构和性能指标进行了分析,了解Spider程序的结构和功能。在进行海量数据搜索时,如果使用单纯的数据库技术,那将是非常痛苦的,速度将是极大的瓶颈。所以本文提出了使用全文搜索引擎Lucene进行索引、搜索。解决中文分词和有效的中文搜索信息。同时解决了如何把Lucene全文搜索引擎和Spider程序互相集合来实现新闻搜索的功能。对于如何构架基于Tomcat的Web服务器,使得用户通过浏览器进行新闻的搜索有了一定的理解,对Tomcat如何部署进行了说明。在些基础上,终于可以调试出一个简单的在本地搜索新闻Java搜索引擎。参考文献[1] Jeff Heaton(美), Programming Spiders, Bots, and Aggregator in Java.[2] Borland Software Corporation(美),JBuilder培训教程(译者:周鹏 [等] 译)北京:机械工业出版社[3]徐宝文,张卫丰. 搜索引擎与信息获取技术.北京:清华大学出版社,2003.5[4]车东.基于Java的全文搜索引擎Lucene[5]罗旭.主题搜索引擎的设计与实现[6]Bruce Eckel(美).Thinking in Java.北京:机械工业出版社[7] Otis Gospodnetic Erik Hatcher (美).Action in Lucene.电子工业出版社,2007.1[8]耿祥义,张跃平. JAVA2实用教程(第二版).北京:清华大学出版社,2004.2[9]刘彬.JSP数据库高级教程.北京:清华大学出版社,2006.3[10]刘卫国,严晖.数据库技术与应用——SQL Server.北京:清华大学出版社,2007.1[11]闫宏飞.Tiny Search Engine: Design and implementation(PPT). Oct.2003[12]李晓明,闫宏飞,王继民.搜索引擎——原理、技术与系统.北京:科学出版社,2004 更多参考请点击
有人帮你写了吗?我现在也愁着,论文一点头绪没有,马上就要交开题报告,不知道怎么写
网上去下,再稍稍改一下。我就是这么干的。。
有一个 ssh开发的 门户+论坛+博客 我自己的毕业设计 有文档 。。。 具体的 我空间有图片