首页 > 代码库 > 2015年创业中遇到的技术问题:21-30

2015年创业中遇到的技术问题:21-30

21.高速清空表中的数据。


有个ip库的表。数据量几十万。
想在开发阶段,清空。
通过mysql-front和mysql控制台。都删除失败。
反应很慢。还有诸如lock失败的错误。

解决的方法:复制表的创建结构,比方
CREATE TABLE `ip_info` (
  `ipbegin` varchar(20) DEFAULT NULL,
  `ipend` varchar(20) DEFAULT NULL,
  `zone` varchar(50) DEFAULT NULL,
  `company` varchar(200) DEFAULT NULL,
  `ipbeginInt` bigint(20) DEFAULT NULL,
  `ipendInt` bigint(20) DEFAULT NULL,
  `province` varchar(50) DEFAULT NULL,
  KEY `ipbegin_int` (`ipbeginInt`),
  KEY `ipend_int` (`ipendInt`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

直接删除这个表,drop table ip_info。很迅速。
然后再又一次建立这个表。运行上面的“create table ip_info”语句。

22.Putty设置默认用户和默认编码。
每次登录,都须要输入username,烦死了。

输入password,还能够理解。

每次打开文件,都是乱码,还得手动在transaction下,改动编码为“utf-8”,烦死了。

解决的方法:
    putty是个很好的连接linux的client工具。可是用putty时,时常出现乱码问题,这时候须要在Translation中设置一下。
   可是每次连接都要设就很麻烦了。这时候,能够在保存session的时候,先设好,以后从保存list中进入。这样就不须要手动设编码了。
   
   默认username。也是这样,Connection-Data-Auto login username。


參考资料:http://blog.csdn.net/dawnming/article/details/7076637
(仅仅有设置编码是參考的这个,发现和设置默认username是一个道理,之前在别处看到过设置默认username)

23.Windows下的bat和Linux上的sh。
在Linux上运行命令的时候,按tab提示 catalish. 会卡住,由于有2个选项“catalish.sh”和“catalish.bat”。

比較好的办法是,把Linux上的“catalish.bat”删掉,把Windows上的“catalish.sh”删掉。
startup.bat,shutdown.bat,catalish.bat等“*.bat”都干掉。

24.Linux下的Tomcat的catalish配置JVM參数。
在第235行,加相似的配置:
 JAVA_OPTS="$JAVA_OPTS  -Dp2p.config_path=/var/tomcat/config/  -Dlog4jOutputPath=/var/tomcat/logs -Xms256m -Xmx1024m -XX:PermSize=128M -XX:MaxPermSize=256m"

 在这个几行凝视的以下。

 

 # Uncomment the following line to make the umask available when using the
233 # org.apache.catalina.security.SecurityListener
234 #JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"

尝试放在前一行,貌似不行呀。

25.跨域一点问题。

项目中解决Less的訪问,大致了解了下,不想用Less。所以也不须要配置乱七八糟的Filter。

做个记录,今后说不定用得上。

CORS介绍

   它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Webserver定义了一种方式,同意网页从不同的域訪问其资源。

而这样的訪问是被同源策略所禁止的。

CORS系统定义了一种浏览器和server交互的方式来确定是否同意跨域请求。

它是一个妥协,有更大的灵活性,但比起简单地同意全部这些的要求来说更加安全。


   而W3C的官方文档眼下还是工作草案。可是正在朝着W3C推荐的方向前进。

   简言之,CORS就是为了让AJAX能够实现可控的跨域訪问而生的。

  
<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
      <param-name>cors.allowOrigin</param-name>
      <param-value>*</param-value>
    </init-param>
    <init-param>
      <param-name>cors.supportedMethods</param-name>
      <param-value>GET, POST, HEAD, PUT, DELETE</param-value>
    </init-param>
    <init-param>
      <param-name>cors.supportedHeaders</param-name>
      <param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
    </init-param>
    <init-param>
      <param-name>cors.exposedHeaders</param-name>
      <param-value>Set-Cookie</param-value>
    </init-param>
    <init-param>
      <param-name>cors.supportsCredentials</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
  
  网上找了个相似的资料:http://www.verydemo.com/demo_c199_i15317.html。
  
26.MySQL 按指定字段自己定义列表排序

SELECT * FROM bank 
ORDER BY FIELD(`id`,20, 22, 21) desc,
id desc,FIELD(‘status‘,21,1)

要注意的是, FIELD 后面是没有空格的.
因此, 完整的 SQL 为:
SELECT * FROM `MyTable` 
WHERE `id` IN (1, 7, 3, 5) 
ORDER BY FIELD(`id`, 5, 3, 7, 1)
常见应用
 SELECT * FROM `MyTable` 
WHERE `name` IN (‘张三‘, ‘李四‘, ‘王五‘, ‘孙六‘) 
ORDER BY FIELD(`name`, ‘李四‘, ‘孙六‘, ‘张三‘, ‘王五‘)

參考资料:http://blog.csdn.net/aidenliu/article/details/7554860

27.Jquery选择器语法。
$("#"+parentId+">a :first").addClass("tab-high"); 
超链接a后。不应该有空格。


28.SiteMesh就是一个废材。

感觉没啥多大用处,不灵活。

直接用include更好。

29.依据參数类型,运行不同的构造函数,感觉easy出错。

/**
 * 分
 */
public Money(Long cent) {
this.cent = cent;
}

/**
 * 元
 */
public Money(Double amount) {
if (amount != null) {
Double d = DoubleUtil.mul(amount, 100);
this.cent = d.longValue();
}
}
可能存在这样的需求,前端要求元必须是整数Integer,后端用Integer接收,再构造。就出错了。
30.SpringMVC拦截404。

第1种方式:Tomcat直接处理
web.xml
<error-page>  
    <error-code>404</error-code>  
    <location>/error/404.htm</location>  
</error-page>  
这样的仅仅能展示纯静态的页面,很不灵活。

第2种方式:利用Spring MVC的最精确匹配
@Controller
public class UrlNotFoundController {
@RequestMapping("*")
public String test404(){
//TODO
return "404Page";
}
}

在网上找到这样的方法,利用SpringMVC的精确匹配,从而在其他Controller找不到相应请求的时候。来处理404。

可是,这样的方式也有问题。仅仅能拦截一部分。

比方,假设有这个一个Controller
@Controller("/home")
public class HomeController{
@RequestMapping("a")
public String a(){
      //
}
}

直接訪问: http://localhost:8080/b.html,会被UrlNotFoundController处理。
可是http://localhost:8080/home/b.html,就不会被UrlNotFoundController处理。

这说明,通过精准匹配也是有局限性的。



第3种方式:自己定义org.springframework.web.servlet.DispatcherServlet,重载noHandlerFound方法。
<servlet>
<servlet-name>theDispatcher</servlet-name>
<servlet-class>base.web.MyDispatchServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc-servlet.xml</param-value>
</init-param>
<init-param>
<param-name>fileNotFondUrl</param-name>
<param-value>/error/404</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>theDispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
public class MyDispatchServlet extends DispatcherServlet {

private static final long serialVersionUID = 1L;

private static final UrlPathHelper urlPathHelper = new UrlPathHelper();
private String fileNotFondUrl = "/error/404.html";
public void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception {
if (pageNotFoundLogger.isWarnEnabled()) {
String requestUri = urlPathHelper.getRequestUri(request);
pageNotFoundLogger.warn("No mapping found for HTTP request with URI [" + requestUri +
"] in DispatcherServlet with name ‘" + getServletName() + "‘");
}
response.sendRedirect(request.getContextPath() + fileNotFondUrl);
}

public String getFileNotFondUrl() {
return fileNotFondUrl;
}

public void setFileNotFondUrl(String fileNotFondUrl) {
this.fileNotFondUrl = fileNotFondUrl;
}
}

默认的DispatchServlet的noHandlerFound方法。
protected void noHandlerFound(HttpServletRequest request, HttpServletResponse response) throws Exception {
if (pageNotFoundLogger.isWarnEnabled()) {
String requestUri = urlPathHelper.getRequestUri(request);
pageNotFoundLogger.warn("No mapping found for HTTP request with URI [" + requestUri +
"] in DispatcherServlet with name ‘" + getServletName() + "‘");
}
response.sendError(HttpServletResponse.SC_NOT_FOUND);
}
直接返回HTTP404。

特别须要说明的是:
  自己定义之后。不能再使用
  <!-- <mvc:default-servlet-handler /> -->
  
  通常情况下。使用这个配置。能够让SpringMVC相应js、css等静态页面,在合适的路径,自己主动去找。

  凝视之后,就仅仅能手动响应静态资源等请求了。
  2种方式:
  第1种:Tomcat处理。
  配置
  <servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
  
  第2种:SpringMVC处理
  <mvc:resources mapping="/kindeditor/upload/image/**"
location="file:${kindeditorImagePath}/kindeditor/upload/image/**" />
  
  假设使用了“<mvc:default-servlet-handler />”
// Determine handler for the current request.
mappedHandler = getHandler(processedRequest, false);
if (mappedHandler == null || mappedHandler.getHandler() == null) {
noHandlerFound(processedRequest, response);
return;
}
  DispatchServlet上述代码的mappedHandler就不为空了。因此无法进入noHandlerFound方法。
  
  參考资料:http://blog.csdn.net/u012345283/article/details/39718245

2015年创业中遇到的技术问题:21-30