文档章节

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

FansUnion
 FansUnion
发布于 2015/05/03 01:29
字数 1616
阅读 8
收藏 0
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设置默认用户和默认编码。
每次登录,都需要输入用户名,烦死了。输入密码,还可以理解。
每次打开文件,都是乱码,还得手动在transaction下,修改编码为“utf-8”,烦死了。

解决办法:
    putty是个很好的连接linux的客户端工具,但是用putty时,时常出现乱码问题,这时候需要在Translation中设置一下。
   但是每次连接都要设就非常麻烦了,这时候,可以在保存session的时候,先设好,以后从保存list中进入,这样就不需要手动设编码了。
   
   默认用户名,也是这样,Connection-Data-Auto login 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 )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。 它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。

   而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`, '李四', '孙六', '张三', '王五')


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

28.SiteMesh就是一个废材。
感觉没啥多大用处,不灵活。
直接用include更好。

29.根据参数类型,执行不同的构造函数,感觉容易出错。
/**
 * 分
 */
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的最精确匹配
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方法。
  

© 著作权归作者所有

FansUnion
粉丝 60
博文 858
码字总数 825464
作品 0
丰台
高级程序员
私信 提问
【线上沙龙预告】工程师是否应该参与创业?会遇到哪些问题?

[有鱼线上沙龙] 由有鱼App官方主办,旨在通过最实用、最前沿的话题交流,让更多的技术牛人通过轻量线上互动碰撞出技术灵感,搭建“最有质量”的互联网技术族圈子。第一期话题:工程师是否应该...

PatrickWong
2015/07/22
149
0
【线上沙龙预告】工程师是否应该参与创业?会遇到哪些问题?

[有鱼线上沙龙] 由有鱼App官方主办,旨在通过最实用、最前沿的话题交流,让更多的技术牛人通过轻量线上互动碰撞出技术灵感,搭建“最有质量”的互联网技术族圈子。第一期话题:工程师是否应该...

PatrickWong
2015/07/22
0
0
30天,O2O速成攻略【7.19深圳站】

活动概况 时间:2015年07月19日13:30-16:30 地点:深圳腾讯大厦(南山区科技园科技中一路)2楼多功能厅 主办:APICloud、OneAPM、连接科技 网址:www.apicloud.com 费用:免费 活动背景 移动...

API_Cloud
2015/07/04
927
5
30天,O2O速成攻略【7.19深圳站】

活动概况 时间:2015年07月19日13:30-16:30 地点:深圳腾讯大厦(南山区科技园科技中一路)2楼多功能厅 主办:APICloud、OneAPM、连接科技 网址:www.apicloud.com 费用:免费 活动背景 移动...

API_Cloud
2015/07/04
0
0
30天,O2O速成攻略【7.18广州站】

活动概况 时间:2015年07月18日13:30-16:30 地点:贝塔咖啡(新港中路TIT创意园内创意西路07号楼) 主办:APICloud、七牛、洪海网络 网址:www.apicloud.com 费用:免费 活动背景 移动互联网...

API_Cloud
2015/07/05
898
1

没有更多内容

加载失败,请刷新页面

加载更多

android6.0源码分析之Camera API2.0下的Preview(预览)流程分析

本文将基于android6.0的源码,对Camera API2.0下Camera的preview的流程进行分析。在文章android6.0源码分析之Camera API2.0下的初始化流程分析中,已经对Camera2内置应用的Open即初始化流程进...

天王盖地虎626
25分钟前
1
0
java 序列化和反序列化

1. 概述 序列恢复为Java对象的过程。 对象的序列化主要有两 首先我们介绍下序列化和反序列化的概念: 序列化:把Java对象转换为字节序列的过程。 反序列化:把字节序列恢复为Java对象的过程。...

edison_kwok
36分钟前
1
0
分布式数据一致性

狼王黄师傅
今天
2
0
经验

相信每位开发者在自己开发的过程中,都会反思一些问题,比如怎样提高编程能力、如何保持心态不砍产品经理、996 之后怎样恢复精力……最近开发者 Tomasz Łakomy 将他 7 年的开发生涯中学习到...

WinkJie
今天
4
0
从源码的角度来看SpringMVC

SpringMVC核心流程图 简单总结 首先请求进入DispatcherServlet 由DispatcherServlet 从HandlerMappings中提取对应的Handler 此时只是获取到了对应的Handle,然后得去寻找对应的适配器,即:H...

骚年锦时
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部