下载目录(Java)

1.ideaIC-2017.3.3(仅用于java编程版,不支持web,免费使用)
https://myfile-1257541903.cos.ap-guangzhou.myqcloud.com/ideaIC-2017.3.3.exe
2.myeclipse_2017 (编程软件,不带破解补丁)
https://myfile-1257541903.cos.ap-guangzhou.myqcloud.com/myeclipse_2017.exe
3.Navicat Of Mysql + mysql5.50.60 (数据库客户端和数据库,数据库账号root 密码123456)
https://myfile-1257541903.cos.ap-guangzhou.myqcloud.com/navicat%2Bmysql5.50.60.zip
4.JDK1.8.0 (java JDK 集成环境)
https://myfile-1257541903.cos.ap-guangzhou.myqcloud.com/jdk1.8.0_191.zip
5.mysql-connector-5.1.40-bin.jar(数据库驱动文件)
https://myfile-1257541903.cos.ap-guangzhou.myqcloud.com/mysql-connector-java-5.1.40-bin.jar
6.NetBeans 官网下载(用于开发JavaWeb)
https://netbeans.org/
7.Apache Tomcat(javaweb 服务器)
9.0:http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.14/bin/apache-tomcat-9.0.14.exe
8.0:http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.exe
7.0:http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.92/bin/apache-tomcat-7.0.92.exe
8.myeclipse_2017 破解补丁(具体教程:https://blog.csdn.net/CAU_Ayao/article/details/81952158)
https://myfile-1257541903.cos.ap-guangzhou.myqcloud.com/myeclise-2017-CI-7%E7%A0%B4%E8%A7%A3%E6%96%87%E4%BB%B6.zip

一个正在开发的网页脚本游戏,有兴趣可以来看一下

主要编写语言: JavaScript 或者 JQuery

项目介绍:玩家可以通过wasd 键来控制角色移动,角色拥有10点生命.每隔一段时间会在角色身边生成环绕的飞行物,可以用来阻挡弹幕,或者用来发射.点击鼠标左键对指定方向进行攻击.

项目链接:https://gitee.com/Keith404/More-and-more

demo:https://keith404.gitee.io/more-and-more/

页内展示:

有关JavaEE企业实战的全部内容说明文档(11月8日更新)

实验代码集合大礼包(如果你不想看下面这段废话,请直接下载):
https://javaeefile-1257541903.cos.ap-guangzhou.myqcloud.com/%E5%AE%9E%E9%AA%8C%E9%A1%B9%E7%9B%AE%E5%85%A8%E9%9B%86%E5%90%88.zip

实验5和作业5是只要完成其中一个就可以了,这里是完成的是作业5,为什么不选择实验5的原因呢,是因为glassfish3.0只支持早期的JavaEE 5以前的版本,而我这里用的是JavaEE7,此外还有很多原因,因为我根本就不想装glassfish3.0版本,无论是修改用户口令,或者是注册表配置项等,除此之外还要涉及到修改jre或者是jdk的版本(rua总之一大堆问题,有人问,那你下一个glassfish3.0的开源无需安装版不就好了吗,我试过,运行不出来,可能是配置服务器口令的时候有问题,会加载一年都无法加载出来)

下面是NetBeans IDE 做的syC_IDE能正常操作运行的配置
使用NetBeans完成的项目包括实验1,2,3,6,8,作业1,2,3
1. 首次运行该项目,让其自动生成所需要的表
2. 生成的表分别为PRODUCT0412、GOODSTABLE、USERDATA
3. 每个表都至少添加1条数据(否则会导致无法运行)
4. PRODUCT0412表的PRICE列必须填写数值,填写字符串将会出错
5. PRODUCT0412表要实现上一页下一页操作,加入至少20条以上的记录,最好填写30条以上
6. 实验8需要先运行webserviceISP,在运行syFeiniu_IDE 里的index.jsp里的加权平均按键
注意:模糊搜索算法并不完善,目前已知bug,无法匹配多次重复出现的字符,因为这里是将数据库里的每个表(这里总共3个表)的每行整理成一串字符串(老师自己写的时候就是这样,不要问我为什么)然后存进navicontrols.searchcontrol(JavaBean).(List)seachlib,再将其遍历与searchstr进行匹配,然后通过package algorithm; 里的FuzzyMatching类(封装好的模糊算法,但是我还没写好这个算法,有能力你们可以完善一下: 里面有演示实例链接)的public Boolean getEffectiveness()来进行判断匹配结果

如何演示实验
index.jsp 包含了绝大部分的实验演示,在网页最底部
此外需要单独运行manageProduct.jsp 该演示包括增删查改,分页查询(上一页下一页,PRODUCT0412表要至少20条以上数据才不会出错)
至于详细的实验说明,可以通过老师发放的文件查看
实验以及作业内容:https://javaeefile-1257541903.cos.ap-guangzhou.myqcloud.com/JavaEE%E5%AE%9E%E9%AA%8C%E5%8F%8A%E4%BD%9C%E4%B8%9A.rar
访问即可下载

下面是MyEclipse的配置
1. 在本地添加一个新的数据库,名字为javawebtestbase
2. 添加1张表cartshi,并插入一条数据
下面为创建表的指令:

DROP TABLE IF EXISTS `cartshi`;
CREATE TABLE `cartshi` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`cartsitem` varchar(30) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;

插入一条数据:
INSERT INTO `cartshi` VALUES (‘1’, ‘asdsad’);
3. 配置hibernate (如果不知道怎么配置请观看https://www.bilibili.com/video/av34779256/?p=2)
Driver name : mysql
Connection URL :jdbc:mysql://localhost:3306/javawebtestbase

如何演示:
(你可以自己去设计杂志页面,具体怎么回事看作业5)
实验4是运行index.jsp

作业5是
运行indextest.jsp 演示图片移动,选项卡,图片放大 ,jq修改网页文本 ,通过hibernate更新数据

链接集合:

上课操作的全部实验操作网页:https://space.bilibili.com/4922622/#/channel/detail?cid=54329

实验代码文件下载:
https://javaeefile-1257541903.cos.ap-guangzhou.myqcloud.com/%E5%AE%9E%E9%AA%8C%E9%A1%B9%E7%9B%AE%E5%85%A8%E9%9B%86%E5%90%88.zip

实验要求内容:
https://javaeefile-1257541903.cos.ap-guangzhou.myqcloud.com/JavaEE%E5%AE%9E%E9%AA%8C%E5%8F%8A%E4%BD%9C%E4%B8%9A.rar

老师上课讲解的PPT:
https://javaeefile-1257541903.cos.ap-guangzhou.myqcloud.com/JEE%E9%A1%B9%E7%9B%AE%E5%BC%80%E5%8F%91PPT.rar

模糊算法终极版(无bug版)

项目实例下载:https://gitee.com/Keith404/fuzzy_algorithm/tree/master/

2018/11/7    16:55 修改

import java.util.ArrayList;
import java.util.List;

public class FuzzyMatching {

    //参数
    private int substrCrossDomain = 2; //子串允许的跨界下标值
    private int substrElimination = 2; //子串允许的消除个数值
    private int mainstrCrossDomain = 100; //主串允许的跨界下标值
    private boolean reportOpen = true; //是否显示汇报结果

    //变量
    private String mainString = ""; //主串字符串
    private String subString = ""; //子串字符串
    private int substrSubscript = 0; //子串下标
    private int subscriptMovementCount = 0; //子串移动下标次数
    private int currentEliminationNumber = 0; //存储消除子串字符的数值
    private int mainstrPreviousSubscript = 0; //主串的前一次下标值
    private boolean effectiveness; //返回值
    private List matchingItem; //符合条件的子串字符集
    private List report; //汇报内容
    private List result; //主串出现位置结果集

    //首字符出现的位置
    private int fistCharShow = -1;

    //是否执行过getResult
    private boolean readGetResult = false;

    //构造方法
    public FuzzyMatching() {
        report = new ArrayList();
        matchingItem = new ArrayList();
        result = new ArrayList();
    }

    public FuzzyMatching(String mainString, String subString) {
        report = new ArrayList();
        matchingItem = new ArrayList();
        result = new ArrayList();
        this.mainString = mainString;
        this.subString = subString;

    }

    //

    //设置主串和子串方法
    public void setMainString(String mainString) {
        this.mainString = mainString;
    }

    public void setSubString(String subString) {
        this.subString = subString;
    }

    //获取主串和子串
    public String getMainString() {
        return this.mainString;
    }

    public String getSubString() {
        return this.subString;
    }

    //设置参数值
    public void setSubstrCrossDomain(int value) {
        this.substrCrossDomain = value;
    }

    public void setSubstrElimination(int value) {
        this.substrElimination = value;
    }

    public void setMainstrCrossDomain(int value) {
        this.mainstrCrossDomain = value;
    }

    public void setReportOpen(boolean value) {
        this.reportOpen = value;
    }

    //返回主串分别出现的数据结果
    public List getResult() {
        if (readGetResult) {
            return this.result;
        } else {
            System.out.println("还没执行getEffectiveness方法");
            return this.result; //有待完善
        }

    }

    //返回匹配到的子串字符
    public List getMatchingItem() {
        if (readGetResult) {
            return this.matchingItem;
        } else {
            System.out.println("还没执行getEffectiveness方法");
            return this.matchingItem; //有待完善
        }
    }


    public Boolean getEffectiveness() {

        for (int i = 0; i < mainString.length(); i++) { if (mainString.charAt(i) == subString.charAt(0)) { if ((mainString.length()-i) > substrElimination){
                    fistCharShow = i;
                    break;
                }
            }
        }

        if (fistCharShow != -1){

        }else {
            substrSubscript++;
            fistCharShow = 0;
        }

        int mainStringSubscript = 0;
        mainStringSubscript = fistCharShow;
        while(mainStringSubscript<mainString.length()){

            subscriptMovementCount = 0;
            for (int j = substrSubscript; j < subString.length(); j++) {
                if (subscriptMovementCount < substrCrossDomain) {
                    if (mainString.charAt(mainStringSubscript) == subString.charAt(j)) {
                        if (mainStringSubscript - mainstrPreviousSubscript < mainstrCrossDomain) { //判断主串下标移动的范围值,如果是第一次匹配,则无穷
                            substrSubscript = j + 1;//将子串下标设置为当前匹配到的下标,并将子串下标移一位
                            matchingItem.add(subString.charAt(j));
                            result.add(mainStringSubscript);
                        } else {
                            report.add("超出主串允许的跨界幅度:" + mainString.charAt(mainStringSubscript));

                        }
                        mainstrPreviousSubscript = mainStringSubscript;
                        break;
                    }

                } else {
                    break;
                }
                subscriptMovementCount++;
                if (j==subString.length()){
                    mainStringSubscript = fistCharShow;
                }


            }

            mainStringSubscript ++;
        }

        for (int i = fistCharShow; i < mainString.length(); i++) { } currentEliminationNumber = subString.length() - matchingItem.size(); //汇报信息处理 String strs = "子串符合主串匹配的字符集为:"; if (currentEliminationNumber > substrElimination) {
            report.add("消除的子串个数超过预设值,所以结果无效");
            effectiveness = false;
        } else {
            report.add("消除的子串个数在预设值内,所以结果有效");
            effectiveness = true;
        }


        for (int i = 0; i < matchingItem.size(); i++) {
            strs += matchingItem.get(i).toString();
        }
        report.add(strs);
        strs = "在主串分别出现的位置为(以0作为起始值):";
        for (int i = 0; i < result.size(); i++) {
            strs += result.get(i).toString() + ",";
        }
        report.add(strs);

        //汇报
        if (reportOpen) {
            for (int i = 0; i < report.size(); i++) {
                System.out.println(report.get(i));
            }
        }
        this.readGetResult = true;
        return effectiveness;
    }


}



java面试题之int和Integer的区别

引用:https://www.cnblogs.com/guodongdidi/p/6953217.html

int和Integer的区别
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0

延伸:
关于Integer和int的比较
1、由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。

Integer i = new Integer(100);
Integer j = new Integer(100);
System.out.print(i == j); //false
2、Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)

Integer i = new Integer(100);
int j = 100;
System.out.print(i == j); //true
3、非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)

Integer i = new Integer(100);
Integer j = 100;
System.out.print(i == j); //false
4、对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false

Integer i = 100;
Integer j = 100;
System.out.print(i == j); //true
Integer i = 128;
Integer j = 128;
System.out.print(i == j); //false
对于第4条的原因:
java在编译Integer i = 100 ;时,会翻译成为Integer i = Integer.valueOf(100);,而java API中对Integer类型的valueOf的定义如下:

public static Integer valueOf(int i){
assert IntegerCache.high >= 127;
if (i >= IntegerCache.low && i <= IntegerCache.high){
return IntegerCache.cache[i + (-IntegerCache.low)];
}
return new Integer(i);
}
java对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了

如果有错误的地方,还请指正。