jni调用的函数和native函数不在一个java文件内,调用出错

问题描述如题。下来我贴代码:
这是含有native函数的java文件

 public class ProgressBarOperation {
    static {
        System.loadLibrary("Pressure");
    }

    public native void startMonitor();

    public native void stopMonitor();
}

native函数所在的java文件不能继承Activity之类的。是我哪里搞错了还是什么原因,求大神解释。
接下来就是主文件,继承Activity的

 public class MainActivity extends Activity implements OnClickListener {
    private ProgressBar progressBar;
    private ProgressBarOperation operation;
    private Button btn_start, btn_stop;

    static {
        System.loadLibrary("Pressure");
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        operation = new ProgressBarOperation();
        btn_start = (Button)findViewById(R.id.btn_start);
        btn_start.setOnClickListener(this);
        btn_stop = (Button)findViewById(R.id.btn_stop);
        btn_stop.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.btn_start) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    operation.startMonitor();
                }
            }).start();
        } else if (v.getId() == R.id.btn_stop) {
            operation.stopMonitor();
        }
    }

    public void setPressure(int pressure) {
        Log.e("pressure", "" + pressure);
        progressBar.setProgress(pressure);
    }
}

接下来就是自己编写jni文件了。中间自动生成头文件就不说了
我把整个cpp文件全部贴过来

 #include <jni.h>
#include <stdlib.h>
#include <unistd.h>
#include "com_example_pressuretest_ProgressBarOperation.h"

int getPressure() {
    return rand() % 100;
}

int flag = JNI_TRUE;

JNIEXPORT void JNICALL Java_com_example_pressuretest_ProgressBarOperation_startMonitor(
        JNIEnv *env, jobject obj) {
    while (flag) {
        sleep(1);
        //拿到字节码对象
        jclass clazz = env->FindClass("com/example/pressuretest/MainActivity");
        jmethodID methodId = env->GetMethodID(clazz, "setPressure", "(I)V");
        jobject dpobj= env->NewObject(clazz, methodId);
        env->CallVoidMethod(dpobj, methodId, getPressure());
    }
}

JNIEXPORT void JNICALL Java_com_example_pressuretest_ProgressBarOperation_stopMonitor(
        JNIEnv *env, jobject obj) {
    flag = JNI_FALSE;
}

env->CallVoidMethod(dpobj, methodId, getPressure());这句话一直报错,错误提示也看不来究竟错在哪里

5个回答

我看错了,这个obj代表的是ProgressBarOperation 的对象,你要想办法把MainActivity 的对象传进来或者可以取到,而不能直接去new一个

shihengzhen101
AlbertS 回复勇敢地追:解决了问题就好,帮你解决了问题也使我自己进步了,望及时采纳答案
3 年多之前 回复
lxj1137800599
勇敢地追 回复AlbertS: 可以了也,谢谢你哦。一开始我定义的静态方法直接返回Context,肯定不行;如果里面直接调用setPressure的话就可以了,连获取对象都不要。再次感谢哦
3 年多之前 回复
shihengzhen101
AlbertS 回复勇敢地追: ProgressBarOperation 这个类可以是由于他可以作为工具类,随便申对象,但是MainActivity 不可以
3 年多之前 回复
shihengzhen101
AlbertS 回复勇敢地追:变通一下,还是在MainActivity 类中定义一个自身类型的静态变量selfObject,在成员方法onCreate中将this指针赋值给这个静态变量selfObject,然后在定义一个静态方法SelfStatic(),方法中调用selfObject.setPressure() , 然后你在cpp中调用静态方法 可以吗?我感觉理论上说的通啊!
3 年多之前 回复
lxj1137800599
勇敢地追 回复AlbertS: jclass clazz = env->FindClass("com/example/pressuretest/ProgressBarOperation"); jmethodID methodId = env->GetMethodID(clazz, "set", "()V"); jobject jobt = env->AllocObject(clazz); env->CallVoidMethod(jobt, methodId, getPressure());
3 年多之前 回复
lxj1137800599
勇敢地追 回复AlbertS: 如果你在ProgressBarOperation 定义一个非静态函数是可以调用的。代码如下:我试过了,可行
3 年多之前 回复
lxj1137800599
勇敢地追 回复AlbertS: 你之前不是说“在MainActivity 类中定义一个自身类型的变量,在成员方法中将this指针赋值给这个变量,在写一个静态方法获得这个变量,把参数类型对应好,这样的就可以通过静态方法取到MainActivity 的对象了”这句话么?在cpp文件里面要想调用静态方法必须要有GetStaticMethodID这个函数。这个函数第三个参数是函数参数的签名,这个参数是java类型的数据,没有context这个类型。不知道你明白了没?
3 年多之前 回复
shihengzhen101
AlbertS 我表示看不懂你在说什么
3 年多之前 回复
lxj1137800599
勇敢地追 回复AlbertS: 我试过了,不可能实现。因为如果需要一个静态函数来传参的话,返回值一定是Context。而GetStaticMethodID后面最后的参数只能是java类型的,没有context,所以无法通过这个方法获得MainActivity的jobject。谢谢你啦
3 年多之前 回复
lxj1137800599
勇敢地追 回复AlbertS: 我看了一下,如果是ProgressBarOperation 这个类,是不是就可以重新申请对象?如果是MainActivity就不能?
3 年多之前 回复
shihengzhen101
AlbertS 你只能设法获取原来的创建的对象
3 年多之前 回复
shihengzhen101
AlbertS 回复勇敢地追:这个类不能重新申请对象
3 年多之前 回复
lxj1137800599
勇敢地追 jobject jobt = env->AllocObject(clazz); 用这个方法还是不行
3 年多之前 回复
shihengzhen101
AlbertS 回复AlbertS: 在MainActivity 类中定义一个自身类型的静态变量
3 年多之前 回复
shihengzhen101
AlbertS 回复勇敢地追: 我每次也是上网查,我想了一个方法你可以试一试,在MainActivity 类中定义一个自身类型的变量,在成员方法中将this指针赋值给这个变量,在写一个静态方法获得这个变量,把参数类型对应好,这样的就可以通过静态方法取到MainActivity 的对象了,我只是这么想想,你看看这样能不能实现吧
3 年多之前 回复
lxj1137800599
勇敢地追 那该怎么去传啊?没有这方面的资料啊
3 年多之前 回复

