首页 文章 精选 留言 我的

精选列表

搜索[文本图像鉴伪],共10007篇文章
优秀的个人博客,低调大师

【实验】Hadoop2.6.0的分布安装

hadoop-2.6.0.tar.gz: http://apache.fayea.com/hadoop/common/hadoop-2.6.0/hadoop-2.6.0.tar.gz jdk-7u79-linux-x64.gz: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 1 设置ip地址 点击(此处)折叠或打开 [root@test1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 # Intel Corporation 82545EM Gigabit Ethernet Controller (Copper) DEVICE=eth0 BOOTPROTO=none ONBOOT=yes HWADDR=00:0c:29:51:cc:37 TYPE=Ethernet NETMASK=255.255.255.0 IPADDR=192.168.23.131 GATEWAY=192.168.23.1 USERCTL=no IPV6INIT=no PEERDNS=yes 执行命令 service network restart 验证: ifconfig 2 关闭防火墙 执行命令 service iptables stop 验证: service iptables status 3 关闭防火墙的自动运行 执行命令 chkconfig iptables off 验证: chkconfig --list | grep iptables 4 设置主机名 执行命令 (1)hostname hadoop1 (2)vi /etc/sysconfig/network NETWORKING=yes NETWORKING_IPV6=yes HOSTNAME=hadoop1 5 ip与hostname绑定 执行命令 (1)vi /etc/hosts 192.168.23.131 hadoop1.localdomain hadoop1 验证: ping hadoop1 6 设置ssh免密码登陆 执行命令 (1)ssh-keygen -t rsa (2)cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys 验证: [root@test1 ~]# ssh hadoop1 The authenticity of host 'hadoop1 (192.168.23.131)' can't be established. RSA key fingerprint is e9:9f:f2:ea:f2:aa:47:58:5f:12:ea:3c:50:3f:0d:1b. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'hadoop1,192.168.23.131' (RSA) to the list of known hosts. Last login: Thu Feb 11 20:54:11 2016 from 192.168.23.1 [root@hadoop1 ~]# ssh hadoop1 Last login: Thu Feb 11 20:57:56 2016 from hadoop1.localdomain 7 安装jdk http://my.oschina.net/gaowm/blog/275184 (1)执行命令 点击(此处)折叠或打开 [root@hadoop1 java]# cd /usr/share/java [root@hadoop1 java]# cd [root@hadoop1 ~]# cd /usr/share/java [root@hadoop1 java]# cp /tmp/jdk-7u79-linux-x64.gz ./ [root@hadoop1 java]# tar -xzvf jdk-7u79-linux-x64.gz (2)vi /etc/profile 增加内容如下: export JAVA_HOME=/usr/share/java/jdk1.7.0_79 export PATH=.:$JAVA_HOME/bin:$PATH (3)source /etc/profile 验证: java -version 8 安装hadoop (1)执行命令 点击(此处)折叠或打开 [root@hadoop1 ~]# cd /usr/local/ [root@hadoop1 local]# cp /tmp/hadoop-2.6.0.tar.gz ./ [root@hadoop1 local]# tar -zxvf hadoop-2.6.0.tar.gz [root@hadoop1 local]# mv hadoop-2.6.0 hadoop (2)vi /etc/profile 增加内容如下: export JAVA_HOME=/usr/share/java/jdk1.7.0_79 export HADOOP_HOME=/usr/local/hadoop export PATH=.:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH (3)source /etc/profile (4)修改/usr/local/hadoop/etc/hadoop目录下的配置文件hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml 点击(此处)折叠或打开 [root@hadoop1 hadoop]# vi hadoop-env.sh export JAVA_HOME=/usr/share/java/jdk1.7.0_79 [root@hadoop1 hadoop]# vi core-site.xml <configuration> <property> <name>fs.default.name</name> <value>hdfs://hadoop1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> </property> </configuration> [root@hadoop1 hadoop]# vi hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> </configuration> ~ [root@hadoop1 hadoop]# cp mapred-site.xml.template mapred-site.xml [root@hadoop1 hadoop]# vi mapred-site.xml <configuration> <property> <name>mapred.job.tracker</name> <value>hadoop1:9001</value> </property> </configuration> (5)hadoop namenode -format (6)start-all.sh 点击(此处)折叠或打开 [root@hadoop1 hadoop]# cd sbin [root@hadoop1 sbin]# start-all.sh This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh 16/02/11 21:40:54 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable Starting namenodes on [hadoop1] hadoop1: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-hadoop1.out The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is e9:9f:f2:ea:f2:aa:47:58:5f:12:ea:3c:50:3f:0d:1b. Are you sure you want to continue connecting (yes/no)? yes localhost: Warning: Permanently added 'localhost' (RSA) to the list of known hosts. localhost: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-hadoop1.out Starting secondary namenodes [0.0.0.0] The authenticity of host '0.0.0.0 (0.0.0.0)' can't be established. RSA key fingerprint is e9:9f:f2:ea:f2:aa:47:58:5f:12:ea:3c:50:3f:0d:1b. Are you sure you want to continue connecting (yes/no)? yes 0.0.0.0: Warning: Permanently added '0.0.0.0' (RSA) to the list of known hosts. 0.0.0.0: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-hadoop1.out 16/02/11 21:41:27 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable starting yarn daemons starting resourcemanager, logging to /usr/local/hadoop/logs/yarn-root-resourcemanager-hadoop1.out localhost: starting nodemanager, logging to /usr/local/hadoop/logs/yarn-root-nodemanager-hadoop1.out [root@hadoop1 sbin]# jps 7192 SecondaryNameNode 7432 NodeManager 7468 Jps 6913 NameNode 7333 ResourceManager 7036 DataNode 验证: (1)执行命令jps 如果看到5个新的java进程,分别是NameNode、SecondaryNameNode、DataNode、ResourceManager、NodeManager (2)在浏览器查看 hadoop web控制台页面的端口整理: 50070:hdfs文件管理 http://192.168.23.131:50070 8088:ResourceManager http://192.168.23.131:8088 8042:NodeManager http://192.168.23.131:8042 9 启动时没有NameNode的可能原因: (1)没有格式化 (2)环境变量设置错误 (3)ip与hostname绑定失败 参考: http://stark-summer.iteye.com/blog/2184123 http://www.aboutyun.com/thread-7513-1-1.html

