FCKEditor是一个很好的用于Web页面中的格式化文本编译控件。现在越来越多的论坛的发帖页面中更多的使用了这个控件,我们这里将如何在基于Java的web开发中使用FCKEditor控件的步骤提供给大家,为的是让更多的java开发者花费更少的时间去做重复劳动。
首先去下载FCKEditor2.6.3(当然本文编写的时候,这个是最新版本,也许你现在看到的已经是更新的版本了,那么可能某些配置办法已经变化了,本文也将跟进以保持最新动态,相反如果你使用的旧版本的控件,其配置和使用方法也有所区别),下载地址:https://www.sodocs.net/doc/a413995340.html,/download,我们需要下载两个文件,
第一是FCKeditor_2.6.3.zip,就是FCKEditor的控件;
第二是FCKeditor.Java(fckeditor-java-2.4.1-bin.zip),就是在Java代码中使用FCKEditor 的相关工具类;
有了这两个文件,使用FCKEditor的基础就具备了,考试大提示接下来我们要做两件事情,一件事情就是要把FCKEditor控件放到web项目中,这个控件是用于网页的,所以其代码是使用JavaScript脚本编写的,需要和web网页一起被下载的浏览器上才能执行,第二件事情就是这个网页上的控件因为支持图片的上传与下载,所以在上传与下载的时候需要服务端的支持,那么我们我的java服务端如何支持这个控件的工作呢?FCKEditor自身提供了相关的java工具,就是我们下载的第二个文件。因此我们要做的第二件事情就是在服务端配置java工具,使得FCKEditor控件在处理上传图片时能够正确工作。
接下来我们就开始对配置FCKEditor控件进行两项工作:
第一:解压缩FCKeditor_2.6.3.zip,在其中我们能找到一个文件夹叫fckeditor,那么将这个文件夹整个复制到你的web应用的根目录(WebRoot 目录)下,就是存放jsp页面的地方。
第二:解压缩fckeditor-java-2.4.1-bin.zip,将这样几个jar文件复制到web应用的WEB-INF\lib目录中(commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,java-core-2.4.1.jar,slf4j-api-1.5.2.jar,slf4j-simple-1.5.2.jar),其中最后一个文件在这个zip包中可能不存在,那么你可以去这个链接地址下载一个文件叫fckeditor-java-2.4.1-bin.zip (下载地址:https://www.sodocs.net/doc/a413995340.html,/project/showfiles.php?group_id=75348&package_id=129511),在这个war 文件中的lib中存在上述的5个jar文件,其实在war中也包含了FCKEditor控件的内容,也就是说如果你只是下载了war也可以了。然后在classpath目录中创建一个名叫为fckeditor.properties的文件,文件中放置一行内容为:https://www.sodocs.net/doc/a413995340.html,erActionImpl=https://www.sodocs.net/doc/a413995340.html,erActionImpl
https://www.sodocs.net/doc/a413995340.html,erActionImpl=net.fckeditor.requestcycle.impl.Enable
dUserAction
二: 创建fckeditor.properties文件在src下(编译之后处于classes目录中),文件内容如下:
https://www.sodocs.net/doc/a413995340.html,erFilesPath=/UserUploadFile
connector.resourceType.file.extensions.allowed=|jpg|gif|png|rar|zip|txt|doc|wma|wmv|mp3|flv|swf| connector.resourceType.media.extensions.allowed=|wma|wmv|mp3|flv|swf|
connector.resourceType.image.extensions.allowed=|jpg|png|gif|
connector.resourceType.flash.extensions.allowed=|swf|
https://www.sodocs.net/doc/a413995340.html,erActionImpl=https://www.sodocs.net/doc/a413995340.html,erActionImpl
fckeditor.basePath = /fckeditor (fck资源所在webapp中的目录)
fckeditor.skinPath = /skins/office2003/ (fck样式,这里可选默认和office2003的样式) fckeditor.height = 630 (fck编辑器的高度)
在web.xml中添加一个Servlet的配置,配置内容如下:
好了,现在你已经完成了配置的过程,接下来我们需要在jsp中使用FCKEditor控件了,在需要使用这个控件的jsp文件的开头添加标签库的引入语句:
<%@ taglib uri="https://www.sodocs.net/doc/a413995340.html," prefix="FCK" %>
,在使用控件进行文本格式化输入的地方(原来你可能使用的textarea标签)使用如下的内容来替换原来的输入控件:
自己的实例
其中instanceName属性的值就相当于form表单中的input的name值。就是表单提交时候的键值对中的键的名字。
1)在文本框中输入中文提交后得到的中文乱码。
解决办法:
Result.JSP中来转码:
new String(request.getParameter(“content”).getByte(iso-8859-1),”UTF-8”)
试验下,嘿嘿,”汉化”成功!
2)上传中文名图片后保存的中文图片名乱码
解决办法:下载https://www.sodocs.net/doc/a413995340.html,.jar包,替换以前下载的fckeditor-java-core-2.4.jar包,OK,上传中文图片名显示正常了,
fckeditor-java-core-2.4.2jar包上传时就不会乱码
在使用FCKeditor2.4.3时若上传的图片或者flash的文件名为中文时,发现一下情况:问题1:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中选择上传按钮,如果上传的文件名为中文时会出现乱码。
解决办法:
找到FCKeditor.java解压包中的src目录下SimpleUploaderServlet.java做如下修改:
找到该程序中DiskFileUpload upload = new DiskFileUpload(),然后在该行下面添加upload.setHeaderEncoding("UTF-8"),重新编译成class文件并利用WinRAR把该class文件
添加到FCKeditor-2.3.jar中相应的位置,然后覆盖你的web项目中原来的jar包便可。
问题2:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中使用浏览
服务器按钮上传中文文件时会出现乱码。
解决办法:
和问题1的解决办法基本一样,只不过需要在ConnectorServlet.java中添加
upload.setHeaderEncoding("UTF-8")便可。
问题3:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中点击浏览
服务器按钮,会弹出“浏览服务器”页面,如果想在该页面中使用Create New Folder按钮
来创建一个中文目录时,会出现中文目录乱码。
解决办法:
web容器的编码要与FCKeditor默认的编码UTF-8一致,如果使用的是Tomcat,需修改tomcat服务器中conf目录下的server.xml。如下:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" /> enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="utf-8"/> 其实就是在原来的基础上添加URIEncoding的属性值为utf-8。 注:对于问题3,这种解决办法不可取,最好不要去修改服务器的编码,否则会影响到服务器上其它的工程。解决这个编码的问题可以修改源代码或者从新编写一个类来处理。通过观察打开的上传浏览对话框可以找对对应的htm页面和负责处理上传文件名称的 com.fredck.FCKeditor.uploader. ConnectorServlet这个类,然后找到对应的参数,转换编码便可。如:String newFolderStr=request.getParameter("NewFolderName"); newFolderStr=new String(newFolderStr.getBytes("iso8859-1"),"utf-8"); 网上很多文章都说修改/editor/filemanager/browser/default/frmupload.html,在head中加一个meta ,其实凭这个不行。 3)点击浏览服务器后,选择刚上传的中文图片,图片在预览窗口中不能显示 解决办法: 修改TOMCAT安装目录config下的server.xml文件,在 OK,中文图片正常显示。 对中文图片进行UUID编码,上传乱码的解决方法 /* * FCKeditor - The text editor for Internet - https://www.sodocs.net/doc/a413995340.html, * Copyright (C) 2004-2009 Frederico Caldeira Knabben * * == BEGIN LICENSE == * * Licensed under the terms of any of the following licenses at your * choice: * * - GNU General Public License Version 2 or later (the "GPL") * https://www.sodocs.net/doc/a413995340.html,/licenses/gpl.html * * - GNU Lesser General Public License Version 2.1 or later (the "LGPL") * https://www.sodocs.net/doc/a413995340.html,/licenses/lgpl.html * * - Mozilla Public License Version 1.1 or later (the "MPL") * https://www.sodocs.net/doc/a413995340.html,/MPL/MPL-1.1.html * * == END LICENSE == */ package net.fckeditor.connectorl; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.*; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import https://www.sodocs.net/doc/a413995340.html,mandHandler; import net.fckeditor.handlers.ConnectorHandler; import net.fckeditor.handlers.ExtensionsHandler; import net.fckeditor.handlers.RequestCycleHandler; import net.fckeditor.handlers.ResourceTypeHandler; import net.fckeditor.response.UploadResponse; import net.fckeditor.response.XmlResponse; import net.fckeditor.tool.Utils; import net.fckeditor.tool.UtilsFile; import net.fckeditor.tool.UtilsResponse; import https://www.sodocs.net/doc/a413995340.html,mons.fileupload.FileItem; import https://www.sodocs.net/doc/a413995340.html,mons.fileupload.FileItemFactory; import https://www.sodocs.net/doc/a413995340.html,mons.fileupload.disk.DiskFileItemFactory; import https://www.sodocs.net/doc/a413995340.html,mons.fileupload.servlet.ServletFileUpload; import https://www.sodocs.net/doc/a413995340.html,mons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Servlet to upload and browse files. * * This servlet accepts 4 commands which interact with the server-side * filesystem. * The allowed commands are: * * GetFolders
: Retrieves a list of folders in the current
* folder
*
GetFoldersAndFiles
: Retrives a list of files and folders* in the current folder
*
CreateFolder
: Creates a new folder in the current folder*
FileUpload
: Stores an uploaded file into the current* folder. (must be sent with POST)
*
*
* @version $Id: ConnectorServlet.java 3840 2009-07-08 20:29:46Z mosipov $
*/
public class ConnectorServlet extends HttpServlet {
private static final long serialVersionUID = -5742008970929377161L;
private static final Logger logger = LoggerFactory.getLogger(ConnectorServlet.class);
/**
* Initialize the servlet: mkdir
<DefaultUserFilesPath>
*/
public void init() throws ServletException, IllegalArgumentException {
String realDefaultUserFilesPath = getServletContext().getRealPath(
ConnectorHandler.getDefaultUserFilesPath());
File defaultUserFilesDir = new File(realDefaultUserFilesPath);
UtilsFile.checkDirAndCreate(defaultUserFilesDir);
https://www.sodocs.net/doc/a413995340.html,("ConnectorServlet successfully initialized!");
}
/**
* Manage the GET
requests (GetFolders
,
* GetFoldersAndFiles
, CreateFolder
).
*
* The servlet accepts commands sent in the following format:
*
connector?Command=<CommandName>&Type=<ResourceType>&CurrentFo lder=<FolderPath>
*
* It executes the commands and then returns the result to the client in XML
* format.
*
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.debug("Entering ConnectorServlet#doGet");
response.setCharacterEncoding("UTF-8");
response.setContentType("application/xml; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
String commandStr = request.getParameter("Command");
String typeStr = request.getParameter("Type");
String currentFolderStr = request.getParameter("CurrentFolder");
logger.debug("Parameter Command: {}", commandStr);
logger.debug("Parameter Type: {}", typeStr);
logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
XmlResponse xr;
if (!RequestCycleHandler.isEnabledForFileBrowsing(request))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.NOT_AUTHORIZED_FOR_BROWSING);
else if (!CommandHandler.isValidForGet(commandStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_COMMAND);
else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INV ALID_TYPE);
else if (!UtilsFile.isValidPath(currentFolderStr))
xr = new XmlResponse(XmlResponse.EN_ERROR, Messages.INVALID_CURRENT_FOLDER);
else {
CommandHandler command = CommandHandler.getCommand(commandStr);
ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr);
String typePath = UtilsFile.constructServerSidePath(request, resourceType);
String typeDirPath = getServletContext().getRealPath(typePath);
File typeDir = new File(typeDirPath);
UtilsFile.checkDirAndCreate(typeDir);
File currentDir = new File(typeDir, currentFolderStr);
if (!currentDir.exists())
xr = new XmlResponse(XmlResponse.EN_INV ALID_FOLDER_NAME);
else {
xr = new XmlResponse(command, resourceType, currentFolderStr, UtilsResponse
.constructResponseUrl(request, resourceType, currentFolderStr, true,
ConnectorHandler.isFullUrl()));
if (command.equals(CommandHandler.GET_FOLDERS))
xr.setFolders(currentDir);
else if (command.equals(CommandHandler.GET_FOLDERS_AND_FILES))
xr.setFoldersAndFiles(currentDir);
else if (command.equals(CommandHandler.CREATE_FOLDER)) {
String tempStr = request.getParameter("NewFolderName");
tempStr = new String(tempStr.getBytes("iso8859-1"), "utf-8");
String newFolderStr = UtilsFile.sanitizeFolderName(tempStr);
logger.debug("Parameter NewFolderName: {}", newFolderStr);
File newFolder = new File(currentDir, newFolderStr);
int errorNumber = XmlResponse.EN_UKNOWN;
if (newFolder.exists())
errorNumber = XmlResponse.EN_ALREADY_EXISTS;
else {
try {
errorNumber = (newFolder.mkdir()) ? XmlResponse.EN_OK
: XmlResponse.EN_INV ALID_FOLDER_NAME;
} catch (SecurityException e) {
errorNumber = XmlResponse.EN_SECURITY_ERROR;
}
}
xr.setError(errorNumber);
}
}
}
out.print(xr);
out.flush();
out.close();
logger.debug("Exiting ConnectorServlet#doGet");
}
/**
* Manage the POST
requests (FileUpload
).
*
* The servlet accepts commands sent in the following format:
*
connector?Command=<FileUpload>&Type=<ResourceType>&CurrentFolder =<FolderPath>
* with the file in the POST
body.
*
* It stores an uploaded file (renames a file if another exists with the
* same name) and then returns the JavaScript callback.
*/
@SuppressWarnings("unchecked")
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
logger.debug("Entering Connector#doPost");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
String commandStr = request.getParameter("Command");
String typeStr = request.getParameter("Type");
String currentFolderStr = request.getParameter("CurrentFolder");
logger.debug("Parameter Command: {}", commandStr);
logger.debug("Parameter Type: {}", typeStr);
logger.debug("Parameter CurrentFolder: {}", currentFolderStr);
UploadResponse ur;
// if this is a QuickUpload request, 'commandStr' and 'currentFolderStr'
// are empty
if (Utils.isEmpty(commandStr) && Utils.isEmpty(currentFolderStr)) {
commandStr = "QuickUpload";
currentFolderStr = "/";
}
if (!RequestCycleHandler.isEnabledForFileUpload(request))
ur = new UploadResponse(UploadResponse.SC_SECURITY_ERROR, null, null,
Messages.NOT_AUTHORIZED_FOR_UPLOAD);
else if (!CommandHandler.isValidForPost(commandStr))
ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, Messages.INVALID_COMMAND);
else if (typeStr != null && !ResourceTypeHandler.isValid(typeStr))
ur = new UploadResponse(UploadResponse.SC_ERROR, null, null, Messages.INVALID_TYPE);
else if (!UtilsFile.isValidPath(currentFolderStr))
ur = UploadResponse.UR_INV ALID_CURRENT_FOLDER;
else {
ResourceTypeHandler resourceType = ResourceTypeHandler.getDefaultResourceType(typeStr);
String typePath = UtilsFile.constructServerSidePath(request, resourceType);
String typeDirPath = getServletContext().getRealPath(typePath);
File typeDir = new File(typeDirPath);
UtilsFile.checkDirAndCreate(typeDir);
File currentDir = new File(typeDir, currentFolderStr);
if (!currentDir.exists())
ur = UploadResponse.UR_INV ALID_CURRENT_FOLDER;
else {
String newFilename = null;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
try {
List
// We upload only one file at the same time
FileItem uplFile = items.get(0);
String rawName = UtilsFile.sanitizeFileName(uplFile.getName());
String filename = FilenameUtils.getName(rawName);
String baseName = FilenameUtils.removeExtension(filename);
String extension = FilenameUtils.getExtension(filename);
filename=UUID.randomUUID()+"."+extension;
if (!ExtensionsHandler.isAllowed(resourceType, extension))
ur = new UploadResponse(UploadResponse.SC_INV ALID_EXTENSION);
else {
// construct an unique file name
File pathToSave = new File(currentDir, filename);
int counter = 1;
while (pathToSave.exists()) {
newFilename = baseName.concat("(").concat(String.valueOf(counter))
.concat(")").concat(".").concat(extension);
pathToSave = new File(currentDir, newFilename);
counter++;
}
if (Utils.isEmpty(newFilename))
ur = new UploadResponse(UploadResponse.SC_OK, UtilsResponse
.constructResponseUrl(request, resourceType, currentFolderStr,
true,
ConnectorHandler.isFullUrl()).concat(filename));
else
ur = new UploadResponse(UploadResponse.SC_RENAMED,
UtilsResponse.constructResponseUrl(request, resourceType,
currentFolderStr, true, ConnectorHandler.isFullUrl())
.concat(newFilename), newFilename);
// secure image check
if (resourceType.equals(ResourceTypeHandler.IMAGE)
&& ConnectorHandler.isSecureImageUploads()) {
if (UtilsFile.isImage(uplFile.getInputStream()))
uplFile.write(pathToSave);
else {
uplFile.delete();
ur = new UploadResponse(UploadResponse.SC_INV ALID_EXTENSION);
}
} else
uplFile.write(pathToSave);
}
} catch (Exception e) {
ur = new UploadResponse(UploadResponse.SC_SECURITY_ERROR);
}
}
}
out.print(ur);
out.flush();
out.close();
logger.debug("Exiting Connector#doPost");
}
}
4)关与FLASH的上传
A.上传中文文件名FLASH时,有时候弹出没有权限,或者是文件类型错误,有时候上传正常。
B.上传英文或者数字名FLASH时,窗口一直处与等待状态,过一会儿关闭窗口,再通过浏览服务器按钮可以看到FLASH已经成功上传。
C.有时候如过上传成功了,预览窗口也不能播放。
D.有时候无论使用什么语言的文件名都可以上传成功。
但只要你是使用的英文或则数字文件名,就能100%上传。
所以关于这个问题估计还是编码引起的。
5)。FCKeditor2.6.2上传文件功能与Struts 2 不兼容的问题。
解决办法:
让Struts2仅处理*.action的请求。修改配置文件web.xml:
将Struts2处理所有web请求的过滤器配置
改为:仅处理.action或.jsp请求
备注:以上配置文件的更改会造成Struts2 标签在页面中不显示
应该在web.xml文件中加入以下配置:
一: 新版本介绍
FCKeditor2.6在其前版本的基础上有了较大的改动,首先加入了自定义标签,可以采用 二:整合之前准备 需要FCK资源目录:放到webapp目录下 JAR:https://www.sodocs.net/doc/a413995340.html,.jar 放到WEB-INF下的lib目录中 FCKeditor.tld 放到WEB-INF下的lib目录中 三: 整合FCK编辑器 一: 在web.xml中加入这段配置 net.fckeditor.connector.ConnectorServlet /fckeditor/editor/filemanager/connectors/* 二: 创建fckeditor.properties文件在src下(编译之后处于classes目录中),文件内容如下: https://www.sodocs.net/doc/a413995340.html,erFilesPath=/UserUploadFile connector.resourceType.file.extensions.allowed=|jpg|gif|png|rar|zip|txt|doc|wma|wmv|mp3|flv|swf| connector.resourceType.media.extensions.allowed=|wma|wmv|mp3|flv|swf| connector.resourceType.image.extensions.allowed=|jpg|png|gif| connector.resourceType.flash.extensions.allowed=|swf| https://www.sodocs.net/doc/a413995340.html,erActionImpl=https://www.sodocs.net/doc/a413995340.html,erActionImpl fckeditor.basePath = /fckeditor (fck资源所在webapp中的目录) fckeditor.skinPath = /skins/office2003/ (fck样式,这里可选默认和office2003的样式) fckeditor.height = 630 (fck编辑器的高度) 三: 创建JSP页面 在JSP页面头部加入<%@ taglib uri="https://www.sodocs.net/doc/a413995340.html," prefix="FCK"%> (默认是可以采用别名的方式引入tld文件的,如果报错可以采用<%@ taglib uri="/WEB-INF/tld/FCKeditor.tld" prefix="FCK"%>) 引入FCK所需的JS文件: 创建FCK编辑器在需要的地方加入: 获取FCK编辑器中的值: 1,采用JS的方式 //获取HTML内容(返回的是带HTML标签的内容) function getContentHtmlText(){ var oEditor = FCKeditorAPI.GetInstance('EditorDefault'); return oEditor.GetXHTML(true); } //oEditor.EditorDocument.body.innerText; 返回的是纯文本内容。 四:配置上传功能: 1,打开fckeditor.js文件 FCKConfig.ToolbarSets["Default"] = [ ['Source','DocProps','-','Save','NewPage','Preview','-','Templates','Cut','Copy','Paste','PasteText','Pas teWord','-','Print','SpellCheck','Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat','Form' ,'Checkbox','Radio','TextField','Textarea','Select','Button','ImageButton'], ['HiddenField','Bold','Italic','Underline','StrikeThrough','-','Subscript','Superscript'], ['OrderedList','UnorderedList','-','Outdent','Indent','Blockquote','JustifyCenter','JustifyRight','Justif yLeft','JustifyFull','Link','Unlink','Anchor'], ['Image','Flash','Table','Rule','Smiley','SpecialChar','PageBreak'], ['Style','FontFormat','FontName','FontSize'], ['TextColor','BGColor'], ['FitWindow','ShowBlocks','-','About'] // No comma for the last row. ] ;(修改你所需要的一些功能) FCKConfig.DefaultLanguage = 'en' ; (设置默认的语言) 需要修改核心jar包中的ConnectorServlet.class文件 1. 下载源码fckeditor-java- 2.4.1-src.zip。https://www.sodocs.net/doc/a413995340.html,/sourceforge/fckeditor/fckeditor-java-2.4.1-src.zip 2. 解压后找到ConnectorServlet.java文件(路径:fckeditor-java-2.4.1\java-core\src\main\java\net\fckeditor\connector) 3. 修改ConnectorServlet.java并编译(保存后MyEclipse自动编译)。 首先把fckeditor-java-core-2.4.1.jar粘贴到你项目的lib目录下(为了修改ConnectorServlet.java时的编译),其次在src下建立一 个包net.fckeditor.connector把ConnectorServlet.java粘贴到该包下,打开该类找到 FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); 紧跟在下面加上 upload.setHeaderEncoding("UTF-8"); 修改后为: FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); 4. 找到编译好的class文件。 修改后保存,找你发布到Tomcat中的项目,并找到编译后的ConnectorServlet.class 文件 5. 重新设置jar包。 找到原核心包fckeditor-java-core-2.4.1.jar修改后缀名为zip,解压成文件夹后找到ConnectorServlet.class替换成刚才编译的 ConnectorServlet.class,然后压缩解压的文件夹,注意要选择zip,不是rar,最后改后缀名为.jar 6. 替换原来的fckeditor-java-core-2.4.1.jar,结束。 PS:我的tomcat的server.xml中的一句代码 Xml代码 connectionTimeout="20000" redirectPort="8443" /> connectionTimeout="20000" redirectPort="8443" /> 现在是:(加了URIEconding="UTF-8") Xml代码 connectionTimeout="20000" redirectPort="8443" URIEconding="UTF-8"/> 详细出处参考:https://www.sodocs.net/doc/a413995340.html,/content-detail/95902_2.html FCKEditor和struts2有不兼容的问题,需要修改配置: 1. 2. 3. 4. 5.改为 6. 7. 8. 9. 10. 11. 12. 13. 常用设置:瘦身1、所有以-开头的文件都可以删除掉。 打开fckeditor目录后,把_samples整个文件夹删除,这个是示例代码来的。 2、因为我们都是用js形式来调用的,所以其它形式的比如asp,php形式的其它文件都可以删除。 根目录下只留下editor文件夹、fckconfig.js、fckeditor.js、fckpackager.xml、fckstyles.xml、fcktemplates.xml 3、下面我们再对editor里面的文件进行瘦身 首先把里面的editor\_source文件夹删除掉,这个是源文件来的。 editor\lang这个是语言的文件夹,我们只用到英文和中文的,所以其它语言的。JS文件全部删除掉。 只留下en,zh开头的js文件en.js、en-au.js、en-ca.js、en-uk.js、zh.js、zh-cn.js 4、我们只要用默认的皮肤,其它两个皮肤也可以删除掉,要是不用的话。 打开skins文件夹,只留下default文件夹,其它两个office2003、silver删除掉。 字体 FCKEditor添加字体 默认情况下,FCKEditor在进行文本编辑时,无法使用中文字体。 自个摸索了下: 打开fckconfig.js 文件 找到第154行(应该是),会发现: FCKConfig.FontNames = 'Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ; 将其修改为: FCKConfig.FontNames = '宋体;黑体;幼圆;楷体_GB2312;仿宋_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana' ; 当当这样还是不行,虽然发现编辑器的字体选项多了已添加的中文字体,但应用到文本上却发现没有任何作用! 接着下一步:) 1.打开editor/css/fck_editorarea.css 文件 将: font-family: Arial, Verdana, sans-serif; 修改为: font-family: 宋体, 黑体, 幼圆, 楷体, 仿宋, Arial, Verdana, sans-serif; 2.保存,刷新后将即可以使用中文字体了 图片预览功能: var oListManager = new Object() ; oListManager.Clear = function() { document.body.innerHTML = '' ; } function ProtectPath(path) { path = path.replace( /\\/g, '\\\\') ; path = path.replace( /'/g, '\\\'') ; return path ; } oListManager.GetFolderRowHtml = function( folderName, folderPath ) { // Build the link to view the folder. var sLink = '' ; return ' ' sLink + ' height="16" border="0"><\/a>' + '<\/td> sLink + folderName + '<\/a>' + '<\/td><\/tr>' ; } oListManager.GetFileRowHtml = function( fileName, fileUrl, fileSize ) { // Build the link to view the folder. var sLink = '' ; // Get the file icon. var sIcon = oIcons.GetIcon( fileName ) ; if ("|jpg|gif|bmp|png|jpeg|".indexOf("|"+fileName.substr( https://www.sodocs.net/doc/a413995340.html,stI ndexOf('.') + 1 ).toLowerCase()+"|")>-1) { return ' ' sLink + '<\/a>' + '<\/td> sLink + fileName + '<\/a>' + '<\/td> fileSize + ' KB' + '<\/td><\/tr>' ; }else{ return ' ' sLink + '<\/a>' + '<\/td> sLink + fileName + '<\/a>' + '<\/td> fileSize + ' KB' + '<\/td><\/tr>' ; } } function OpenFolder( folderPath ) { // Load the resources list for this folder. window.parent.frames['frmFolders'].LoadFolders( folderPath ) ; } 调试程序一般应经过以下几个步骤: 1、先进行人工检查,即静态检查。 在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多数错误。而这一步骤往往容易被人忽视。有人总希望把一切推给计算机系统去做,但这样就会多占用机器时间,作为一个程序人员应当养成严谨的科学作风,每一步都要严格把关,不把问题留给后面的程序。 为了更有效地进行人工检查,所编的程序应注意力求做到以下几点: (1)应当采用结构化程序方法编程,以增加可读性;(2)尽可能多加注释,以帮助理解每段程序的作用;(3)在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读也便于调试,各函数之间除用参数传递数据这一渠道以外,数据间尽量少出现耦合关系,便于分别检查和处理。 2、在人工检查无误后,才可以上机调试。通过上机发现错误称动态检查。在编译时给出语法错误的信息,可以根据提示的信息具体找出程序中出错之处并改正之。 应当注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多各种错误互有关联,因止要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。如果系统提示的出错信息多,应当从上到下一一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。 3、在改正语法错误后,程序经过连接就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析,看它是否符合要求。 有的初学者看到运行结果就认为没问题了,不作认真分析,这是危险的。 有时,数据比较复杂,难以立即判断结果是否正确。可以事先考虑好一批“试验数据”,输入这些数据可以得出容易判断正确与否的结果。可以在计算的输出结果的程序地方加入一段输出到屏幕窗口的程序,利用屏幕窗口可以方便看到结果的,很直观。例如,if语句有两个分支,有可能在流程经过其中一个分支时结果正确,而经过其它一个分支时结果不对等。必须考虑周全。 事实上,当程序复杂时很难把所有的可能方案全部都试到,选择典型的情况作试验即可。 4、运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现。可以采用以下办法: (1)将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。 (2)如果实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf 函数语句,输出有关变量的值,往下检查。直到找到在哪一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就可能发现错误所在。 (3)也可以用“条件编译”命令进行程序调试(在程序调试阶段,若干printf函数语句就要进行编译并执行。当调试完毕,这些语句不要再编译了,也不再被执行了)。这种方法可以不必一一去printf函数语句,以提高效率。 5、如果在程序中没有发现问题,就要检查流程图有无错误,即算法有无问题,如有则改正 HR招聘开发人员的面试技巧 HR面试开发人员的有效方法 当要雇佣开发者时,传统的面试方法显得力不从心,这是必须要面对的现实。你会读简历、电话面试、技术面试、文化适应面试、各方面测试,最后,你基本上跟着自己的感觉走,雇佣了你认为优秀的人,即使这样,也会经常看走眼。情况不太理想,这是因为开发者属于技术性工人,谈话反应不出他或她对所在领域有多精通。 为什么传统面试方法不行呢? 当你要求别人跟你一起面试时,你会给他们多少准备时间呢?很可能没多少(如果你会给多于5分钟的时间,说明你准备的比较充分),所以和你一起面试的考官只是在前往面试地点的路上匆忙浏览一下简历,所以我也不会继续讨论提前准备一些问题这个话题。提前准备到这种程度,你又怎么可能了解到简历之外的信息呢?即使大家准备了一段时间,他们培训过多少关于面试技巧的知识呢?和其他一样,面试也是一名技术,即便有丰富的阅历,也不一定能成一名面试官。人们提问题时问不到点子上,即使能够提出比较好的问题,他们也不知道该从回答里得到哪些信息。 所以,缺少培训以及准备不足是个问题,但你可以克服这些困难,但这有助于改善状况吗?收效甚微,那么在面试过程中你应该测试求职者的哪些能力呢?下面列出了一些: 学习能力 人际交往/团队工作能力(可以在面试过程之外测试) 能够在现实与设计之间折中 工作到最后一刻 在公司需要的技术方面有足够的经验 对其他技术也有所涉猎 等等 所有你能做的就是提问,然后相信求职者所回答的。面试过程中,不要提这样的说法:很多优秀的人在某个职位上都没做好。你要放弃他们吗?如果你能面 试到一个你信任的人推荐的面试者,你应该感到很幸运,但是,如果遇不到,怎么办呢?很幸运,可以很简单地去甄别,让求职者展示一下他们的技术,让他们写点代码看看。 不!不是在白板上写代码 在白板或纸上写代码,即使是在笔记本电脑上进行5分钟的测试,这些都不是真正的编码。你需要把这些技术人员放到他们所处的位置上,然后后退,观察他们。观察他们如何工作、如何跟别人交流,以及别人如何跟他们交流。 Seth Godin提出,我们需要跟我们的潜在雇员共事几个月,这听起来不错,但有点不切实际,而且也不需要观察那么长时间。让我说,一天时间就能让你得到足够的信息,然后做出正确决定。如果你心里有中意的求职者,把他们安排到你的团队里工作一天,观察他们是否合适,而不是再对他们进行一轮又一轮的面试。这一天的工作结束之后,把你的团队成员召集起来,然后让他们告诉你是否应该雇佣这个人。(编注:如果觉得这样的代价很大,可以尝试《通过电子邮件发现优秀的程序员》。) 这种方法的优势很明显。你不需要假设他们适应你的企业文化(或者做多选择心里分析),你只须测试一下。如果你信任的人乐意跟这个人一起工作,那么你直接就能发现,毕竟,这也是他们必须要做的事。你可以大体了解一下你的求职者技术的深度和广度。你可以测试出他们驾驭新系统的能力,以及对事情的领悟能力。所有你所做的这些都在一个远不如面试正式的气氛中进行,而且在这种气氛中,开发者可以感到很舒服。如果面试官们让那些候选雇员提前准备一下,效果会更明显。 用创新来吸引有创意的人 很显然,在最终雇佣一个人之前,我们不能要求他一整天都在工作或者面试。但是,我们真的不能吗?为什么不可以呢?难道在你的公司不是一个有足够吸引力的地方吗?如果不是,那么尽快改进,然后执行雇用程序。如果要求别人放弃很多休息时间而带来的诸多不便让你感到很不安,那么想想当你意识到你已经雇用一个蹩脚的雇员6个月之后,已经太晚了,这会给你带来更多的不便。创意无限你才能吸引那些喜欢充满创造力的氛围的人才,人们才会乐意花一整天的时间,因为他们可以经历一次有趣又与众不同的面试。你的公司应该成为这种公司:可以吸引到那些你想雇佣的人才。你的面试过程以及雇佣方式是第一步,要不要采取那种有效的方式完全取决于你。 数控车床的基本操作与简单程序调试 一、实训目的 < 1 >掌握数控车削加工基本编程指令及其应用 < 2 >熟悉了解数控车床的操作面板和控制软件; < 3 >掌握数控车床的基本操作方法和步骤; < 4 >进一步了解数控车床的结构组成、加工控制原理; < 5 >熟练掌握精车程序的输入调 二、预习要求 认真阅读数控车床组成、位置调整和坐标系设定及基本编程指令与调试的章节内容。 三、实训理论基础 1.基本编程指令功能介绍 1 ). G 功能 ( 格式: G 2 G 后可跟 2 位数 ) 常用 G 功能指令 (1) 、表内 00 组为非模态指令,只在本程序段内有效。其它组为模态指令,一次指定后持续有效,直到被本组其它代码所取代。 (2) 、标有 * 的 G 代码为数控系统通电启动后的默认状态。 2 ). M 功能 ( 格式: M2 M 后可跟 2 位数 ) 车削中常用的 M 功能指令有: M00-- 进给暂停 M01-- 条件暂停 M02-- 程序结束 M03-- 主轴正转 M04-- 主轴反转 M05-- 主轴停转 M98-- 子程序调用 M99-- 子程序返回。 M08-- 开切削液 M09-- 关切削液 M30-- 程序结束并返回到开始处 3 ). T 功能 ( 格式: T2 或 T 4 ) 有的机床 T 后只允许跟 2 位数字,即只表示刀具号,刀具补偿则由其它指令。 有的机床 T 后则允许跟 4 位数字,前 2 位表示刀具号,后 2 位表示刀具补偿号。如: T0211 表示用第二把刀具,其刀具偏置及补偿量等数据在第 11 号地址中。 4 ). S 功能 ( 格式: S4 S 后可跟 4 位数 ) 用于控制带动工件旋转的主轴的转速。实际加工时,还受到机床面板上的主轴速度修调倍率开关的影响。按公式: N=1000Vc / p D 可根据某材料查得切削速度 Vc ,然后即可求得 N. 例如:若要求车直径为 60mm 的外圆时切削速度控制到 48mm/min ,则换算得: N=250 rpm ( 转 / 分钟 ) 则在程序中指令 S250; 5 ).车床的编程方式 ( 1 ).绝对编程方式和增量编程方式。 图 2-1 编程方式示例 绝对编程是指程序段中的坐标点值均是相对于坐标原点来计量的,常用 G90 来指定。增量( 相对 ) 编程是指程序段中的坐标点值均是相对于起点来计量的。常用 G91 来指定。如对图 2-1 所示的直线段 AB 编程 绝对编程: G90 G01 X100.0 Z50.0; 增量编程: G91 G01 X60.0 Z-100.0; 技术管理经理岗位面试测试题 1、编制公司中长期技术发展规划的必要性? 参考要点:是全面贯彻落实公司业务发展战略,通过技术规划的分步实施,以保障公司的竞争力和生产业务目标的实现。力求做到当前计划与规划内容的衔接,体现技术规划的前瞻性、整体性和可操作性。 2、如何编制公司中长期技术发展规划? 参考要点:(一)公司现状与需求分析:包括技术计划完成情况及科技成果对生产经营重大影响;生产经营目标;对生产的需求;对科技的需求,并建立技术需求框架。(二)技术的优劣势分析:国内外技术现状与发展趋势;企业技术现状;差距与优势对比。(三)明确公司宏观定位和发展方向:形成总体思路;形成发展战略;形成n个专业领域技术发展目标和中长期总目标。(四)技术优选和项目组合:应用科学测评方法 把最需发展的新技术和最重大的项目具体化,如建立技术结构模板;专家测评;技术合理性分析,量化优劣势;获得策略分析;双矩阵分析,形成项目初步清单。(五)项目框架设计(六)保障措施:采取必要的体制机制改革,促进规划目标的顺利实现。 3、如何组织实施公司中长期技术发展规划? 参考要点:(一)与公司领导层达成共识,明确目标。(二)与条线负责人进行沟通,充分理解规划与目标(三)将中长期目标分解,确定年度实现目标。(四)编制下发年度新产品研发技术改进综合计划,明确责任人、时间节点。(五)明确考核措施,在实施过程中技术指导、监督检查、协助服务,以保证目标的实现。(六)总结,为下年度做各方面的准备。 4、如何完善公司技术管理制度? 参考要点:在充分理解现有技术管理制度的基础上, 参考行业、专业、分工等相关技术管理制度,对在实际执行过程中欠缺、不完整或实际操作过程中需改进的制度进行修改、补充、完善。 5、对相关部门建立和完善技术、质量、工艺等管理标准及制度所行使的职能是什么? 参考要点:是组织、协调、督促职能。 6、根据以往的工作经验,简单描述你对建立技术管理体系的认识。 参考要点:现在技术管理面临着技术专业分工越来越细,各个技术环节之间关系复杂,与固有技术不易沟通和渗透,与企业外部环境脱节等现状,为了发挥企业整体的技术优势,需科学合理的组织技术能力形成一个系统的管理体系。技术管理体系的四大支柱:组织机构、方法、过程和资源。 7、简述新产品设计开发流程 第一部分 基础知识练习 目标 本章对应于《学生指南》各章的内容分别提供了练习题集,包括: ●第一章Java入门 ●第二章数据类型和运算符 ●第三章流程控制与数组 ●第四章封装 ●第五章继承 ●第六章抽象类与接口 ●第七章多态 ●第八章异常 ●第九章多线程机制 ●第十章输入输出流 ●第十一章使用泛型和集合框架 ●第十二章基于Swing的图形用户界面(GUI)设计 ●第十三章Java事件驱动编程 第一章练习题(Java入门) 1.下列哪项不是JDK所包含的内容?(选一项)A.Java编程语言 B.工具及工具的API C.Java EE扩展API D.Java平台虚拟机 2.下列关于JDK、JRE和JVM的描述。哪项正确?A.JDK中包含了JRE,JVM中包含了JRE B.JRE中包含了JDK,JDK中包含了JVM C.JRE中包含了JDK,JVM中包含了JRE D.JDK中包含了JRE,JRE中包含了JVM 3.下列哪个工具可以编译java源文件?A.javac B.jdb C.javadoc D.junit 4.JDK工具javadoc的作用是哪项? A.生成Java文档 B.编译Java源文件 C.执行Java类文件 D.测试Java代码 5.以下哪些包是Java标准库中常用的包?(选三项)A.java.lang B.javax.servlet .http C.j ava. io D.java.sql 6.使用JDK工具生成的Java文档的文件格式是? A.XML格式 B.自定义格式 c.二进制格式 D.HTML格式 7.以下关于JVM的叙述,哪项正确?(选两项) A.JVM运行于操作系统之上,它依赖于操作系统 B.JVM运行于操作系统之上,它与操作系统无关 C.JVM支持Java程序运行,它能够直接运行Java字节码文件D.JVM支持Java程序运行,它能够直接运行Java源代码文件 8.以下关于支持Java运行平台的叙述,哪项错误? A.Java可在Solaris平台上运行 B.Java可在Windows平台上运行 C.Java语言与平台无关。Java程序的运行结果依赖于操作系统D.Java语言与平台无关。Java程序的运行结果与操作系统无关 9.以下关于Applet和Java程序之间关系的叙述,哪项错误?A.-个Applet就是一段Java程序 B.Applet是一种特殊的Java程序,它需要运行在Web服务器上C.Applet是一种特殊的Java程序,它需要运行在Web浏览器上 java软件工程师面试题集 EJB方面 1、EJB2.0有哪些内容?分别用在什么场合? EJB2.0和EJB1.1的区别? 答:规范内容包括Bean提供者,应用程序装配者,EJB容器,EJB配置工具,EJB服务提供者,系统管理员。这里面,EJB容器是EJB之所以能够运行的核心。EJB容器管理着EJB的创建,撤消,激活,去活,与数据库的连接等等重要的核心工作。JSP,Servlet,EJB,JNDI,JDBC,JMS..... 2、EJB与JAVA BEAN的区别? 答:Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java 类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB 必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。 3、EJB的基本架构 答:一个EJB包括三个部分: Remote Interface 接口的代码 package Beans; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Add extends EJBObject { //some method declare } Home Interface 接口的代码 实验一Keil软件的使用及简单程序的调试方法 一、实验目的 掌握Keil的使用方法和建立一个完整的单片机汇编语言程序的调试过程及方法。 二、实验器材 计算机1台 三、实验内容 1.Keil的使用方法。 2.建立一个单片机汇编语言程序的调试过程及方法 四、实验步骤 1.Keil的使用方法。Keil C51 软件是众多单片机应用开发的优秀软件之一,它集编辑,编译,仿真于一体,支持汇编,PLM 语言和C 语言的程序设计,界面友好,易学易用。启动Keil 后的界面如下: 几秒钟后即进入Keil的编辑界面。用户便可建立项目及应用程序。 2.简单程序的调试方法 Keil是通过项目工程来管理汇编程序的。因此在调试程序前必须建立一个工程,工程名称及保存位置由用户来指定,注意每位同学的工程名称用“学号姓名实验*”来命名。 (1)建立一工程 单击Project菜单,在弹出的下拉菜单中选中New Project选项。并在弹出的对话框中确定保存的位置及工程名称。 又弹出一对话框,要求用户选择相应的硬件CPU及相关设置。选择Atmel公司的AT89C51单片机。如下图所示 单击“确定”后在弹出的对话框中行选择“否”即工程建好了,但该工程没有任何语句,需要再建一个程序文件并将其添加到此工程中。 (2)建一文件 单击“File”/“New”命令,则弹出文件的编辑窗口,此时该文件还没有指明其文件名称及保存位置,该文件还没有加载到所建立的工程中。单击“File”/“Save”命令在弹出的对话框中指明文件的类型为.ASM汇编型及文件名后单击“保存”即可进行汇编源文件的编辑。如下图所示。 (3)将文件添加到工程中 单击“T arget 1”前的“+”号则展开后变成“-”号,并右键单击“Source Group 1”在弹出的下拉菜单中执行“Add Files to Group ‘Source Group 1’”命令并弹出对话框在该对话框中的“文件类型”下拉列表中选择“Asm source file”后找到要添加的文件名并选中,单击“Add”即可。 分享从事C#开发人员面试经验 我从事C#开发将近二年(编程工作三年,但是第一年基本打酱油),在长沙这个地方,现在去面试,基本上都会要,只是薪资问题。下面讲讲我的一些经验咯~希望对大家有帮助 补充说明:以下经验大多只是面试技巧,少量基本典型题目,对大概1~3年工作经验的人有用一些,更高工作年限的人,你们已经是我眼里的大牛了,我只有膜拜的份……。其实说真的,面试的核心还是技术能力,当然面试技巧也很重要,谈工资的谈判技巧也很重要。 首先的首先,如果你是一个已经有工作经验的,最具有竞争力的就是你的项目经验,很多公司在笔试之后,不会在面试时具体考察技术知识,对着你的项目经验问你就行了!所以工作的时候,多找好的项目机会,对自己做过的项目一定要特别了解,也不要觉得自己的项目比较简单,而去胡扯一些自己也不清楚的技术,这是最忌讳的。 1、笔试方面 一般公司在心里都有个分数底限的,如100分,底限是35分,如果你连35分都没有,那么可能直接没面试机会了,一般不会在这个阶段淘汰人。大部分公司的笔试题都是在网上找的,有很多经典的题目,如面向对象的三个特征,二叉树前序、后序(我不是计算机专业的,数据结构懂得不多),堆栈,引用类型与值类型。如果没有人监考,大可放心去用手机百度(查询资料的能力也是考察之一嘛)~但是问答题最好不要跟百度的答案一模一样……下面再补充几个笔试常见的: 函数的修饰符,static,private等具体含义; abstract,interface也即抽象类和接口的区别; 怎么建立一个简单的数据库连接(我认为这个很没意义,一般都是封装好的DBHelper之类,用久了就不记得了,让我写DBHelper,我会选择百度); SQL查询,左连接、内连接的区别; 软件设计的三层架构(UI、BLL、DAL); 进制的转换(坑爹中的坑爹,手算进制转换,告诉我有什么用?)。 时间复杂度,空间复杂度的计算。 笔试大概就这么多经验……因为我面试的绝大部分公司是不会进行笔试的…… 2、面试。 如果面试官是那种比较死板的,对着经典考题去问题,为你默哀,这样的面试官最不好搞定。 Java开发工程师的面试自我介绍 这是一篇由网络搜集整理的关于Java开发工程师的面试自我介绍范文的文档,希望对你能有帮助。 Java开发工程师的面试自我介绍范文(一) 我叫XXX,今年22岁,毕业于XXX计算机科学与技术专业。由于非常喜欢本专业,并期待将来从事专业方向的工作,因而在校期间十分注重对专业课的学习,拥有扎实的Core Java基础,良好的编程风格;熟悉JSP+Servlet+JavaBean 模式的WEB开发;熟悉Struts,Hibernate,Spring等开源框架,了解EJB; 熟悉Tomcat,Jboss服务器等,熟悉基于Linux及Unix环境下的软件开发。因为专业课知识掌握牢固,以专业第一的综合成绩毕业。 然而,我深知仅有专业知识是不够的,社会需要的是高素质复合型人才,因而在校期间学习之外,我积极参加各种社会实践活动,曾参与过学院网上虚拟实验室开发的需求分析。大三暑假曾在浪潮软件园实习,参与了电信增值软件开发与编挰,通过亲自动手及不断地向有经验的工程师请教学习,实习结束时我已经基本掌握整个Java平台的核心技术,独立编程能力大大提高。同时实习生活也让我意识到从事Java编程工作团队合作的重要性。 虽然我的实际工作经验还不是很丰富,但相信有了扎实的专业基础知识和实习期间的实践经验,加上好学上进的精神,我能够胜任应聘岗位需求。希望贵公司给我这次机会。 Java开发工程师的面试自我介绍范文(二) 各位尊敬的`考官: 大家下午好!很荣幸能在这里面试,让我有向各位考官学习与交流的机会,现将自己的情况简要介绍一下: 我叫xx-x,出身在xx。性格比较温和、谦虚、认真细致、踏实、吃苦耐劳、有较强的责任心和社会适应能力。即将于xx年xx月毕业于河南工业职业技术学院,作为一名软件专业的大学生,我更喜欢平面设计,在大学三年的学习生活中,我对平面这一领域的相关知识有了一定的掌握,同时具有实际的操作能力与技术。 为了使在校所学的知识更好地应用到实际生活中,于xx年xx月有幸来北京中科院计算机所培训中心,通过三个月的实践训练,全面系统地学习了平面方面的专业知识与技能,能够应用平面设计的相关软件(photoshop图像处理软件、illustrator与coreidraw矢量绘图软件、indesigin与pagemaker排版软件)做基本的图像处理、海报、企业宣传册等,能够将所学知识真正应用到实际生活中。 在投身于社会之际,为了找到符合自己专业和兴趣的工作,更好地适应社会,我希望自己能够做到一种被别人需要的一种状态,至于做什么,就是在实践中,不断的学习、不断的锻炼.因此,我希望加入贵单位,如果能够成为公司的一份子,我相信我一定在自己的岗位上尽职尽责、踏踏实实地贡献之集的一份力量,与公司共同促进、发展。 “世界之大,人才济济”。我承认之集还不是最优秀的人才,但是我希望之集是此岗位最合适的人选,希望有幸能够被贵公司领导予以特别考虑。今后我在好的方面再接再厉,不足之处有所改善。我的介绍到此结束。谢谢 PLC程序的调试方法及步骤 PLC程序的调试可以分为模拟调试和现场调试两个调试过程,在此之前首先对PLC外部接线作仔细检查,这一个环节很重要。外部接线一定要准确无误。也可以用事先编写好的试验程序对外部接线做扫描通电检查来查找接线故障。不过,为了安全考虑,最好将主电路断开。当确认接线无误后再连接主电路,将模拟调试好的程序送入用户存储器进行调试,直到各部分的功能都正常,并能协调一致地完成整体的控制功能为止。 1.程序的模拟调试 将设计好的程序写入PLC后,首先逐条仔细检查,并改正写入时出现的错误。用户程序一般先在实验室模拟调试,实际的输入信号可以用钮子开关和按钮来模拟,各输出量的通/断状态用PLC上有关的发光二极管来显示,一般不用接PLC实际的负载(如接触器、电磁阀等)。可以根据功能表图,在适当的时候用开关或按钮来模拟实际的反馈信号,如限位开关触点的接通和断开。对于顺序控制程序,调试程序的主要任务是检查程序的运行是否符合功能表图的规定,即在某一转换条件实现时,是否发生步的活动状态的正确变化,即该转换所有的前级步是否变为不活动步,所有的后续步是否变为活动步,以及各步被驱动的负载是否发生相应的变化。 在调试时应充分考虑各种可能的情况,对系统各种不同的工作方式、有选择序列的功能表图中的每一条支路、各种可能的进展路线,都应逐一检查,不能遗漏。发现问题后应及时修改梯形图和PLC中的程序,直到在各种可能的情况下输入量与输出量之间的关系完全符合要求。 如果程序中某些定时器或计数器的设定值过大,为了缩短调试时间,可以在调试时将它们减小,模拟测试结束后再写入它们的实际设定值。 在设计和模拟调试程序的同时,可以设计、制作控制台或控制柜,PLC之外的其他硬件的安装、接线工作也可以同时进行。 2.程序的现场调试 完成上述的工作后,将PLC安装在控制现场进行联机总调试,在调试过程中将暴露出系统中可能存在的传感器、执行器和硬接线等方面的问题,以及PLC的外部接线图和梯形图程序设计中的问题,应对出现的问题及时加以解决。如果调试达不到指标要求,则对相应硬件和软件部分作适当调整,通常只 软件开发人员面试七大有效方法 现如今大多数的求职者都有自己的一套面试模式,但是成功的几率自己却很难把握。大多数的面试目的是面试官为了找到那种能一起工作的人,当然,空缺的岗位有可能是在其他团队,但是面试官还是会按照自己的评价标准来择取。如果你能够理解面试官的问题,按照他的方式回答,那么任何面试都将不是问题。本文我将给大家介绍一些面试技巧,希望能帮助面试者发挥无限的潜能,实现梦想。 任何面试都要做足准备,这样才不至于在面试过程中手忙脚乱,胡言乱语,比如你是做计算机软件开发方面的,首先面试前你得好好复习下你的专业知识,这些资料知识可能并不是你需要的什么新鲜的知识,但是能让你有效地扩大和组织已经知道的知识和内容。而有效的扩大和组织的内容,有助于面试官对你另眼相看。 一坦诚很重要 面试,其实是一个人与人交流沟通的平台。能够参加面试,尤其是大公司或者知名企业的面试,在某种程度上来说,已经代表了你并不简单。北大青鸟丰台刘老师认为,自信地回答问题,不要让自己太紧张,如果你不知道,那就坦诚地说“我不知道,但是我认为……”。知之为知之,不知为不知,不要理直气壮地讲述一个错误的答案,这会让面试官怀疑你前面那些正确的答案搞不好也是胡诌的,功亏一篑。虽然这句话也不一定是金钥匙,但是却能显示你的思考能力和扩展能力。对面试官提出的所有问题都要做一番努力,不要一句“我不知道”就轻易打发。 二做好写代码的准备 软件开发人员参加面试的时候,一般情况下是要测验代码的,如果要你写代码,那就要注意了,千万别忘记遵循基本规则。我常听那些应聘人员一脸茫然地说“完了,大脑一片空白,我忘记语法了……”,有哪些基本规则,原来都是一些基本的像循环、if条件、主方法、异常,这些要是忘记了,太不应该了。甚至一些粗心造成的如标点符号忘写、写错造成失误都有。(关注微信公众号:bdqnft 领取学习礼包)看到这里,如果你一时间也没法想起这些,不妨复习一下。 三做好项目解释的准备 软件工程师在写代码之前就应该对业务需求了如指掌。所以,你得能解释项目中一一对应的流程分别是什么。写个三四行代码就深层次解释一下,然后听听非团队人员的意见和建议。当局者迷,旁观者清。看看和客户交流的内部营销记录,找找线索。可以先找个朋友练 一、单选题(共计60题) (1)下列有关事件监听器的描述正确的是()。 A、一个监听器只能接受一个组件产生的事件 B、只有一个监听器可以被附加到一个组件上 C、多个监听器可以被附加到一个组件 D、以上描述都不对 (2)当下列程序执行时,其输出结果是()。 A、2k B、7k C、-7k D、-3k (3)下列关于修饰符混用的说法错误的是()。 A、abstract不能与final并列修饰同一个类 B、staic方法中能处理非static的属性 C、abstract方法必须在abstract类中 D、abstract类中不可以有private的成员 (4)下列容器是从java.awt.W indow继承的是()。 A、Applet B、Panel C、Container D、Frame (5)关于构造方法,下列叙述错误的是()。 A、构造方法是类的一种特殊方法,它的方法名必须与类名相同 B、构造方法的返回类型只能是void型,且书写格式是在方法名前加void前缀 C、构造方法的主要作用是完成对类的对象的初始化工作 D、一般在创建新对象时,系统会自动调用构造方法 (6)下面2个文件位于相同目录下,编译运行后会出现的情况是()。 //File P1.java package MyPackage; class P1{ void afancymethod(){ Sy stem.out.println("What a fancy method"); } } //File P2.java public class P2 extends P1{ public static void main(String argv[]){ P2 p2 = new P2(); Java面试注意事项 1,有公司通知面试时,首先要了解一下这家公司的背景,做什么产品设备,跟什么产业或行业有关系的; 2,去公司面试首先就是衣冠要整洁得体,不能太过随意,印象分也很重要; 3,面试时首先要自我介绍,这是一个重点,介绍自己不能太过随意,不能撤太多与行业无关的,只需介绍自己的姓名即可,然后介绍那一年在那里读的什么大学什么专业,然后又经过什么培训,培训的大概内容,然后做过什么项目,项目内容点到即可,着一个方向点出发,不能又是.NET又是JAVA的,这样就显得没有目标,最后就是讲一下项目内容,做的是什么项目,运用到什么技术,那些平台上做的,用的什么语言做的,为什么要做这个项目,自己的分工是什么等等,自我介绍不可多讲,时间在两三分钟以内即可; 4,如果面试官会问到自己对将来有没有什么职业规划,对于应届毕业生最少要有个三年计划,三年内我要本本分分的把经验累积起来和把代码编程技术熟练掌握,又或者讲近期内的目标是怎样怎样的;不能没有职业规划; 5,面试官会问到有什么工作经验,可以说自己是刚毕业的学生,工作经验到谈不上有,但是在学校学习时和同学们一起做过很多小项目,这样就列举出一两个项目,然后侧重于讲一个项目,然后这一个项目只要讲自己是做那一块的详细讲就好; 6,然后面试官可能还会问到对公司有什么了解和看法,讲一下对公司的认识,展望一下在贵公司的发展; 7,面试时一定要给自己定好位,认清自己的现状,不能东扯一句西扯一句的,按照自己的特点把自己的弱点和强项都要展示出来; 自我介绍: 我叫***,2009年至今就读*******专业,2010年至今在****做软件开发的培训,主要学下了JAVA、.NET、数据库,侧重于学习了JAVA这一块,学习内容包括:JSP、Servlet、Spring、Struts、Hibernate、Ajax、JavaScript、Tomcat等; 项目: 手机购物网站,项目需求,随着电子市场的庞大演变,越来越多的人都在网络购物,网络购物网站主要是要给客户一个视觉感觉和产品质量,我所设计的这个手机购物网站就符合这两点,有全新的视觉感觉和质量保障;文档设计,显示层,要有主页面,每件产品的页面,有详细信息页面,有购物车页面,客户登陆页面,有结算页面等等几大页面构成的购物网站,要有数据库连接,要有后台管理; 我主要做的模块是通过数据库显示商品在页面中,首先是把产品信息增加写入数据库中(insert into),通过页面和数据库的连接查询显示出产品列表,包括整体列表和每个产品的详细列表,还要做到排列美观和详细的产品信息。 一、php选择题 1.以下哪一项不能把字符串$s1 和$s2 组成一个字符串? A.$s1 + $s2 B.”{$s1}{$s2}” C.$s1.$s2 D.implode(”, array($s1,$s2)) E.以上都可以 2.以下哪个PCRE 正则表达式能匹配字符串php|architect? A..* B.…|……… C.\d{3}\|\d{8} D.[az]{3}\|[az]{9} E.[a-z][a-z][a-z]\|\w{9} 3.基于指定的式样(pattern)把一个字符串分隔开并放入数组,以下哪些函数能做到?(双选) A.preg_split() B.ereg() C.str_split() D.explode() E.chop() 4.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样? A.解释器输出一个类型错误 B.字符串将被转换成数字,再与整型数字相加 C.字符串将被丢弃,只保留整型数字 D.字符串和整型数字将连接成一个新字符串 E.整形数字将被丢弃,而保留字符串 5.考虑如下脚本。假设https://www.sodocs.net/doc/a413995340.html, 能被访问,脚本将输出什么? $s = file_get_contents ("https://www.sodocs.net/doc/a413995340.html,"); strip_tags ($s, array ('p')); echo count ($s); A.https://www.sodocs.net/doc/a413995340.html, 的主页的字符数 B.剔除标签后的https://www.sodocs.net/doc/a413995340.html, 主页的字符数 C.1 D.0 6.以下脚本输出什么? $x = 'apple'; echo substr_replace ($x, 'x', 1, 2); A.x B.axle C.axxle D.applex E.xapple 关于java基础 1.String,StringBuilder,StringBuffer区别是什么?底层数据结构是什么?分别是如何实现的? 2.HashSet的底层实现是什么?它与HashMap有什么关系? 3.Java 的并发包里面有那些知识点? 4.HashCode与HashMap的关系? 5.哈希函数的理解? 6.map在put()的做了哪些事? 7.如果发生hash碰撞,有什么方法可以解决? 8.各种类型的锁? 9.synchronize和lock? 10.hashTable的数据结构? 11.线程安全的map即HashTable和CurrentHashMap,底层的线程安全是如何实现的? 12.hashCode的原理? 13.什么情况下需要重写类的hashCode()方法?什么时候需要重写equals()方法? 14.hashmap添加元素,如果通过hash值得到的位置如果有元素,哪一种情况会取代所在的元素? 15.HashMap添加元素,如果是所得的桶数组的位置有值。该值则被添加到链表尾端,为什么会是 尾端? 16.ArrayList和hashmap底层结构,以及CurrentHashMap解决了什么问题; 17.Hashmap的是否线程安全?为什么是安全或者不安全? 18.HashMap、HashTable以及ConcurrentHashMap的区别; 19.volatile关键字的理解;用在哪些场景? 20.线程的理解以及其实现方式; 21.线程池的参数有哪些?实现原理; 22.线程同步方法有哪些? 23.缓存的原理?为什么要用缓存?为什么会比数据库查询快? 24.反射机制的理解; 25.Object中的方法; 26.String的toString()方法的实现?底层原理? 27.NIO与IO的异同; 28.垃圾回收机制的理解; 29.java8的新特性有哪些?如何使用? 30.static关键字的场景和意义;(拓展:final) 31.如何理解事务? 32.虚拟机的内存结构; 33.动态代理的两种实现方式; 34.悲观锁和乐观锁的区别 35.如何解决跨域问题? 36.xml文件解析方式有几种 37.synchronize的锁的类型 38.秒杀系统的设计 39.分库分表 40.Spring底层是如何实现的; 41.Tomcat容器启动的时候,spring的启动流程; 42.SpringAop除了动态代理,还用了其余的什么原理? 在项目中主要遇到的困难? 讲一下对Springmvc 的理解? Sprin gMvc 是基于过滤器对 servlet 进行了封装的一个框架,我们使用的时候就是在 文件中配置 DispatcherServlet 类; Sprin gMvc 工作时主要是通过 Dis patcherServlet 管理接收到的请求并进行处理。 Spring 用的是注释还是配置文件 注释 讲一下Spring 常用的注解 autowrite Resource Qualifier repository service controller requestMapper responseBody requestParam ModelAttribute Scope Session 和cookie 的区别?怎么动手清除 cookie ?用代码? session 打开浏览器创建的,每个浏览器对应一个 cookie 是在客户端本地,不会随着浏览器关闭而消失 web.xml session 用户可以自己清除本地cookie,也可以在程序中使用代码清除 记住我”怎么实现?吧什么存到session? 使用cookie记住加密的账号和密码 怎么把MyBatis整合到spring ?MyBatis的#和$区别? MyBatis最重要的配置是数据库连接、SqISession的创建和sql映射文件 可以将mybatis的数据库连接和SqISessior和对sql映射文件的扫描配置到spring配置文件中 mybatis中#可以表示任何数据类型都可以,$单独表示数字 Mybites 支持延迟加码吗?原理是什么? mybatis支持延迟加载 在查询的时候不会加载出关联表,但是需要用到关联表的时候,不需要再单独写查询语句,mybatis会自动查询出需要的关联表信息 难怪很多前辈说调试是一个程序员最基本的技能,其重要性甚至超过学习一门语言。不会调试的程序员就意味着他即使会一门语言,却不能编制出任何好的软件。 我以前接触的程序大多是有比较成形的思路和方法,调试起来出的问题都比较小,最近这个是我自己慢慢摸索调试,接触了很多新的调试方法,并查了很多前辈的总结,受益匪浅,总结以前的和新的收获如下: VC 调试篇 设置 为了调试一个程序,首先必须使程序中包含调试信息。一般情况下,一个从AppWizard 创建的工程中包含的Debug Configuration 自动包含调试信息,但是是不是Debug 版本并不是程序包含调试信息的决定因素,程序设计者可以在任意的Configuration 中增加调试信息,包括Release 版本。 为了增加调试信息,可以按照下述步骤进行: ? 打开Project settings 对话框(可以通过快捷键ALT+F7打开,也可以通过IDE 菜单Project/Settings 打开 ?选择C/C++页,Category 中选择general ,则出现一个Debug Info 下拉列表框,可供选择的调试信息方式包括: 命令行 Project settings 说明 无 None 没有调试信息 /Zd Line Numbers Only 目标文件或者可执行文件中只包含全局和导出符号以及代码行信息,不包含符号调试信息 /Z7 C 7.0- Compatible 目标文件或者可执行文件中包含行号和所有符号调试信息,包括变量名及类型,函数及原型等 /Zi Program Database 创建一个程序库(PDB,包括类型信息和符号调试信息。 /ZI Program Database for Edit and Continue 除了前面/Zi 的功能外,这个选项允许对代码进行调试过程中的修改和继续执行。这个选项同时使 #pragma 设置的优化功能无效 ? 选择Link 页,选中复选框"Generate Debug Info",这个选项将使连接器把调试信息写进可执行文件和DLL ?如果C/C++页中设置了Program Database 以上的选项,则Link incrementally 可以选择。选中这个选项,将使程序可以在上一次编译的基础上被编译(即增量编译,而不必每次都从头开始编译。调试方法: 1、使用 Assert(原则:尽量简单assert只在debug下生效,release下不会被编译。 2、防御性的编程 3、使用Trace 4、用GetLastError来检测返回值,通过得到错误代码来分析错误原因 5、把错误信息记录到文件中 位置断点(Location Breakpoint 大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码: 一、 1、下列叙述中,正确的是( Java语言的标识符是区分大小写的) 2、在软件开发中,下面任务不属于设计阶段的是(定义需求并建立系统模型) 3、Java虚拟机的执行过程有多个特点,下列哪个特点不属于JVM执行特点?(异步处理) 4、在关系数据库中,用来表示实体之间联系的是(二维表) 5、能够支持 javadoc 命令的注释语句是( D、/**...*/) 6、在匹配器(Matcher)类中,用于输入字符串与模式串比较的方法是(static boolean matches()) 7、给出下面程序段: if(x>0){System.out.println("Hello.");} else if(x>-3){System.out.println("Nice to meet you!");} else {System.out.println("How are you?");} 若打印字符串“How are you?”,则x的取值范围是(x<=-3) 8、编译并且执行以下代码,会出现什么情况?(2) public class Q{ public static void main(String argv[]){ int anar[]=new int[]{1,2,3}; System.out.println(anar[1]); } } 9、下面属于Java 关键字的是(do) 10、在Java 中,由Java编译器自动导入,而无需在程序中用import导入的包是(java、lang) 二、1. Which correctly create an array of five empty Strings? (String a[] = new String[5];for (int i=0;i<5;a[i++]=””);) 2. 哪些不是Java关键字? (1. TRUE; 2. sizeof ) 3. 下面哪些是合法的标识符。(1. $persons 2.TwoUsers) 4. 哪些类可以作为FileInputStream类的构造方法的参数?(1.File ;2.' + ' + ' + ' + ' + ' + ' + ' + ' + ' + ' + C程序调试步骤to初学者
HR招聘开发人员的面试技巧
数控车床基本操作简单程序调试
技术部经理主管面试测试题及参考要点
SunJava程序员认证考试题
java软件工程师面试题集
实验一-Keil软件的使用及简单程序的调试方法
C#开发人员面试经验
Java开发工程师的面试自我介绍
PLC程序的调试方法及步骤(精)
软件开发人员面试七大有效方法
java考证试题
Java面试技巧
初级开发人员面试题
java开发工作经验面试题集锦
java软件工程师面试基本题_共5页
调试程序的简单说明.
java认证考试试题2422-3-
相关文档
最新文档