问题集锦

JAVA基础

1. Bigdecimal不能直接转Double的问题

Bigdecimal转Double正确方法:decimalVal.doubleValue()

    BigDecimal decimalVal = BigDecimal.valueOf(1.23);
    System.out.println(decimalVal.toString());// 1.23
    Double doubelVal = decimalVal.doubleValue();
    System.out.println(doubelVal.toString());// 1.23

平时涉及到金钱的问题都是用的Bigdecimal类型 ,但这里要提出一个很重要的注意事项:存在精度损失的转换一定要先转成字符串,再进行类型转换。
将在上面代码中BigDecimal.valueOf(1.23);改为new BigDecimal(1.23)
decimalVal.toString()打印结果为:1.229999999999999982236431605997495353221893310546875。
这是因为小数在只能认识0和1的电脑中是无法准确描述的,因此需要将其先转成字符串,所以double转Bigdecimal的正确方式是:

    BigDecimal decimalVal = BigDecimal.valueOf(1.23);

翻看源码会发现,其实底层就是先转字符串再转的Bigdecimal:

     public static BigDecimal valueOf(double val) {
        return new BigDecimal(Double.toString(val));
     }

2

一、Eclipse/Tomcat

1.eclipse3.6默认指向 WebContent 目录 修改为 webRoot

在 eclipse3.6中 , 它默认指向 的webRoot 为 WebContent目录 ,如果 , 我们的项目 webRoot 目录不是这个名 , 我们迁移项目时等情况就会出现404。如何更改?

第一种情况, 新建项目时的设置:
在新建对话框下一步, 进行到 Web Module 时将 Content Directory 的名字改为你想要的名字就可以了

第二情况, 项目已经存在时的设置 ,加载一个已有 web 项目到 eclipse 中时
1、增加 web Facets, 对着项目根节点,右键 , 选择 Properties, 在弹出的对话框中,选择 Project Facets ,在右边的选择框中,勾选 Java 和 Dynamic Web Module ,并在 Dynamic Web Module 后数字中,选择 jsp 的版本,默认为 3.0.
2、还是在 这个界面,选中,这时,选择列表下面会出现“ Further Configuration availabe ” 的链接 ,点击这个链接,设置src 和 out path, 下一步,就是 Web Module 的设置了,第一项所说,更改 Content Directory 名字为你的 webRoot 目录名字即可。

以下两步是在eclipse 没有自动为导入的项目进行过相关设置的前提下进行的 (也就是项目根目录下没有 .settings 文件夹 ) ,如果导入项目后, eclipse 自动将 java 和 Dynamic Web Module 选好了,但配置的相关路径不正确,我们又应该怎么办呢?
一种方式 : 将项目根目录下的.settings 文件夹删除,对项目进行 refresh 一下 ( 一定要刷新下 ) ,然后,再进行第二项的1 、 2 小点的步骤。这时,去增加 web Facets 时,原来的 √ 选才会被清除掉,可以进行重新设置。
另一种方式 :改配置文件,打开.setting 文件夹下的 org.eclipse.wst.common.component文件 ,用记事本打开,

<wb-module deploy-name="AMS">
         <wb-resource deploy-path="/" source-path="/ WebContent "/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src"/>
        <property name="context-root" value="AMS"/>
        <property name="java-output-path" value="/AMS/ WebContent /WEB-INF/classes"/>
 </wb-module>
找到红色标识的那句话,将蓝色标识的文件夹目录改为你的webRoot 目录名 , 即可。如果没有红色标识这一行,就自行加上去即可。

同时

将.jsdtscope 文件
<classpathentry kind="src" path=" WebContent "/>同步改成与上面的 source-path一致

将org.eclipse.wst.common.project.facet.core.xml 文件 中
<installed facet="java" version=" 1.6 "/> 这一行指定 JDK 版本
<installed facet="jst.web" version=" 2.5 "/> 这一行指定 Web 版本 , 指 servlet 和 jsp ,另外,如果这里 改了web 的版本,注意同步把 web.xml 中的 中相关的 xmlns 指到相应的版本
2.3——

<web-app id="WebApp_ID" version="2.3" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

2.4——


<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<installed facet="wst.jsdt.web" version=" 1.0 "/> 这一行指定 JavaScript 版本

2. 启动tomcat时报 org.apache.catalina.LifecycleException: Failed to start component

有几种原因:
1.Web.xml里的配置写错了
2.路径不对
我当时就是这个原因,因为我的eclipse默认项目的根目录是WebContent,而我的项目里是WebRoot。解决办法同第一个问题
3.项目中有jar冲突

3.eclipse中如何用远程git代码覆盖本地文件里的代码

  1. 右击你的文件>> Team >>Show in History
  2. 之后你会发现此文件的所有版本,右击菜单中的Compare with Workspace,可以比对所选择的版本和本地当前版本文件的不同,找到与之前远程git上的代码一致的那个版本
  3. 右击需要的版本,选择Reset>>Hard

MySQL

1.OR的用法注意(将或者条件字段用括号括起来)

例如需求是:查询表中年龄大于10或身高小于100cm且性别是男的所有人
当然其他实现方式可能更高效,但这里只是为了说明OR的用法。
错误示例:Select * from user where sex=’男’ and age>=11 OR height<=100;
正确示例:Select * from user where sex=’男’ and ( age>=11 OR height<=100 );
在错误示例中,因为没有加括号,OR后面的height<=100会将男和女的满足该条件的都查出来

前端

1. 前端页面中的某个问题总是随机出现时的原因分析

“随机”?计算机中在相同条件下每次运行的结果不完全一致的情况就是随机。但,程序的执行顺序可是一定的,怎么会随机呢!
在前端代码中,只有一种情况是最可能的随机,那就是执行代码的时间。代码的运行”总时间”会是不确定的,而前端使用最多就是Ajax这种请求时间不一定的“异步”请求,当多个ajax请求在成功之后都对某个共享数据进行操作时,就会由于请求时间的长短不同而导致对共享变量的操作顺序不同,最终导致结果不一致。
举个栗子

<body>
    <input id="myId" /> <!-- 这里的结果会随机出现1和2-->
</body>
<script type="text/javascript">
    // Ajax1
    $.ajax({ url: "請求路徑", success: function(response){
        $("#myId").val(1);
    }});
    // Ajax2
    $.ajax({ url: "請求路徑", success: function(response){
        $("#myId").val(2);
    }});
</script>

上面代码中有两个几乎同时执行的Ajax异步请求,所以myId的结果总是显示请求时间长的那个ajax的结果。因为先执行完的ajax给myId赋值后,又会被后执行完的ajax的赋值操作给覆盖掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值