优秀的个人博客,低调大师

hadoop2.2.0分布式安装

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/44228263 修改主机名和IP的映射关系 vi /etc/hosts 192.168.61.134 hadoop 关闭防火墙 #查看防火墙状态 service iptables status #关闭防火墙 service iptables stop #查看防火墙开机启动状态 chkconfig iptables --list #关闭防火墙开机启动 chkconfig iptables off 重启Linux reboot 安装JDK 上传JDK文件到linux中 解压jdk 创建文件夹 mkdir /usr/java 在/usr/java目录下安装 chmod 755jdk-6u45-linux-i586.bin 安装 ./jdk-6u45-linux-i586.bin 安装完成之后 重命名jdk的安装文件夹为jdk 将java添加到环境变量中 vi /etc/profile #在文件最后添加 export JAVA_HOME=/usr/java/jdk export PATH=$PATH:$JAVA_HOME/bin 刷新配置 source /etc/profile 安装Hadoop 上传hadoop安装包到hadoop宿主目录下 解压hadoop安装包到hadoop根目录 tar -zxvf hadoop-2.2.0-64bit.tar.gz 修改配置文件(5个) 第一个:hadoop-env.sh #在27行修改 export JAVA_HOME=/usr/java/jdk 第二个:core-site.xml <configuration> <!-- 指定HDFS老大(namenode)的通信地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop:9000</value> </property> <!-- 指定hadoop运行时产生文件的存储路径 --> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop/tmp</value> </property> </configuration> 第三个:hdfs-site.xml <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> 第四个:mapred-site.xml.template 需要重命名: mv mapred-site.xml.template mapred-site.xml <configuration> <!-- 通知框架MR使用YARN --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration> 第五个:yarn-site.xml <configuration> <!-- reducer取数据的方式是mapreduce_shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration> 3.4将hadoop添加到环境变量 vi /etc/profile export JAVA_HOME=/usr/java/jdk export HADOOP_HOME=/home/hadoop/hadoop export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin source /etc/profile 3.5格式化HDFS(namenode)第一次使用时要格式化 hadoop namenode -format 3.6启动hadoop 先启动HDFS sbin/start-dfs.sh 再启动YARN sbin/start-yarn.sh 3.7验证是否启动成功 使用jps命令验证 27408 NameNode 28218 Jps 27643 SecondaryNameNode 28066 NodeManager 27803 ResourceManager 27512 DataNode http://hadoop:50070 (HDFS管理界面) 在这个文件中添加linux主机名和IP的映射关系 C:\Windows\System32\drivers\etc\hosts 192.168.61.134 hadoop http://hadoop:8088 (MR管理界面) 4.配置ssh免登陆 在服务器上 输入命令 chmod -R 755 /home/hadoop mkdir ~/.ssh ssh-keygen -t rsa ssh-keygen -t dsa rsa和dsa分别生成不同加密格式的ssh密钥,直接一直按回车键保存在默认的路径 在节点上配置authorized_keys文件 输入命令 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys 将本地的密钥保存在authorized_keys 输入命令 chmod -R 700 ~/.ssh 注意当前你所在的路径