你先看看这个clazz 有没有正确的取到,输出日志查一下

lxj1137800599
勇敢地追 这个是取得到的,我用的静态方法都能成功
接近 4 年之前 回复

这个主活动好像不能直接像这样jobject dpobj直接new一个对象,要用函数传进来的那个obj,就是函数JNIEXPORT void JNICALL Java_com_example_pressuretest_ProgressBarOperation_startMonitor(
JNIEnv *env, jobject obj)
的第二个参数

lxj1137800599
勇敢地追 改成第二个参数以后直接就在CallVoidMethod里面报了空指针的错误
接近 4 年之前 回复

我现在再把我的问题补充一下

 JNIEXPORT void JNICALL Java_com_example_pressuretest_ProgressBarOperation_startMonitor(
        JNIEnv *env, jobject obj) {
    while (flag) {
        sleep(1);
        //静态方法
        //jclass clazz = env->FindClass("com/example/pressuretest/MainActivity");
        //jmethodID methodId = env->GetStaticMethodID(clazz, "set", "(I)V");
        //env->CallStaticVoidMethod(clazz, methodId, getPressure());

        //非静态方法
        jclass clazz = env->FindClass("com/example/pressuretest/MainActivity");
        jmethodID methodId = env->GetMethodID(clazz, "setPressure", "(I)V");
        jobject dpobj = env->NewObject(clazz, methodId);
        env->CallVoidMethod(obj, methodId, getPressure());
    }
}

在MainActivity里面重新定义了两个方法

    public void setPressure(int pressure) {
        Log.e("pressure", "" + pressure);
        progressBar.setProgress(pressure);
    }

    public static void set(int pressure) {
        Log.e("pressure", "" + pressure);
    }

静态方法的调用没有问题,有log显示。非静态的就不行,《android开发与艺术探索》中提到的“非静态只是多了一步构造对象的过程”,它没有具体说明怎么构造,所以我就自己构造了一个jobject dpobj = env->NewObject(clazz, methodId);。但是还是有问题

你这个写法完全有问题:
你想在JNI里面回调Activity的方法,那你必须将activity的对象传到JNI里面去,而不是说在JNI里面去New一个Activity的对象,这样的话就不是同一个对象了

我建议你将回调方法setPressure写到ProgressBarOperation 类里面,然后Activity再监听ProgressBarOperation的setPressure方法

lxj1137800599
勇敢地追 回复媒体盒子: 一定需要一个单例模式么?应该不需要吧
3 年多之前 回复
lxj1137800599
勇敢地追 回复媒体盒子: 你的意思是说我最好还要把ProgressBarOperation设置成单例模式,然后调用里面的某个方法,然后通知到activity的非静态方法?
3 年多之前 回复
luowenlong860502
媒体盒子 回复勇敢地追: 我是说你在JNI里面调用Activity的方法有问题,一般必须弄一个单例模式的类,然后JNI里面调用该类的方法,然后由该类去通知到Activity
3 年多之前 回复
luowenlong860502
媒体盒子 回复勇敢地追: 你如果非要调用Activity的非静态方法,那么你必须把该activity的对象传到jni里面去保存起来,然后再在Jni里面通过该对象调用非静态方法,但问题是,你JNI里面根本不知道Activity的生命周期
3 年多之前 回复
lxj1137800599
勇敢地追 调用ProgressBarOperation的非静态方法我会,没什么问题。如果我一定要调用Activity的非静态方法呢?是不是就是上面AlbertS说的
3 年多之前 回复
lxj1137800599
勇敢地追 你的意思是说“在JNI里面回调Activity的方法”这种写法有问题?还是只能调用某个java类的非静态方法
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
JNI调用dll,报错dll中找不到函数