优秀的个人博客,低调大师

Android 图像压缩

Android中图片是以Bitmap形式存在的,Bitmap所占内存直接影响应用所占内存大小,Bitmap所占内存大小计算公式: 图片长度 * 图片宽度 * 一个像素点占用的字节数 Bitmap压缩颜色格式: 图1.png 质量压缩 Bitmap bitmap = BitmapFactory.decodeFile(path); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int quality = 80; bitmap.compress(Bitmap.CompressFormat.JPEG, quality, baos); byte[] bytes = baos.toByteArray(); bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); 图片的大小没有变化,因为质量有压缩不会减少图片的像素,它是在保持像素的前提下改变图图片的位深及透明度,来达到压缩图片的目的。注: 当compress方法中第一个参数为Bitmap.CompressFormat.PNG时,quality没有作用,因为png图片时无损的,不能进行压缩。 采样率压缩 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2; Bitmap bitmap = BitmapFactory.decodeFile(path, options); 设置inSampleSize的值为2时,宽和高都变为原来的1/2。 注:当设置options.inJustDecodeBounds = true时,BitmapFactory解码图片时会返回空的Bitmap对象,但是也可以返回Bitmap的宽、高以及MimeType。 缩放法压缩(Martix) Matrix matrix = new Matrix(); matrix.setScale(0.5f, 0.5f); Bitmap bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true); 其中,bitmap的宽高分别缩小了一半,图片大小压缩成1/4。 RGB_565 BitmapFactory.Options options = new BitmapFactory.Options(); options.inPreferredConfig = Bitmap.Config.RGB_565; Bitmap bitmap = BitmapFactory.decodeFile(path, options); 图片大小直接缩小了一半,宽高没有变。注意:由于ARGB_4444的画质惨不忍睹,一般假如对图片没有透明度要求的话,可以改成RGB_565,相比ARGB_8888将节省一半的内存开销。 createScaledBitmap Bitmap bitmap = BitmapFactory.decodeFile(path); bitmap = Bitmap.createScaledBitmap(bitmap, 150, 150, true); 这里将图片压缩成用户所期望的宽高。 系统压缩工具类 从Android 2.2开始系统新增了一个缩略图ThumbnailUtils类,位于framework包下的android.media.ThumbnailUtils位置,可以帮助我们从mediaprovider中获取系统中的视频或图片文件的缩略图,该类提供了三种静态方法可以直接调用获取。 1、extractThumbnail (source, width, height): /** * 创建一个指定大小的缩略图 * @param source 源文件(Bitmap类型) * @param width 压缩成的宽度 * @param height 压缩成的高度 */ ThumbnailUtils.extractThumbnail(source, width, height); 2、extractThumbnail(source, width, height, options): /** * 创建一个指定大小居中的缩略图 * @param source 源文件(Bitmap类型) * @param width 输出缩略图的宽度 * @param height 输出缩略图的高度 * @param options 如果options定义为OPTIONS_RECYCLE_INPUT,则回收@param source这个资源文件 * (除非缩略图等于@param source) * */ ThumbnailUtils.extractThumbnail(source, width, height, options); 3、createVideoThumbnail(filePath, kind): /** * 创建一张视频的缩略图 * 如果视频已损坏或者格式不支持可能返回null * @param filePath 视频文件路径 如:/sdcard/android.3gp * @param kind kind可以为MINI_KIND或MICRO_KIND * */ ThumbnailUtils.createVideoThumbnail(filePath, kind); 压缩工具类 public class CompressUtils { /** * 按质量压缩 * @param bitmap * @return */ public static Bitmap compressImage(Bitmap bitmap){ ByteArrayOutputStream baos = new ByteArrayOutputStream(); //质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos); int options = 100; //循环判断如果压缩后图片是否大于100kb,大于继续压缩 while ( baos.toByteArray().length / 1024>100) { //清空baos baos.reset(); bitmap.compress(Bitmap.CompressFormat.JPEG, options, baos); options -= 10;//每次都减少10 } //把压缩后的数据baos存放到ByteArrayInputStream中 ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray()); //把ByteArrayInputStream数据生成图片 Bitmap newBitmap = BitmapFactory.decodeStream(isBm, null, null); return newBitmap; } /** * 按图片尺寸压缩 参数为路径 * @param imgPath 图片路径 * @param pixelW 目标图片宽度 * @param pixelH 目标图片高度 * @return */ public static Bitmap compressImageFromPath(String imgPath, int pixelW, int pixelH) { BitmapFactory.Options options = new BitmapFactory.Options(); // 开始读入图片,此时把options.inJustDecodeBounds 设回true,即只读边不读内容 options.inJustDecodeBounds = true; options.inPreferredConfig = Bitmap.Config.RGB_565; BitmapFactory.decodeFile(imgPath,options); options.inJustDecodeBounds = false; options.inSampleSize = computeSampleSize(options , pixelH > pixelW ? pixelH : pixelW ,pixelW * pixelH ); Bitmap bitmap = BitmapFactory.decodeFile(imgPath, options); return bitmap; } /** * 按图片尺寸压缩 参数是bitmap * @param bitmap * @param pixelW * @param pixelH * @return */ public static Bitmap compressImageFromBitmap(Bitmap bitmap, int pixelW, int pixelH) { ByteArrayOutputStream os = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os); if( os.toByteArray().length / 1024>1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出 os.reset(); bitmap.compress(Bitmap.CompressFormat.JPEG, 50, os);//这里压缩50%,把压缩后的数据存放到baos中 } ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; options.inPreferredConfig = Bitmap.Config.RGB_565; BitmapFactory.decodeStream(is, null, options); options.inJustDecodeBounds = false; options.inSampleSize = computeSampleSize(options , pixelH > pixelW ? pixelH : pixelW ,pixelW * pixelH ); is = new ByteArrayInputStream(os.toByteArray()); Bitmap newBitmap = BitmapFactory.decodeStream(is, null, options); return newBitmap; } /** * 对图片进行缩放指定大小 * @param bitmap * @param width * @param height * @return */ public static Bitmap scaleTo(Bitmap bitmap, int width, int height){ int originalWidth = bitmap.getWidth(); int originalHeight = bitmap.getHeight(); float xScale = (float)width / originalWidth; float yScale = (float)height / originalHeight; Matrix matrix = new Matrix(); matrix.setScale(xScale,yScale); return Bitmap.createBitmap(bitmap, 0, 0, originalWidth, originalHeight, matrix, true); } /** * 以最省内存的方式读取本地资源的图片 * @param context * @param resId * @return */ public static Bitmap readBitmap(Context context, int resId) { BitmapFactory.Options opt = new BitmapFactory.Options(); opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; // 获取资源图片 InputStream is = context.getResources().openRawResource(resId); return BitmapFactory.decodeStream(is, null, opt); } /** * android源码提供给我们的动态计算出图片的inSampleSize方法 * @param options * @param minSideLength * @param maxNumOfPixels * @return */ public static int computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels) { int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels); int roundedSize; if (initialSize <= 8) { roundedSize = 1; while (roundedSize < initialSize) { roundedSize <<= 1; } } else { roundedSize = (initialSize + 7) / 8 * 8; } return roundedSize; } private static int computeInitialSampleSize(BitmapFactory.Options options,int minSideLength, int maxNumOfPixels) { double w = options.outWidth; double h = options.outHeight; int lowerBound = (maxNumOfPixels == -1) ? 1 : (int) Math.ceil(Math.sqrt(w * h / maxNumOfPixels)); int upperBound = (minSideLength == -1) ? 128 :(int) Math.min(Math.floor(w / minSideLength), Math.floor(h / minSideLength)); if (upperBound < lowerBound) { return lowerBound; } if ((maxNumOfPixels == -1) && (minSideLength == -1)) { return 1; } else if (minSideLength == -1) { return lowerBound; } else { return upperBound; } } } 有效的处理Bitmap OOM方法 public class BitmapActivity extends Activity { public ImageView imageView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.bitmap_activity); imageView = (ImageView) findViewById(R.id.imageView1); ImageAsyncTask task = new ImageAsyncTask(imageView,50,50); task.execute("http://image.baidu.com/search/down?tn=download&word=download&ie=utf8&fr=detail&url=http%3A%2F%2Fimg1.pconline.com.cn%2Fpiclib%2F200904%2F28%2Fbatch%2F1%2F32910%2F12408824046039mk21hbi75.jpg&thumburl=http%3A%2F%2Fimg2.imgtn.bdimg.com%2Fit%2Fu%3D3414739956%2C4196877666%26fm%3D21%26gp%3D0.jpg"); } /** * 计算出压缩比 * @param options * @param reqWith * @param reqHeight * @return */ public int calculateInSampleSize(BitmapFactory.Options options,int reqWidth,int reqHeight) { //通过参数options来获取真实图片的宽、高 int width = options.outWidth; int height = options.outHeight; int inSampleSize = 1;//初始值是没有压缩的 if(width > reqWidth || height > reqHeight) { //计算出原始宽与现有宽,原始高与现有高的比率 int widthRatio = Math.round((float)width/(float)reqWidth); int heightRatio = Math.round((float)height/(float)reqHeight); //选出两个比率中的较小值,这样的话能够保证图片显示完全 inSampleSize = widthRatio < heightRatio ? widthRatio:heightRatio; } System.out.println("压缩比: "+inSampleSize); return inSampleSize; } /** * 将InputStream转换为Byte数组 * @param in * @return */ public static byte[] inputStreamToByteArray(InputStream in) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int len; try { while((len = in.read(buffer)) != -1) { outputStream.write(buffer, 0, len); } } catch (IOException e) { e.printStackTrace(); }finally{ try { in.close(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } return outputStream.toByteArray(); } class ImageAsyncTask extends AsyncTask<String, Void, Bitmap> { public ImageView iv; public int reqWidth; public int reqHeight; public ImageAsyncTask(ImageView imageView,int reqWidth,int reqHeight) { this.iv = imageView; this.reqWidth = reqWidth; this.reqHeight = reqHeight; } @Override protected Bitmap doInBackground(String... params) { URL url; HttpURLConnection connection = null; InputStream in = null; Bitmap beforeBitmap = null; Bitmap afterBitmap = null; try { url = new URL(params[0]); connection = (HttpURLConnection) url.openConnection(); in = connection.getInputStream(); BitmapFactory.Options options = new BitmapFactory.Options(); //设置BitmapFactory.Options的inJustDecodeBounds属性为true表示禁止为bitmap分配内存 options.inJustDecodeBounds = true; byte[] data = inputStreamToByteArray(in); beforeBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options);//这次调用的目的是获取到原始图片的宽、高,但是这次操作是没有写内存操作的 options.inSampleSize = calculateInSampleSize(options,reqWidth, reqHeight); //设置这次加载图片需要加载到内存中 options.inJustDecodeBounds = false; afterBitmap = BitmapFactory.decodeByteArray(data, 0, data.length, options); float afterSize = (float)(afterBitmap.getRowBytes()*afterBitmap.getHeight()); System.out.println("压缩之后的图片大小: "+(float)afterSize/1024+"KB"); } catch (Exception e) { System.out.println(e.toString()); } return afterBitmap; } @Override protected void onPostExecute(Bitmap result) { if(result != null) imageView.setImageBitmap(result); } } } Github图片压

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册