``` I am tring to use opencv and java for face detection, and in that pursit i found this "JNI2OPENCV" file....but i am confused on how to make it work, can anyone help me? http://img519.imageshack.us/img519/4803/askaj.jpg and the following is the FaceDetection.java class JNIOpenCV { static { System.loadLibrary("JNI2OpenCV"); } public native int[] detectFace(int minFaceWidth, int minFaceHeight, String cascade, String filename); } public class FaceDetection { private JNIOpenCV myJNIOpenCV; private FaceDetection myFaceDetection; public FaceDetection() { myJNIOpenCV = new JNIOpenCV(); String filename = "lena.jpg"; String cascade = "haarcascade_frontalface_alt.xml"; int[] detectedFaces = myJNIOpenCV.detectFace(40, 40, cascade, filename); int numFaces = detectedFaces.length / 4; System.out.println("numFaces = " + numFaces); for (int i = 0; i < numFaces; i++) { System.out.println("Face " + i + ": " + detectedFaces[4 * i + 0] + " " + detectedFaces[4 * i + 1] + " " + detectedFaces[4 * i + 2] + " " + detectedFaces[4 * i + 3]); } } public static void main(String args[]) { FaceDetection myFaceDetection = new FaceDetection(); } } ``` Exception in thread "main" java.lang.UnsatisfiedLinkError: FaceDetection.JNIOpenCV.detectFace(IILjava/lang/String;Ljava/lang/String;)[I at FaceDetection.JNIOpenCV.detectFace(Native Method) at FaceDetection.FaceDetection.<init>(FaceDetection.java:19) at FaceDetection.FaceDetection.main(FaceDetection.java:29) Java Result: 1 BUILD SUCCESSFUL (total time: 2 seconds) ``` ```

回调函数和注册回调函数的JNI接口该如何书写?

C++的函数代码如下,注册接口为cppfunction,回调函数为pFunc,其参数为PARA结构体。 ``` void cppfunction(void (*pFunc)(PARA*)) ``` 通过动态注册JNI的方式,cppfunction的函数签名该如何书写?直接将其参数标为jlong吗? {“native_cppfunction”,"{jlong}V",""cppfunction} 对于回调函数的函数签名,其参数为自定义的结构体,在java中该如何传递到native?难道将一个个的成员拆开进行传递,在native进行拼接成PARA结构体,然后在调用pFunc? 求大神帮帮忙~

通过jni调用底层的open函数时老是失败

各位大神,麻烦帮忙看一下如下程序,我在应用程序调用底层的open函数时,在jni那里老是open失败,字符设备已经注册进系统,相应的文件节点也有,就是fd返回老是-1,还请各位帮忙看一下 jni file: #define LOG_TAG "HardControl hardcontrol.cpp" #include <utils/Log.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/ioctl.h> #include <stdlib.h> #include "jni.h" jint fd; jint ledOpen(JNIEnv *env, jobject cls) { ALOGI("jkk native ledOpen 1:%d",fd); fd = open("/dev/leds_test", O_RDWR); ALOGI("jkk native ledOpen 2:%d",fd); if (fd >= 0) return 0; else{ ALOGI("jkk native ledOpen failed,fd=%d",fd); return -1; } // return 0; } jint ledClose(JNIEnv *env, jobject cls) { ALOGI("native ledClose ..."); return 0; } jint ledCtrl(JNIEnv *env, jobject cls, jint which, jint status) { int ret = ioctl(fd, status, which); ALOGI("native ledCtrl: %d, %d, %d",which,status,ret); return ret; } static const char *classPathName = "com/lenovo/hardlibrary/HardControl"; static JNINativeMethod methods[] = { {"ledOpen", "()I", (void *)ledOpen}, {"ledClose", "()I", (void *)ledClose}, {"ledCtrl", "(II)I", (void *)ledCtrl}, }; /* * Register several native methods for one class. */ static int registerNativeMethods(JNIEnv* env, const char* className, JNINativeMethod* gMethods, int numMethods) { jclass clazz; clazz = env->FindClass(className); if (clazz == NULL) { ALOGE("Native registration unable to find class '%s'", className); return JNI_FALSE; } if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { ALOGE("RegisterNatives failed for '%s'", className); return JNI_FALSE; } return JNI_TRUE; } /* * Register native methods for all classes we know about. * * returns JNI_TRUE on success. */ static int registerNatives(JNIEnv* env) { if (!registerNativeMethods(env, classPathName, methods, sizeof(methods) / sizeof(methods[0]))) { return JNI_FALSE; } return JNI_TRUE; } // ---------------------------------------------------------------------------- /* * This is called by the VM when the shared library is first loaded. */ typedef union { JNIEnv* env; void* venv; } UnionJNIEnvToVoid; jint JNI_OnLoad(JavaVM* vm, void* reserved) { UnionJNIEnvToVoid uenv; uenv.venv = NULL; jint result = -1; JNIEnv* env = NULL; ALOGI("JNI_OnLoad"); if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) { ALOGE("ERROR: GetEnv failed"); goto bail; } env = uenv.env; if (registerNatives(env) != JNI_TRUE) { ALOGE("ERROR: registerNatives failed"); goto bail; } result = JNI_VERSION_1_4; bail: return result; } driver file: #include <linux/kernel.h> #include <linux/init.h> #include <linux/platform_device.h> #include <linux/gpio.h> #include <linux/leds.h> #include <linux/of_platform.h> #include <linux/of_gpio.h> #include <linux/slab.h> #include <linux/workqueue.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/cdev.h> static int major; static struct class *cls; //struct cdev *my_cdev; static int led_open(struct inode * inode, struct file * file) { /* int err; err = gpio_request(0, "led1"); err = gpio_direction_output(0,1); err = gpio_request(1, "led2"); err = gpio_direction_output(1,1); err = gpio_request(2, "led3"); err = gpio_direction_output(2,1); err = gpio_request(3, "led4"); err = gpio_direction_output(3,1); */ printk("jkk led_open.\n"); return 0; } static long led_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { printk("jkk led_ioctl, %d,%lu.\n",cmd,arg); return 0; } static struct file_operations leds_ops={ .owner = THIS_MODULE, .open = led_open, .unlocked_ioctl = led_ioctl, }; int leds_init(void) { // int err,devno = MKDEV(major,minor); // cdev_init(my_cdev,&leds_ops); // my_cdev->owner = THIS_MODULE; // my_cdev->ops = &leds_ops; // err = cdev_add(my_cdev,devno,1); // if(err) // printk("add failed,err=%d.\n",err); printk("jkk leds_init.\n"); major = register_chrdev(0, "leds_test", &leds_ops); printk("jkk leds_init major=%d.\n",major); cls = class_create(THIS_MODULE, "leds_test"); device_create(cls, NULL, MKDEV(major, 0), NULL, "leds_test"); /* /dev/leds_jkk */ return 0; } void leds_exit(void) { device_destroy(cls, MKDEV(major, 0)); class_destroy(cls); unregister_chrdev(major, "leds_test"); } module_init(leds_init); module_exit(leds_exit); MODULE_LICENSE("GPL");

android在jni中调用system()函数

想在android程序中实现设备的重启。 android在jni(c++写的)中调用system("reboot"),但是调试时,程序执行到此无任何反应,并继续执行了下面的代码。也试过了其他方法,如:android_reboot(ANDROID_RB_RESTART,0,0); 仍然无法实现重启。 想问各位有什么好办法解决吗?

Android JNI 调用非JNI规范的so文件

请问Android中可以使用JNI调用非JNI规范纯C函数编译出的so文件吗 我使用的是针对特殊平台产生的非JNI规范的so文件,在Android官网看到谷歌采用了一种新的make方式,通过Cmake和CMakeLists.txt来链接编译 我看到官方的源码[谷歌官方示例](https://github.com/googlesamples/android-ndk/tree/master/native-activity/app/src/main/cpp "")直接放在默认的libry目录下,我想让他在自己的目录下找,但是最新的这种CMake方式,不知道so文件和头文件的目录应该怎么建立。[谷歌官方NDK](https://developer.android.com/studio/projects/add-native-code.html#new-project "") ``` add_library( iconv SHARED IMPORTED ) set_target_properties( # Specifies the target library. iconv # Specifies the parameter you want to define. PROPERTIES IMPORTED_LOCATION # Provides the path to the library you want to import. /libs/src/armeabi/libiconv.so) #include_directories( imported-lib/src/include/ ) target_link_libraries( # Specifies the target library. native-lib # Links the target library to the log library # included in the NDK. iconv ${log-lib} ) ``` 但是Make时一直报错,显示iconv.so needed by native-lib.so ; missing or no known rule to make it

java调用JNI的时候老是抛异常,求帮助

java调用jni的时候老是抛Exception in thread "main" java.lang.UnsatisfiedLinkError, 我从同一个.dll中导出的函数方法能够找到,用depends打开动态库也能发现封装的 函数名,就是Java调用的时候出现这个错误,求大神们帮帮忙啊 。。。

Java项目调用jni接口报NoClassDefFoundError,直接执行main方法就可以,但是从controller调就报错

项目中需要调用C语言写的方法,网上查到用jni操作,然后根据网上的方法编译出了.h文件和C文件, 放到linux 通过java xxx 执行main方法,成功调用。 下面贴一下java代码 ``` package com.yufeng.cj.common; public class MyNative { static { System.loadLibrary( "HelloNative" ); } public static native void greeting(); public static void main(String[] args) { greeting(); } } ``` C代码 ``` #include <stdio.h> #include "com_yufeng_cj_common_MyNative.h" JNIEXPORT void JNICALL Java_com_yufeng_cj_common_MyNative_greeting(JNIEnv *env, jobject c1) { printf("Hello Native!!\n"); } ``` 命令行执行,打印出东西 ![](https://img-ask.csdn.net/upload/201811/10/1541831575_975104.png) 但是后面换到controller方法里去调就报错了 ``` @PostMapping("/toC") public void toC(){ MyNative.greeting(); } ``` 报错信息: ``` 2018-11-10 14:34:29.996 ERROR -- com.yufeng.cj.controller.AdviceController.handlerException [line51 ] : Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.yufeng.cj.common.MyNative org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.yufeng.cj.common.MyNative at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1006) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:925) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:974) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:877) at javax.servlet.http.HttpServlet.service(HttpServlet.java:661) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:851) at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:109) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:130) at org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66) at org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:105) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:123) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.yufeng.cj.common.MyNative at com.yufeng.cj.controller.TestController.toC(TestController.java:21) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:209) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:102) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:891) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:797) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:991) ... 51 common frames omitted 2018-11-10 14:34:30.000 WARN -- springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver.resolveException [line140 ] : Resolved [org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class com.yufeng.cj.common.MyNative] ``` 目前目录结构里是这样的: ![图片说明](https://img-ask.csdn.net/upload/201811/10/1541832416_824298.png) 求大神解答

C++通过jni向java层传递自定义结构体参数

自定义结构体在java中定义为相应的类,存储数据变量 C++的回调函数的注册函数为: ``` void CCtest::registerInit(void (*pFunc)(PARAMETER*)){ xxxxxxxx ... } ``` 现有若干问题不解。 1.该函数的函数签名的变量类型该如何进行书写? 是直接将参数看作是void类型? ``` {"registerInit","()V",(void*)native_registerInit}; ? ``` 2.假设上述问题解决。 在jni层通过定义 ``` static jmethodID registerInit_callback_method_ID; typedef void (* registerInit_Cb_t)(PARAMETER* myPara); ``` 在native_registerInit函数中直接调用 ``` CCtest::registerInit(registerInit_Cb_t); ``` registerInit_Cb_t指向具体的实现函数nativeregisterInit_Cb; 在函数void nativeregisterInit_Cb(PARAMETER*)中,通过 ``` env->CallVoidMethod(xxxobject,xxxmethodID,/*xxx结构体的参数如何表示成类类型?(jobject?)*/); ``` 调用java层中的回调函数。

关于android studio调用第三方so库的细节问题,如何建立Java和so库之间的通信?

最近开始研究ndk,因为c++不懂,所以比较吃力。 目前了解了c++文件的调用 1.ndk环境配置 2.c++文件导入 3.CmakeLists.txt文件配置 4.通过native-lib 建立Java和c++通信,函数调用 关于第三方so库调用网上的教程看了很多,但是因为非常小白,很多细节还是不明白, 关于so库的导入已经了解了,但是Cmakelists.txt文件里面该如何编写, 以及Java和so库如何通信,调用函数还是搞不懂。 比如说我有a.so, b.so, c.so三个文件,他们之间相互关联, 有一个void test(int a, int b)可调用的函数,那么在Java和CmakeLists.txt中我该如何操作呢? 希望大神可以指点一下,非常感谢!

so文件函数加密的问题

参考这个文章http://www.cnblogs.com/roccheung/p/5797266.html,进行so文件加密。 下载文章的demo进行测试,发现是可以加密demo中自带的libdemo.so文件的。 但是用来加密自己从apk里面加压出来的lib\armeabi\libnative-lib.so的函数checkSignature,发现找不到函数。 请各位大神赐教!非常感谢!!!!! 附上代码和cpp文件 http://download.csdn.net/download/hrdzkj/10001355。

java通过JNA调用DLL时出错,求给个对应的接口函数,感激不尽

原API如下 int * facedetect_frontal( unsigned char * gray_image_data, int width, int height, int step, float scale, int min_neighbors, int min_size, int max_size=0); int * facedetect_multiview( unsigned char * gray_image_data, int width, int height, int step, float scale, int min_neighbors, int min_size, int max_size=0); 使用JNA写接口函数应该怎么写,int* 和 unsigned char * 数据类型怎么转换,int max_size=0怎么办 我写成这样: public int facedetect_multiview( String gray_image_data, int width, int height, int step, float scale, int min_neighbors, int min_size,int max_size); 运行出错: Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'facedetect_multiview': 找不到指定的程序。 我估计是数据类型不匹配的原因,求给一个对应的完整的java函数

Android Service类中调用NDK编译的库的问题

现碰到的问题如下: 在Java层写了一个类代码如下: ``` public class MeiaPush {         public native int meia_push_init ();         public native int meia_push_set_client_info (String cid, String pwd, String type, String token);         public native int meia_push_get_alarmlist (Object param, int count);         public native int meia_push_exit ();                   public int MeiaPushInit ()         {             Log.e ("Yan", "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");             meia_push_init ();             return meia_push_set_client_info ("00000000001", "123456", "android", "yan_yan");         } } ``` JNI层也实现了。 在其它类中调用MeiaPushInit 这个函数没有问题, 但是在Service类中调用就会出现“java.lang.unsatisfiedlinkerror native method not found” 请问 为什么会出现这个问题, 如何解决。 Service类中和其它类调用JNI函数有什么区别么? 谢谢! 这是帖子地址:[Android Service类中调用NDK编译的库的问题](http://bbs.csdn.net/topics/391019780 "")

java dll jni jnative相关问题

问个问题: 我要用java调用一个dll,使用JNI或者(JNative组件),但dll中有一个函数返回的是指针类型.vb中用lstrcpy(result, pointer) 就可以得到, vc中 char* ret = 函数() 就可以得到,可我的java中怎么得到指针对应的值呢.....????? JNative中只有jNative.getRetValAsInt() jNative.getRetVal()两个方法,一个返回String值,一个返回int值 [b]问题补充:[/b] 我不知道对于DLL的 [b]指针函数[/b] ,JNative在调用时是否能返回指针... lewhwa 告诉我的方法"那就用JNative.getRetVal(),然后再用String.toCharArray()得到CharArray",,,可这个CharArray有什么用呢,能说详细一点吗?我要的是: [b]DLL中[i]指针函数[/i]返回的[color=red]指针[/color]对应的值![/b] 谢谢各位的帮助!!! [b]问题补充:[/b] 指针对于的值就是String包含的内容,[b]如果是这样[/b]就比较好办!只是我调试的时候调用得到的String都是一个空串,不是我预期的结果,所以困惑.另外,查了一些资料发现[color=red]JNA(Java Native Access)[/color]对Dll调用好像处理得更完美一些....[color=red]?[/color] "通过传入String的引用来获取函数处理的值" 这点我能够理解,只是我手头的dll是封装好了的没办法更改,现在就是要取其返回的指针值. 我再来试试看,...再次感谢感谢! [b]问题补充:[/b] 给我email好不?或者我的QQ:1006570814

如何从Go代码中调用Java本机接口C函数?

<div class="post-text" itemprop="text"> <p>I am up with implementing my Java Native Interface functions in Golang using the golang <code>C</code> lib. <br> Now I want to convert a <code>jstring</code> to an UTF-8 string using the JNI function <code>GetStringUTFChars</code> but I get an error when doing it. These are the steps I have done:</p> <p>In my Java class (called MyClass) where I have defined the JNI method, I have:</p> <pre><code>public static native void print(String msg); </code></pre> <p>Using <code>javah</code>, I have generated the <code>.h</code>-file with the function defined in C language:</p> <pre><code>JNIEXPORT void JNICALL Java_com_mypackage_MyClass_print (JNIEnv *, jclass, jstring); </code></pre> <p>Then, in my Go code I have the following code:</p> <pre><code>package main // #cgo CFLAGS: -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include // #cgo CFLAGS: -I/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/include/darwin /* #include &lt;jni.h&gt; */ import "C" //export Java_com_mypackage_MyClass_print func Java_com_mypackage_MyClass_print(env *C.JNIEnv, clazz C.jclass, str C.jstring) { _ = C.GetStringUTFChars(env, str, 0) } </code></pre> <p>When I build the <code>go</code> file using:<br> <code>go build -buildmode=c-shared -o libmyclass.dylib libmyclass.go</code> <br>then I get the following error:</p> <p><code>could not determine kind of name for C.GetStringUTFChars</code></p> <p>How should I call the <code>GetStringUTFChars</code> defined in the <a href="https://docs.oracle.com/javase/8/docs/technotes/guides/jni/spec/functions.html" rel="nofollow noreferrer">JNI spec</a> so I then can print the string with <code>fmt.println</code>?</p> <p><strong>EDIT 2</strong><br> Removed "edit 1" since the procedure above was correct, it was just the LD_LIBRARY_PATH variable that was not set. </p> </div>

AndroidM GetMethodID NoSuchMethodError

jni androidm GetMethodID总是报错NoSuchMethodError,如下: jni部分代码 void native_jni_call_java_function(JNIEnv *env, jobject obj) { jclass cls = env->FindClass(CLASS_PATH); jmethodID mid = env->GetMethodID(cls, "callback", "()V"); if (mid == NULL) { return; } env->CallVoidMethod(obj, mid); } android部分代码: class InstanceMethodCall { native void jniCallJavaMethod(); void callback() { Log.d("abc","call back from jni"); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); InstanceMethodCall instance = new InstanceMethodCall(); instance.jniCallJavaMethod(); } 但是如果我在调用jniCallJavaMethod之前加一行: instance.callback(),之后再执行instance.jniCallJavaMethod();就正确了。这是为何? 困扰好久了!!!

AndroidM GetMethodID NoSuchMethodError 问题

GetMethodID总是报错NoSuchMethodError,如下: jni部分代码 void native_jni_call_java_function(JNIEnv *env, jobject obj) { jclass cls = env->FindClass(CLASS_PATH); jmethodID mid = env->GetMethodID(cls, "callback", "()V"); if (mid == NULL) { return; } env->CallVoidMethod(obj, mid); } android部分代码: class InstanceMethodCall { native void jniCallJavaMethod(); private void callback() { Log.d("abc","call back from jni"); } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); InstanceMethodCall instance = new InstanceMethodCall(); instance.jniCallJavaMethod(); } 但是如果我在调用jniCallJavaMethod之前加一行: instance.callback(),之后再执行instance.jniCallJavaMethod();就正确了。这是为何? 困扰好久了!!!

Android中通过JNI传递图片数据的问题(IplImage和Bitmap)

我的C++代码在Visual Studio中运行是正常的,输入和输出图片如下: ![图片说明](https://img-ask.csdn.net/upload/201505/20/1432087410_807838.png) 在安卓中使用native函数调用此C++代码,显示结果如下: ![图片说明](https://img-ask.csdn.net/upload/201505/20/1432087518_964012.png) 部分代码如下: c++ ``` int* SharedMatting::getResult(int w, int h){ int intsize = w*h; int* outImage = new int[intsize]; IplImage *tempp = new IplImage(outputMat);//outputMat is a 4channels Mat. int* pixalpha = new int[intsize*4]; int* pixred = new int[intsize*4]; int* pixgreen = new int[intsize*4]; int* pixblue = new int[intsize*4]; for(int i=0; i<(intsize); i++){ pixalpha[i] = (int)tempp->imageData[i*4+3]; pixblue[i] = (int)tempp->imageData[i*4+0]; pixgreen[i] = (int)tempp->imageData[i*4+1]; pixred[i] = (int)tempp->imageData[i*4+2]; outImage[i] = (pixalpha[i] << 24) | (pixred[i] << 16) | (pixgreen[i] << 8) | pixblue[i]; } return outImage; } ``` main.cpp ``` JNIEXPORT jintArray JNICALL Java_Matting (JNIEnv* env, jclass clas, jint w, jint h){ int size = w * h; jintArray result = env->NewIntArray(size); int* resultemp = new int[size]; resultemp = sm.getResult(w, h); env->SetIntArrayRegion(result, 0, size, resultemp); return result; } ``` Java code with Android: ``` private MyTask mTask; ImageView imgView; int[] resultInt; int w, h; private class MyTask extends AsyncTask<String, Integer, String> { protected String doInBackground(String... params) { resultInt = SharedMat.Matting(w, h); return null; } protected void onPostExecute(String result) { Bitmap resultImg = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); resultImg.setHasAlpha(true); resultImg.setPixels(resultInt, 0, w, 0, 0, w, h); imgView.setImageBitmap(resultImg); } } ``` 我觉得应该是图片数据传来传去传坏掉了?

请教大家一个jni的问题

引用别人.so 函数库 需要你自己native方法对应类的包名 和之前打包成.so函数库的包名一致 为什么 我 调用 百度地图的so库 包名又可以不一致? 而调用 自己打包的so 却要 包名一致

Android NDk 怎么编译时动态链接第三方so库,有头文件

最近在做一个项目,大神把底层的算法封装成so(普通的c++函数),并给出头文件,我需要先 进行封装,然后给java调用。在我写的C++(符合JNI规范)里面调用so库函数, 下面贴图求解答: 1.项目的目录结构 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449650952_279016.png) 其中 libvvw.so就是第三方库; Test_vvw.h就是第三方库的头文件 2.java 的native方法定义 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449651054_89245.png) 3.native的实现方法体 FrameDecode.cpp文件 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449651104_378817.png) 4.Android.mk文件 ![图片说明](https://img-ask.csdn.net/upload/201512/09/1449654849_188618.png) 进行编译时 怎样动态链接so,我总是遇到![图片说明](https://img-ask.csdn.net/upload/201512/09/1449648769_631416.png)错误,求解答,非常感谢

大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了

大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...

在中国程序员是青春饭吗?

今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...

程序员请照顾好自己,周末病魔差点一套带走我。

程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

和黑客斗争的 6 天!

互联网公司工作,很难避免不和黑客们打交道,我呆过的两家互联网公司,几乎每月每天每分钟都有黑客在公司网站上扫描。有的是寻找 Sql 注入的缺口,有的是寻找线上服务器可能存在的漏洞,大部分都...

点沙成金:英特尔芯片制造全过程揭密

“亚马逊丛林里的蝴蝶扇动几下翅膀就可能引起两周后美国德州的一次飓风……” 这句人人皆知的话最初用来描述非线性系统中微小参数的变化所引起的系统极大变化。 而在更长的时间尺度内,我们所生活的这个世界就是这样一个异常复杂的非线性系统…… 水泥、穹顶、透视——关于时间与技艺的蝴蝶效应 公元前3000年,古埃及人将尼罗河中挖出的泥浆与纳特龙盐湖中的矿物盐混合,再掺入煅烧石灰石制成的石灰,由此得来了人...

讲一个程序员如何副业月赚三万的真实故事

loonggg读完需要3分钟速读仅需 1 分钟大家好,我是你们的校长。我之前讲过,这年头,只要肯动脑,肯行动,程序员凭借自己的技术,赚钱的方式还是有很多种的。仅仅靠在公司出卖自己的劳动时...

上班一个月,后悔当初着急入职的选择了

最近有个老铁,告诉我说,上班一个月,后悔当初着急入职现在公司了。他之前在美图做手机研发,今年美图那边今年也有一波组织优化调整,他是其中一个,在协商离职后,当时捉急找工作上班,因为有房贷供着,不能没有收入来源。所以匆忙选了一家公司,实际上是一个大型外包公司,主要派遣给其他手机厂商做外包项目。**当时承诺待遇还不错,所以就立马入职去上班了。但是后面入职后,发现薪酬待遇这块并不是HR所说那样,那个HR自...

女程序员,为什么比男程序员少???

昨天看到一档综艺节目,讨论了两个话题:(1)中国学生的数学成绩,平均下来看,会比国外好?为什么?(2)男生的数学成绩,平均下来看,会比女生好?为什么?同时,我又联想到了一个技术圈经常讨...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

如果你是老板,你会不会踢了这样的员工?

有个好朋友ZS,是技术总监,昨天问我:“有一个老下属,跟了我很多年,做事勤勤恳恳,主动性也很好。但随着公司的发展,他的进步速度,跟不上团队的步伐了,有点...

我入职阿里后,才知道原来简历这么写

私下里,有不少读者问我:“二哥,如何才能写出一份专业的技术简历呢?我总感觉自己写的简历太烂了,所以投了无数份,都石沉大海了。”说实话,我自己好多年没有写过简历了,但我认识的一个同行,他在阿里,给我说了一些他当年写简历的方法论,我感觉太牛逼了,实在是忍不住,就分享了出来,希望能够帮助到你。 01、简历的本质 作为简历的撰写者,你必须要搞清楚一点,简历的本质是什么,它就是为了来销售你的价值主张的。往深...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

优雅的替换if-else语句

场景 日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!本文将介绍三板斧手段: 优先判断条件,条件不满足的,逻辑及时中断返回; 采用策略模式+工厂模式; 结合注解,锦...

离职半年了,老东家又发 offer,回不回?

有小伙伴问松哥这个问题,他在上海某公司,在离职了几个月后,前公司的领导联系到他,希望他能够返聘回去,他很纠结要不要回去? 俗话说好马不吃回头草,但是这个小伙伴既然感到纠结了,我觉得至少说明了两个问题:1.曾经的公司还不错;2.现在的日子也不是很如意。否则应该就不会纠结了。 老实说,松哥之前也有过类似的经历,今天就来和小伙伴们聊聊回头草到底吃不吃。 首先一个基本观点,就是离职了也没必要和老东家弄的苦...

为什么你不想学习?只想玩?人是如何一步一步废掉的

不知道是不是只有我这样子,还是你们也有过类似的经历。 上学的时候总有很多光辉历史,学年名列前茅,或者单科目大佬,但是虽然慢慢地长大了,你开始懈怠了,开始废掉了。。。 什么?你说不知道具体的情况是怎么样的? 我来告诉你: 你常常潜意识里或者心理觉得,自己真正的生活或者奋斗还没有开始。总是幻想着自己还拥有大把时间,还有无限的可能,自己还能逆风翻盘,只不是自己还没开始罢了,自己以后肯定会变得特别厉害...

男生更看重女生的身材脸蛋,还是思想?

往往,我们看不进去大段大段的逻辑。深刻的哲理,往往短而精悍,一阵见血。问:产品经理挺漂亮的,有点心动,但不知道合不合得来。男生更看重女生的身材脸蛋,还是...

为什么程序员做外包会被瞧不起?

二哥,有个事想询问下您的意见,您觉得应届生值得去外包吗?公司虽然挺大的,中xx,但待遇感觉挺低,马上要报到,挺纠结的。

当HR压你价,说你只值7K,你该怎么回答?

当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫。 礼貌地说:“7K是吗?了解了。嗯~其实我对贵司的面试官印象很好。只不过,现在我的手头上已经有一份11K的offer。来面试,主要也是自己对贵司挺有兴趣的,所以过来看看……”(未完) 这段话主要是陪HR互诈的同时,从公司兴趣,公司职员印象上,都给予对方正面的肯定,既能提升HR的好感度,又能让谈判气氛融洽,为后面的发挥留足空间。...

面试:第十六章:Java中级开发(16k)

HashMap底层实现原理,红黑树,B+树,B树的结构原理 Spring的AOP和IOC是什么?它们常见的使用场景有哪些?Spring事务,事务的属性,传播行为,数据库隔离级别 Spring和SpringMVC,MyBatis以及SpringBoot的注解分别有哪些?SpringMVC的工作原理,SpringBoot框架的优点,MyBatis框架的优点 SpringCould组件有哪些,他们...

面试阿里p7,被按在地上摩擦,鬼知道我经历了什么?

面试阿里p7被问到的问题(当时我只知道第一个):@Conditional是做什么的?@Conditional多个条件是什么逻辑关系?条件判断在什么时候执...

你打算用Java 8一辈子都不打算升级到Java 14,真香

我们程序员应该抱着尝鲜、猎奇的心态,否则就容易固步自封,技术停滞不前。

无代码时代来临,程序员如何保住饭碗?

编程语言层出不穷,从最初的机器语言到如今2500种以上的高级语言,程序员们大呼“学到头秃”。程序员一边面临编程语言不断推陈出新,一边面临由于许多代码已存在,程序员编写新应用程序时存在重复“搬砖”的现象。 无代码/低代码编程应运而生。无代码/低代码是一种创建应用的方法,它可以让开发者使用最少的编码知识来快速开发应用程序。开发者通过图形界面中,可视化建模来组装和配置应用程序。这样一来,开发者直...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

《经典算法案例》01-08:如何使用质数设计扫雷(Minesweeper)游戏

我们都玩过Windows操作系统中的经典游戏扫雷(Minesweeper),如果把质数当作一颗雷,那么,表格中红色的数字哪些是雷(质数)?您能找出多少个呢?文中用列表的方式罗列了10000以内的自然数、质数(素数),6的倍数等,方便大家观察质数的分布规律及特性,以便对算法求解有指导意义。另外,判断质数是初学算法,理解算法重要性的一个非常好的案例。

《Oracle Java SE编程自学与面试指南》最佳学习路线图(2020最新版)

正确选择比瞎努力更重要!

一文带你入门Java Stream流,太强了

两个星期以前,就有读者强烈要求我写一篇 Java Stream 流的文章,我说市面上不是已经有很多了吗,结果你猜他怎么说:“就想看你写的啊!”你看你看,多么苍白的喜欢啊。那就“勉为其难”写一篇吧,嘻嘻。 单从“Stream”这个单词上来看,它似乎和 java.io 包下的 InputStream 和 OutputStream 有些关系。实际上呢,没毛关系。Java 8 新增的 Stream 是为...

立即提问
相关内容推荐